Masino Sinaga

Web Development and PHPMaker

Anda di sini: Beranda / PHPMaker / Mudahnya Menambahkan Beberapa Kondisi pada String Filter di PHPMaker
Kapan Kita Tidak Mengaktifkan Referential Integrity di Master/Detail PHPMaker?
Lebih Lanjut Tentang Session Timeout di PHPMaker

Mudahnya Menambahkan Beberapa Kondisi pada String Filter di PHPMaker

Sab, 30 Januari 2016 oleh Masino Sinaga 5 Komentar

Seperti yang sudah kita ketahui, PHPMaker memiliki property Filter pada Field yang menggunakan control Combobox atau Select Option untuk menyaring Record yang diambil dari Lookup Table tertentu. Dengan mengoptimalkan property Filter ini, maka kita sebagai Web Developer dapat menaruh data String yang berisi kriteria SQL untuk menyaring Record dari Lookup Table tadi.

Jadi, tidak semua Record yang berasal dari Lookup Table ditampilkan pada control Combobox yang digunakan oleh Field tadi. Hal ini sangat terasa manfaatnya untuk Lookup Table yang memiliki banyak (ratusan atau ribuan) Record dan ditampilkan melalui control Combobox. Selain waktu loading halaman bisa lebih cepat, maka kita dapat mengambil data yang sesuai dengan kebutuhan saja.

Tidak bisa dihindari — atau bahkan sering kali — kita harus menambahkan beberapa kondisi di dalam String Filter tadi. Sayangnya, String Filter ini harus terdiri dari satu baris String saja. Kita tidak bisa menulis code PHP dengan menggunakan block seperti if … elseif … else yang biasanya kita tulis dalam beberapa baris ke bawah.

Meskipun demikian, bukan PHPMaker namanya jika kita tidak bisa mengatasi permasalahan ini. Kita tetap bisa menambahkan beberapa kondisi dalam satu baris String Filter tadi. Untungnya, di PHP ada sintaks yang memungkinkan kita untuk mempersingkat penulisan beberapa kondisi menggunakan operator karakter tanda tanya (?) dan titik dua (:).

Selengkapnya mengenai hal ini bisa Anda baca melalui PHP Shorthand If/Else Using Ternary Operators (?:). Bagi yang belum tahu, saya sarankan agar Anda mempelajari pola penulisannya.

Oke, kalau sudah, sekarang mari kita kembali lagi kepada property Filter milik Field yang menggunakan Lookup Table tadi. Beberapa hari yang lalu, saya baru saja berhasil menemukan solusi untuk menaruh 5 (Lima) kondisi dalam satu baris String Filter tadi di salah satu Aplikasi Web yang saya bangun. Wow, keren ya! Ehm… ehm… 🙂

Jadi begini. Saya harus bisa menampilkan data dari Lookup Table tadi untuk halaman Edit untuk setiap 4 (Empat) level Pengguna yang berbeda, termasuk juga untuk halaman selain Edit dan keempat level Pengguna tadi. Itu artinya, saya harus bisa menangani 5 (Lima) kondisi sekaligus dalam satu String Filter yang hanya satu baris tadi.

Supaya lebih jelas lagi, saya berikan contoh seperti ini. Saya ingin menampilkan data dari Lookup Table yang berbeda-beda untuk lima kondisi berikut:

  • Kondisi Pertama: Halaman Edit dan Level Pengguna ke-1
  • Kondisi Kedua: Halaman Edit dan Level Pengguna ke-2
  • Kondisi Ketiga: Halaman Edit dan Level Pengguna ke-3
  • Kondisi Keempat: Halaman Edit dan Level Pengguna ke-4
  • Kondisi Kelima: Selain empat kondisi di atas

Sampai di sini saya berharap Anda sudah paham. Jika belum, silahkan baca ulang dengan teliti semua penjelasan di atas sampai Anda benar-benar mengerti. Setelah itu, barulah Anda bisa melanjutkan membaca alinea di bawah ini. 🙂

Untuk mengimplementasikan kelima kondisi tadi dalam satu String Filter, tentu merupakan tantangan tersendiri yang sungguh mengasyikkan. Mengapa? Karena kita harus terlebih dulu mengetahui konsep dari penyingkatan penulisan tadi dalam satu baris, seperti yang ditampilkan pada pola penulisan berikut:

(kondisi) ? "ini jika kondisi true" : "ini jika kondisi false"

Dari kode di atas, ternyata konsepnya sangatlah sederhana. Ada tiga bagian di atas yang perlu kita cermati dengan seksama.

Di Bagian Pertama adalah pernyataan yang berisi kondisi yang akan diperiksa sebelum operator tanda tanya. Jika kondisi tadi mengembalikan nilai true, maka kembalikan String yang bernilai “ini jika kondisi true” pada Bagian Kedua. Sebaliknya, jika kondisi false, maka kembalikan String yang bernilai “ini jika kondisi false” pada Bagian Ketiga.

Bayangkanlah, dari pola yang paling sederhana itu, kita harus bisa memasukkan kelima kondisi tadi hanya dalam satu baris saja. Bagaimana caranya? Tentu timbul pertanyaan.

Nah, untuk menaruh lima kondisi tadi, maka kita harus tetap berpedoman kepada pola di atas. Artinya, untuk kondisi pertama kita menaruhnya di Bagian Pertama, sedangkan kondisi yang kedua, dan seterusnya sampai yang terakhir, kita menaruhnya di Bagian Kedua, dan hasilnya dalam posisi terbalik dari Bagian Ketiga sampai ke arah dalam Bagian Kedua.

Supaya lebih jelas, ini dia String Filter untuk mengakomodir kelima kondisi di atas tadi:

(CurrentPageID()<>"edit" || !IsUserLevel4()) ? ( (CurrentPageID()<>"edit" || !IsUserLevel3()) ?  ( (CurrentPageID()<>"edit" || !IsUserLevel2()) ? ( (CurrentPageID()=="edit" && IsUserLevel1()) ? "String Filter untuk halaman Edit dan UserLevel1" : "String Filter untuk semua halaman") : "String Filter untuk halaman Edit dan UserLevel2" ) : "String Filter untuk halaman Edit dan UserLevel3" ) : "String Filter untuk halaman Edit dan UserLevel4"

Penting untuk diingat, bahwa dalam contoh kode di atas, kita harus memastikan memiliki global function yang masing-masing bernama IsUserLevel4(), IsUserLevel3(), IsUserLevel2(), dan IsUserLevel1().

Kalau kita perhatikan lagi dari kode barusan, maka itu pun sebenarnya terdiri dari tiga bagian. Jangan mau tertipu dengan kerumitan kode tadi, karena kode itu hanyalah terdiri dari tiga bagian. Sama seperti pola penulisan yang paling sederhana di kode awal sebelumnya.

Supaya lebih jelas, mari kita pecah menjadi tiga bagian, yaitu:

Bagian Pertama:

(CurrentPageID()<>"edit" || !IsUserLevel4())

Bagian Kedua:

( (CurrentPageID()<>"edit" || !IsUserLevel3()) ?  ( (CurrentPageID()<>"edit" || !IsUserLevel2()) ? ( (CurrentPageID()=="edit" && IsUserLevel1()) ? "String Filter untuk halaman Edit dan UserLevel1" : "String Filter untuk semua halaman") : "String Filter untuk halaman Edit dan UserLevel2" ) : "String Filter untuk halaman Edit dan UserLevel3" )

Bagian Ketiga:

"String Filter untuk halaman Edit dan UserLevel4"

Jika Anda masih ragu atau kurang yakin, maka silahkan copy dan paste-kan kode pada Bagian Kedua tadi ke dalam Text Editor seperti Notepad++. Setelah itu, letakkan kursor mouse Anda sebelum tanda kurung pembuka yang letaknya pada awal String tersebut.

Perhatikanlah bahwa tanda kurung yang Anda klik tadi akan berwarna merah, demikian juga tanda kurung penutup di bagian paling akhir dari String tadi pun akan berwarna merah. Itu artinya, semua karakter yang berada di antara kurung pembuka dan penutup tadi adalah satu kesatuan yang dibungkus di dalam Bagian Kedua.

Setelah Anda memahami konsep ini, maka sekarang Anda dapat fokus mempelajari setiap kondisi yang berada di dalam Bagian Kedua tadi. Meskipun di sana seolah terlihat hanya 3 (Tiga) kondisi yang diperiksa, yaitu masing-masing untuk Pengguna Level ke-3, ke-2, dan ke-1, sebenarnya ada satu kondisi lagi yang diperiksa, yaitu kondisi yang kelima, yang merupakan bagian else terakhir sama seperti dalam blok if … elseif … else ….

Perhatikanlah juga, bahwa supaya kita dapat menampung lebih dari dua kondisi, maka kita harus memulai dengan melakukan pemeriksaan yang bukan kondisi yang diharapkan (negasi atau lawan dari kondisi sebenarnya). Mengapa? Jawabannya simpel saja. Supaya setelah pemeriksaan suatu kondisi, maka kita bisa merangkainya dengan pemeriksaan kondisi berikutnya, demikian seterusnya, sampai yang terakhir Anda melihat pemeriksaan kondisi tanpa negasi.

Betapa mudahnya menaruh beberapa kondisi dalam sebuah String di property Filter milik Field yang melakukan Lookup ke Table tertentu, bukan?

PHPMaker memang keren, dah… 🙂

Ditempatkan di bawah: PHPMaker Ditag dengan:Belajar PHPMaker, ComboBox, Fields Setup, Filter, Lookup Field, Lookup Table, PHPMaker Indonesia, Tutorial PHPMaker

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com, ilovephpmaker.com, dan phpmakerprojects.com.

Kapan Kita Tidak Mengaktifkan Referential Integrity di Master/Detail PHPMaker?
Lebih Lanjut Tentang Session Timeout di PHPMaker

Komentar

  1. Tomi mengatakan

    Jum, 30 Mei 2025 pada 8:53 pm

    Pak Masino, saya ingin bertanya mengenai penulisan syntax di Filter Editor, dimana contoh penerapannya adalah:

    contoh query dengan ketetuan: filter must be a valid QUOTED STRING that can be concatenated into a sql string

    "`State`='".$_GET["state]."'"
    

    Dalam penerapan ini, selalu terjadi Error.
    Contohnya adalah saya ingin menampilkan Nama Direksi yang hanya ditanganin oleh Sekretaris nya saja. Sebelum dan sesudahnya, terima kasih

    Balas
    • Masino Sinaga mengatakan

      Jum, 30 Mei 2025 pada 9:04 pm

      Pakai PHPMaker versi 2025 ya? Jika iya, maka hindari penggunaan $_GET.

      Sebagai gantinya, coba gunakan fungsi global Get().

      Balas
  2. Tomi mengatakan

    Jum, 30 Mei 2025 pada 10:06 pm

    Terima kasih atas respon cepatnya pak.
    Saya masih menggunakan PHPMaker 2024, kira2 bagaimana ya syntax nya ?

    Balas
    • Masino Sinaga mengatakan

      Sab, 31 Mei 2025 pada 8:15 am

      Seperti ini:

      "`State` = '" . Get("state") . "'"
      
      Balas
  3. Charly mengatakan

    Sab, 25 Oktober 2025 pada 2:03 pm

    Hallo Pak Masino,
    Mohon bantuan Pak Masino, saya menggunakan 3 buah select kemudian saya aktifkan ext. search nya, permasalahannya saya ingin select yang terakhir yakni Field Bulan menjadi mandatory select, sehingga sebelum memilih select bulan tersebut data belum akan terfilter. Mohon bantuannya Pak Masino

    Salam

    Balas

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses

Pos-pos Terbaru

  • Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Solusi Buat Field Lookup Table yang Bermasalah di Server Hosting
  • Hati-Hati Meredirect Pengguna Setelah Login di PHPMaker 2025
  • Ini Alasan Mengapa Kalian Harus Selalu Pakai PHPMaker versi Terakhir
  • Masino Extensions for PHPMaker 2025 Now Changed!

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • Charly pada Mudahnya Menambahkan Beberapa Kondisi pada String Filter di PHPMaker
  • Masino Sinaga pada Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Nanda pada Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Masino Sinaga pada Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Masino Sinaga pada Mengenal File Upload di PHPMaker

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Projects
  6. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

(c) Masino Sinaga 2009 - 2025 | WordPress | Catat masuk | Kembali ke atas