2016-10-21 1 views
1

Это файл контроллера, в котором все результаты поиска поступают из цикла foreach, я пытался разбивать на страницы, но могу " t выяснить, как это сделать.Я пытаюсь разбивать страницы на результаты поиска и отображать их в файле заметок шаблона, используя CakePHP 3.x

<?php 
class SerController extends AppController 
{ 
    public function initialize() 
    { 
     parent::initialize(); 
     $this->loadComponent('Paginator'); 
    } 

    public function index() 
    { 
     $check_string=$this->request->data('check'); 
     $check_break=explode(" ",$check_string); 
     $s1=TableRegistry::get('ser_tab'); 
     foreach($check_break as $check) 
     { 
      $s11=$s1->find('all')->where(['OR' =>['text LIKE' => '%'.$check.'%','name LIKE' => '%'.$check.'%']]); 
      $this->set(array('data' => $s11)); 
     }     
     $this->render('index'); 
    } 
} 
+0

Вы можете использовать MySQL ** полнотекстового поиска ** Http: //www.hackingwithphp .com/9/3/18/advanced-text-search-using-full-text-indexes – tarikul05

+0

С разбиением на страницы выглядят http://stackoverflow.com/a/6184178/3278789 – tarikul05

ответ

0

Ваш запрос займет слишком много времени. Вы можете сделать это просто. Обновление index() функции, как, как показано ниже

примера [Когда данные из URL]

public function index($data='Default text here'){ /*When get Data from the URL*/ 
    $data = explode(' ', $data); 
    $conditions = array(); /*All OR conditions will store here*/ 

    foreach ($data as $key => $value) { 
     $conditions['or'][] = array('text LIKE' => "%$value%"); 
     $conditions['or'][] = array('name LIKE' => "%$value%"); 
    } 

    $this->paginate = [ 
     'limit' => 25, #Set the limit of post 
     'conditions'=>[ 
      $conditions /*OR conditions array*/ 
     ] 
    ]; 

    $data = $this->paginate(); 
    var_dump($conditions,$data);   /*Debug OR Condition array and Query data*/ 
    $this->set(compact('data'));   /*Set the Posts to a variable*/ 
} 

Пример [Когда данные из POST]

public function index(){ 
    if ($this->request->is('post')) { 
     $data = $this->request->data('check'); 
     # YOUR CODE HERE 
    } 
} 

CakePHP 3.х нумерацией страниц документации is HERE

+0

Или просто используйте правильный PRG pat tered [Search] (https://github.com/FriendsOfCake/search) для него;) Правильно разрешено и без кода в области управления. – mark

+0

можно добавить разбивку на страницы без модели, и просто с помощью контроллера и вида –

+0

Да! Вы можете напрямую использовать компоненты Paginator. Как '$ this-> Paginator-> paginate (YOUR_QUERY_OBJECT, CONFIGS)' Вот подробности (http://book.cakephp.org/3.0/en/controllers/components/pagination.html#using-the-paginator-directly) @HarjeevSingh –

1

Я пытаюсь разделить значения результатов набора данных, до сих пор я написал весь код в контроллере, и он не бросает никаких ошибок, мой вопрос в том, как получить значения в VIEW.

DualController.php

<?php 


public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('Paginator'); 
} 

общественная функция индекса() {

$r = TableRegistry::get('d11'); 
    $results = $r->find('all'); 
    $this->set(array('data11' => $results));  
    $this->Paginator->paginate($results,$settings); 
    $this->set('index'); 

}

Смежные вопросы