Ajax и php-шаблонизатор — различия между версиями
Материал из Umicms
Lesnik512 (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов '''Актуально для версии 18 и php-шаблонизатора.''' В доку…») |
Whoa (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | + | '''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]''' | |
− | |||
'''Актуально для версии 18 и php-шаблонизатора.''' | '''Актуально для версии 18 и php-шаблонизатора.''' | ||
Строка 52: | Строка 51: | ||
Если в параметре $is_ajax истинное значение, то рендерится html. | Если в параметре $is_ajax истинное значение, то рендерится html. | ||
Т.е. данный метод можно также использовать, как обычный макрос. | Т.е. данный метод можно также использовать, как обычный макрос. | ||
+ | |||
+ | [[category:Написание кастомных макросов]] |
Версия 10:00, 13 июня 2018
Статья предоставлена партнером 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. Т.е. данный метод можно также использовать, как обычный макрос.