temel php arama motoru oluşturmaya yardımcı

2 Cevap php

i her yerde öğreticiler için baktım ama sadece iyi bir almak gibi olamaz ...

  1. pagination, sütun başlık sıralama ve çoklu filtreleme ile bir arama sayfası (filtreler onay kutularını vardır)

the problem: had pagination working, had sorting working, but can't get them to work together. add to that getting the filters working with a paginated ve sorted resultset

i yalnız php ile bu işi yapmak istiyorum ve yalnız GET formu yöntemleri ile (javascript sonra geliyor, ben bu bir ilerici geliştirme uygulamak istiyorum)

i elde etmek istiyorum istiyorum ... birlikte çalışmak üç işlevleri (sayfalama, sıralama ve filtreleme) nasıl hiçbir fikrim yok

Burada kontrolör için benim kod

function index(){
        $resultset = null;
        if ($this->input->get()){
            // searching
            if ($this->input->get('keyword')){
                $resultset = $this->hotel->searchterm($_GET['keyword']);
            }

            if (!$this->input->get('keyword')){
                $searchkeys = array();
                foreach($_GET as $key => $value){
                    $searchkeys[$key] = $value;
                }
                $resultset = $this->hotel->searchcat($searchkeys);
            }

            // sorting
            if ($this->input->get('sortby')){
                $resultset = $this->hotel->sortdefault($_GET['sortby']);
            }

            if ($this->input->get('keyword') && $this->input->get('sortby')){
                $resultset = $this->hotel->sortdefault($_GET['sortby']);
            }
        }else{
            $resultset = ORM::factory('hotel')->limit(15)->find_all();
        }
        $this->template->title = 'The Hotel Inventory :: Search';
        $this->template->sidebar = new View('search-sidebar');
        $this->template->featured = new View('search-details');
        $this->template->featured->data = $resultset;
    }

Otel kütüphane işlevleri için olduğu gibi:

public function sortdefault($sort, $resultset=null){
        if (!$this->session->get('sortorder')){
            $_SESSION['sortorder'] = 'asc';
        }else if ($this->session->get('sortorder') == 'asc'){
            $_SESSION['sortorder'] = 'desc';
        }else{
            $_SESSION['sortorder'] = 'asc';
        }

        $sortorder = $this->session->get('sortorder');
            $sortby = '';
            switch ($sort){
                case 'name' :
                    $sortby = 'name';
                    break;
                case 'location':
                    $sortby = 'location';
                    break;
                case 'price' :
                    $sortby = 'price';
            }
            if (is_null($resultset)){
                $query = ORM::factory('hotel')->
                select('id, name, location, room, price, date_added, url_path')->
                    limit(15)->orderby($sortby, $sortorder)->find_all();
            }
            return $query;
    }

görünümünde tablo için:

<table id="tableresults" cellpadding="0" cellspacing="0" border="1" >
           <thead>
               <tr style="height: 20px;">
                   <th>Image</th>
                   <th><?php echo (isset($_SESSION['searchterm'])) ?
                        html::anchor('search/index?keyword=' . $_SESSION['searchterm'] . '&sortby=name','Hotel Name') :
                        html::anchor('search/index?sortby=name','Hotel Name');?></th>
                   <th><?php echo html::anchor('search/index?sortby=location','Location');?></th>
                   <th><?php echo html::anchor('search/index?sortby=price','Price');?></th>
                   <th>Actions</th>
               </tr>
           </thead>

           <tbody>
           <?php
           foreach($data as $d){
               echo '<tr class="result">';
               echo '<td>&nbsp;</td>';
               echo '<td>' . html::anchor('hotel/' . $d->url_path, $d->name) . '</td>';
               echo '<td>' . $d->location . '</td>';
               echo '<td>USD ' . $this->util->money($d->price);
               echo '<td>&nbsp</td>';
               echo '</tr>';
           }
           ?>
           </tbody>
  1. Bir öğe (tek bir terim arama) veya birden fazla kategori kullanarak (birden fazla terim arama) için kullanıcı aramalarıyla
  2. Sonuçlar bir sıralama yöntemi bağlantıları ile her sütun başlığı ile, tablolar halinde sunulan, sayfalveırılan (sort.php? = başlığa göre)
  3. kullanıcı kriteri tablosunu filtrelemek için alır (ya da o / o herhangi bir sıralama yapmak değil, o anki tablo filtre edilecektir)

Burada url i (sort henüz sayfaları ve olmaksızın) tüm filtreleri uygulamak eğer gibi görünüyor:

http://localhost/thi/search/index.html?filter[]=featured&filter[]=bankowned&filter[]=new&filter[]=owner&filter[]=broker&filter[]=bank

şimdi itibariyle dağınık görünüyor ama ben o arama motoru URL'ler ile sadece nasıl tahmin :)

2 Cevap

i elde etmek istiyorum istiyorum ... birlikte çalışmak üç işlevleri (sayfalama, sıralama ve filtreleme) nasıl hiçbir fikrim yok

Eğer teslim GİRİŞİ ile bir çekimde tüm değişkenler geçmek beri gönderdiğinde, POST gönderir biraz daha farklıdır GET.

Yani düzgün aynı veri aktarmak için bir sen bir HREF bağlantı each değişken geçmek gerekir, teslim GET.

Bu inşa etmek için, böyle bir şey deneyin:

$URLsubmit=(TheSubmitURL).'?';
foreach ($submit_data as $key => $value)
  {
  $URLsubmit.=$key.'='.$value.'&';
  }
$URLsubmit = substr($URLsubmit,0,strlen($URLsubmit)-1); // remove last '&'

Doğal veri URL dostu fırçalayın ve her A HREF sayfa linki ile sayfalandırma artırmak için sayaçları oluşturmak isteyeceksiniz.

echo '<A HREF="'.$URLsubmit.'">';

Umarım bu doğru yönde bir işaret olacaktır.

Bir oturum çerezi kurmak ve XSRF doğrulama kullanabilirsiniz sürece MEZUNLARI, $ _SESSION bunu kullanırken yolu kullanarak, büyük bir güvenlik riskidir.

correct me if I'm wrong. But one way of doing it would be to set your filter in a GET variable

Sonra bir bağımsız PHP çözüm ve javascript sonra biraz geliyor olabilir.