Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于构建基本php搜索引擎的帮助_Php_Search_Kohana - Fatal编程技术网

关于构建基本php搜索引擎的帮助

关于构建基本php搜索引擎的帮助,php,search,kohana,Php,Search,Kohana,我到处找教程,但似乎找不到好的 具有分页、列标题排序和多重筛选功能的搜索页面(筛选器位于复选框中) 问题是: 有分页工作,有排序工作,但不能让他们一起工作。再加上让过滤器处理分页和排序的结果集 我想单独使用php和GET-form方法来实现这一点(javascript将在后面介绍,我想在此基础上应用渐进式增强) 我不知道如何使这三个功能(分页、排序和过滤)协同工作…我想要实现的 这是我的控制器代码 function index(){ $resultset = null;

我到处找教程,但似乎找不到好的

  • 具有分页、列标题排序和多重筛选功能的搜索页面(筛选器位于复选框中)
  • 问题是: 有分页工作,有排序工作,但不能让他们一起工作。再加上让过滤器处理分页和排序的结果集

    我想单独使用php和GET-form方法来实现这一点(javascript将在后面介绍,我想在此基础上应用渐进式增强)

    我不知道如何使这三个功能(分页、排序和过滤)协同工作…我想要实现的

    这是我的控制器代码

    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;
        }
    
    至于酒店图书馆的功能:

    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;
        }
    
    对于视图中的表:

    <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>
    
    现在看起来很混乱,但我想搜索引擎URL就是这样:)

    如果我错了,请纠正我。 但一种方法是在GET变量中设置过滤器

    然后,您可以在稍后提供一个独立的PHP解决方案和javascript。

    如果我错了,请纠正我。 但一种方法是在GET变量中设置过滤器

    然后,您可以在稍后提供一个独立的PHP解决方案和javascript

    我不知道如何使这三个功能(分页、排序和过滤)协同工作…我想要实现的

    GET提交和POST提交有点不同,因为您可以通过提交输入一次性传递所有变量

    因此,要通过GET submit正确传递相同的数据,您需要传递a HREF链接中的每个变量

    要构建此功能,请尝试以下操作:

    $URLsubmit=(TheSubmitURL).'?';
    foreach ($submit_data as $key => $value)
      {
      $URLsubmit.=$key.'='.$value.'&';
      }
    $URLsubmit = substr($URLsubmit,0,strlen($URLsubmit)-1); // remove last '&'
    
    当然,您会希望清除数据URL友好型,并创建计数器以增加每个A HREF页面链接的分页

    echo '<A HREF="'.$URLsubmit.'">';
    
    echo';
    
    希望这能为你指明正确的方向

    顺便说一句,除非您设置会话cookie并使用XSRF验证,否则使用$会话的方式会带来很大的安全风险

    我不知道如何使这三个功能(分页、排序和过滤)协同工作…我想要实现的

    GET提交和POST提交有点不同,因为您可以通过提交输入一次性传递所有变量

    因此,要通过GET submit正确传递相同的数据,您需要传递a HREF链接中的每个变量

    要构建此功能,请尝试以下操作:

    $URLsubmit=(TheSubmitURL).'?';
    foreach ($submit_data as $key => $value)
      {
      $URLsubmit.=$key.'='.$value.'&';
      }
    $URLsubmit = substr($URLsubmit,0,strlen($URLsubmit)-1); // remove last '&'
    
    当然,您会希望清除数据URL友好型,并创建计数器以增加每个A HREF页面链接的分页

    echo '<A HREF="'.$URLsubmit.'">';
    
    echo';
    
    希望这能为你指明正确的方向


    顺便说一句,除非您设置会话cookie并使用XSRF验证,否则使用$会话的方式会带来很大的安全风险

    当我对分页结果应用排序时,我无法在同一结果集上交替使用升序排序和降序排序…这是主要问题,我无法序列化结果集以将其扔给函数进行排序和筛选(Kohana ORM对象序列化存在一些问题)因此,我正在寻找一种解决方法当我对分页结果应用排序时,我不能在同一个结果集上交替使用升序排序和降序排序…这是主要问题,我无法序列化结果集以将其扔给函数进行排序和筛选(Kohana ORM对象序列化的一些问题)所以我在寻找一个解决办法