Meningkatkan Penyaringan Sederhana Menjadi Lanjutan di Pods CMS WordPress

Saat ini, Form Penyaringan (Filter) sampai dengan Pods CMS versi 1.7.3 masih menggunakan form yang sangat sederhana. Form tersebut hanya memiliki satu teks pencarian dan satu tombol saja. Selain itu, form penyaringan ini hanya dapat menyaring recordset yang dikembalikan oleh proses penyaringan tadi berdasarkan field name saja. Lalu saya membuat modifikasi/peningkatan fitur dengan menambahkan combobox yang berisi daftar semua field dari tabel supaya membuat pengguna lebih mudah untuk memilih berdasarkan field atau kolom yang mana mareka akan menyaring data, di mana defaultnya adalah saring di semua field. Di samping itu, saya juga menambahkan tipe pencarian, apakah menggunakan Cocok Semua atau tidak (Cocok Sebagian), adanya pilihan Jumlah Maksimal Record per Halaman, dan pilihan field untuk memberikan pilihan kepada pengguna dalam mengurutkan recordset berdasarkan field dan tipe pengurutan tertentu pula.

  1. Buka file \pods\core\list_filters.php, cari kode ini:

    44
    45
    46
    47
    48
    49
    
    // Display the search box and submit button
    $search = empty($_GET['search']) ? '' : $_GET['search'];
    ?>
            <input type="text" class="pod_search" name="search" value="<?php echo $search; ?>" />
            <input type="submit" class="pod_submit" value="<?php echo $label; ?>" />
        </form>

    lalu ganti dengan kode berikut ini:

    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    
    // Display the search box and submit button
    $search = empty($_GET['search']) ? '' : $_GET['search'];
    $match = empty($_GET['match']) ? '1' : $_GET['match']; 
    $pagelimit = empty($_GET['limit']) ? '10' : $_GET['limit'];
    $field = empty($_GET['field']) ? '(Any-field)' : $_GET['field'];
    $sortby = empty($_GET['sortby']) ? 'id' : $_GET['sortby'];
    $sorttype = empty($_GET['sorttype']) ? 'ASC' : $_GET['sorttype'];
    ?>
     
    <?php 
       $strField = "SHOW FIELDS FROM `wp_pod_tbl_$datatype`";
       $resultField = mysql_query($strField);
       $numberField = mysql_numrows($resultField);
       $arrField[0]='(Any-field)';
       $strSearchField = "";
       for ($i=1; $i<=$numberField; $i++) {
         $arrField[$i] = mysql_result($resultField, $i-1, "Field");
       }
       echo ("<table bgcolor='#F7F7F7' width='100%'>");
       echo ("<tr><td align='right'>Field:</td><td><select name='field'>"); // </td>\n<td>
       for ($i=0; $i<=$numberField; $i++)
       {
         $strSelField = ($arrField[$i]==$field) ? 'selected' : '';
         echo ("<option $strSelField value=\"$arrField[$i]\">$arrField[$i]</option>");
       }
       echo ("</select></td>");
     
       echo ("<td align='right'>Match:</td><td><select name='match'>");
       $SelAny = ($match=='1')?'selected' : '';
       $SelMatch = ($match=='2')?'selected' : '';
       echo ("<option $SelAny value='1'>Any Part</option>");
       echo ("<option $SelMatch value='2'>Match Case</option>");
       echo ("</select></td>");
     
    ?>
     
       <td align='right'>Page limit:</td><td><select name='limit'>
       <?php 
       for ($x = 5; $x <= 50; $x += 5)
       {
       ?>
         <option  value="<?=$x?>" <?=($pagelimit==$x )?'selected':''?>><?=$x?></option>
       <?php 
       } 
       ?>   
       </select></td><td rowspan="2">&nbsp;<input type="submit" class="pod_submit" value="&nbsp;<?php echo $label; ?>&nbsp;" /></td>
       </tr>
       <tr><td align='right'><?php echo $label; ?>:</td><td><input type="text" size="12" class="pod_search" name="search" value="<?php echo $search; ?>" /></td>
     
    <?php 
       echo ("<td align='right'>Sort by:</td><td><select name='sortby'>"); // </td>\n<td>
       for ($i=1; $i<=$numberField; $i++)
       {
         $strSelSortBy = ($arrField[$i]==$sortby) ? 'selected' : '';
         echo ("<option $strSelSortBy value=\"$arrField[$i]\">$arrField[$i]</option>");
       }
       echo ("</select></td>");
     
       echo ("<td align='right'>Sort type:</td><td><select name='sorttype'>");
       $SelAsc = ($sorttype=='ASC')?'selected' : '';
       $SelDesc = ($sorttype=='DESC')?'selected' : '';
       echo ("<option $SelAsc value='ASC'>Asc</option>");
       echo ("<option $SelDesc value='DESC'>Desc</option>");
       echo ("</select></td></tr></table>");	   
    ?>
     
       </form>
  2. Buka file \pods\core\Pod.class.php, cari kode ini:

    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    
        function findRecords($orderby = 'id DESC', $rows_per_page = 15, $where = null, $sql = null)
        {
            $page = $this->page;
            $datatype = $this->datatype;
            $datatype_id = $this->datatype_id;
            $limit = ($rows_per_page * ($page - 1)) . ', ' . $rows_per_page;
            $where = empty($where) ? '' : "AND $where";
            $this->rpp = $rows_per_page;
            $i = 0;
     
            // Handle search
            if (!empty($_GET['search']))
            {
                $val = mysql_real_escape_string(trim($_GET['search']));
                $search = "AND (t.name LIKE '%$val%')";
            }
     
            // Add "t." prefix to $orderby if needed
            if (false !== strpos($orderby, ',') && false === strpos($orderby, '.'))
            {
                $orderby = 't.' . $orderby;
            }

    lalu ganti dengan kode berikut ini:

    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    
        function findRecords($orderby = 'id DESC', $rows_per_page = 15, $where = null, $sql = null)
        {
            $page = $this->page;
            $datatype = $this->datatype;
            $datatype_id = $this->datatype_id;
            $limit = ($rows_per_page * ($page - 1)) . ', ' . $rows_per_page;
            $match = $_GET['match'];
            $where = empty($where) ? '' : "AND $where";
            $this->rpp = $rows_per_page;
            $i = 0;
     
            // Handle search
            if (!empty($_GET['search']))
            {
               $val = mysql_real_escape_string(trim($_GET['search']));
     
               // Check which field, added by Masino Sinaga, Sept 25, 2009
               if ($_GET['field']!='') {
                 if ($_GET['field']=='(Any-field)') {
     
                   $strField = "SHOW FIELDS FROM `wp_pod_tbl_$datatype`";
                   $resultField = mysql_query($strField);
                   $numberField = mysql_numrows($resultField);
                   $arrField[0]='(Any-field)';
                   $strSearchField = " (";
                   for ($i=1; $i<=$numberField; $i++) {
                     $arrField[$i] = mysql_result($resultField, $i-1, "Field");
                     if (($i==1) || (($i<$numberField) && ($i>=1))) {
    	           $strSearchField .= ($match=='1') ? " t.$arrField[$i] like '%$val%' OR" : " t.$arrField[$i] like '$val' OR";
    	         } else {
    	           $strSearchField .= ($match=='1') ? " t.$arrField[$i] like '%$val%' " : " t.$arrField[$i] like '$val' ";
    		 }
                   }
                   $search = " AND ".$strSearchField.") ";		  
    	     } else {
                   $search = ($match=='1') ? "AND (t.".$_GET['field']." LIKE '%$val%')" : "AND (t.".$_GET['field']." LIKE '$val')";	
    	   }						  
             } else {
               $search = ($match=='1') ? "AND (t.name LIKE '%$val%')" : "AND (t.name LIKE '$val')";
             }                        
           }
     
           // Check the sortby and sorttype, added by Masino Sinaga, Sept 25, 2009
           if ($_GET['sortby']!='') {
             if ($_GET['sorttype']!='') {
               $orderby = $_GET['sortby']." ".$_GET['sorttype'];
             }							 
           }
     
           // Add "t." prefix to $orderby if needed
           if (false !== strpos($orderby, ',') && false === strpos($orderby, '.'))
           {
             $orderby = 't.' . $orderby;
           }

Demo:
- http://www.openscriptsolution.com/data/countries/
- http://www.openscriptsolution.com/data/states/
- http://www.openscriptsolution.com/data/bank-in-indonesia/

Share

431 kali dibacaCetak Artikel Ini Cetak Artikel Ini