Ajax и php-шаблонизатор
Материал из Umicms
Версия от 10:00, 13 июня 2018; Whoa (обсуждение | вклад)
Статья предоставлена партнером UMI.CMS Шириевым Артуром Актуально для версии 18 и php-шаблонизатора.
В документации не нашел, как подружить php-шаблонизатор и ajax.
Привожу пример метода для ajax-подгрузки новостей.
public function getGallery($parentId = 0, $limit = false, $is_ajax = 0) {
$module = $this->module ? $this->module : $this;
$limit = ($limit) ? $limit : $module->per_page;
$currentPage = (int) getRequest('p');
$offset = $currentPage * $limit;
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->where('hierarchy')->page($parentId)->level(2);
$pages->order('ord');
$pages->limit($offset, $limit);
$result = array();
$total = $pages->length();
$result['nodes:page'] = array();
foreach($pages->result as $page) {
$result['nodes:page'][] = $page;
}
$result['total'] = $total;
$result['per_page'] = $limit;
$result['stop'] = (int) (($offset + count($result['nodes:page'])) == $total);
$result['category'] = $parentId;
// кусок, отвечающий за рендер
if ($is_ajax) {
$currentTemplater = cmsController::getInstance()->getCurrentTemplater();
$templatesSource = $currentTemplater->getTemplatesSource();
$templater = new umiTemplaterPHP($templatesSource);
$buffer = OutputBuffer::current('HTTPOutputBuffer');
$buffer->push($templater->render($result, 'news/inc/gallery'));
$buffer->end();
}
return $result;
}
В данном примере используется шаблон news/inc/gallery. Лучше не передавать его снаружи из-за соображений безопасности. Либо делать это с большой осторожностью.
Пример вызова: http://localhost/news/getGallery/{page_id}/{page_number}/1/
Если в параметре $is_ajax истинное значение, то рендерится html. Т.е. данный метод можно также использовать, как обычный макрос.