У меня есть ряд функций в моей логике контроллера, и для каждого из них у меня есть логика, которая извлекает данные для «признанного» набора единиц. Эти единицы находятся на нескольких страницах. Как я могу сделать эту часть логики доступной для всех 4 взглядов, которые в ней нуждаются?В моем контроллере cakephp я продолжаю повторять логику в каждой функции для кода вида
Для справки, здесь является частью моей логики контроллера:
public function index() {
$this->set('title', 'All accommodations available in and near Gulf Shores, AL');
$this->Unit->Behaviors->attach('Containable');
$this->Unit->contain(
array(
'User'=>array(
'id'),
'Location',
'Complex'=>array('location_id'),
'Image'=>array(
'logo','img1'
)
)
);
$c=$this->Unit->find('all',
array(
'limit'=>3,
'conditions'=>array(
'active'=>1,
'featured'=>1
)
)
);
$this->set('featured', $c);
$this->paginate['Unit']=array(
'limit'=>9,
'order' => 'RAND()',
'contain'=>array(
'User'=>array('email'),
'Complex'=>array('location_id','complex_website'),
'Location',
'Image'
),
'conditions'=>array(
'Unit.active'=>1)
);
$data = $this->paginate('Unit');
$this->set('allaccommodations', $data);
}
public function houses() {
$this->set('title', 'Home rentals available in Gulf Shores');
$this->Unit->Behaviors->attach('Containable');
$this->Unit->contain(
array(
'User'=>array(
'id'),
'Location',
'Complex'=>array('location_id'),
'Image'=>array(
'logo','img1'
)
)
);
$c=$this->Unit->find('all',
array(
'limit'=>3,
'conditions'=>array(
'active'=>1,
'featured'=>1
)
)
);
$this->set('featured', $c);
$this->paginate['Unit']=array(
'limit'=>9,
'order' => 'RAND()',
'contain'=>array(
'User'=>array('email'),
'Location',
'Image'
),
'conditions'=>array(
'Unit.type'=>array('house', 'rentalco'),
'Unit.active'=>1)
);
$data = $this->paginate('Unit');
$this->set('allhouses', $data);
}
...
У меня есть две другие функции, устанавливающие «признакам» переменную, которая доступна для просмотра. Я уверен, что есть намного лучший/более эффективный способ сделать это?
Это работало как шарм! Я также немного поиграл с добавлением методов paginate, которые у меня были в модели, но a) Я читаю, что разбиение на страницы в модели плохое) 2) Я не мог заставить ее работать в любом случае 3) она зависает что «тип» модуля (я думал, что могу передать переменную с именем $ type. Итак, на данный момент я оставляю весь код в своем контроллере, даже если подавляющее большинство бит повторяется. – huzzah
Да, вы можете переместить запрос в модель, чтобы уменьшить размер контроллера. '$ this-> Paginator-> settings = $ this-> Unit-> getQuery();', затем получить результаты, $ r = $ this- > Paginator-> paginate ($ this-> Unit); ' – Wylie
Является ли это для постраничных результатов или помощником Paginator для отображения ссылок на разбитые на страницы результаты? И этот код входит в контроллер? Плюс, когда я пытался переместить страницу код в модель Я не был уверен, что у меня правильный синтаксис. – huzzah