Ajax и php-шаблонизатор — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
 
'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''
 
'''Статья предоставлена партнером UMI.CMS [https://www.umi-cms.ru/find_webdevs/shiriev_artur_venerovich/ Шириевым Артуром]'''
 +
 
'''Актуально для версии 18 и php-шаблонизатора.'''
 
'''Актуально для версии 18 и php-шаблонизатора.'''
  
В документации не нашел, как подружить php-шаблонизатор и ajax.
+
Ниже приведен пример метода для ajax-подгрузки новостей.
 
 
Привожу пример метода для ajax-подгрузки новостей.
 
 
 
 
<source lang="php">
 
<source lang="php">
 
public function getGallery($parentId = 0, $limit = false, $is_ajax = 0) {
 
public function getGallery($parentId = 0, $limit = false, $is_ajax = 0) {
Строка 45: Строка 43:
  
 
В данном примере используется шаблон news/inc/gallery.
 
В данном примере используется шаблон news/inc/gallery.
Лучше не передавать его снаружи из-за соображений безопасности. Либо делать это с большой осторожностью.
+
Лучше не передавать его снаружи из соображений безопасности, либо делать это с большой осторожностью.
  
 
Пример вызова: http://localhost/news/getGallery/{page_id}/{page_number}/1/
 
Пример вызова: http://localhost/news/getGallery/{page_id}/{page_number}/1/

Текущая версия на 10:04, 13 июня 2018

Статья предоставлена партнером UMI.CMS Шириевым Артуром

Актуально для версии 18 и php-шаблонизатора.

Ниже приведен пример метода для 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. Т.е. данный метод можно также использовать, как обычный макрос.