UMI.CMS вызов кастомных макросов

В данной статье я буду рассказывать про то, как вызывать кастомные макросы UMI.CMS.

Давайте сначала определимся, для чего нужны кастомные макросы(?)

Иногда бывает такое, что стандартных макросов UMI.CMS бывает не достаточно, ну или просто не хватает чего-либо, вот тут вам и понадобятся кастомные макросы.

Какие есть стандартные макросы в UMI.CMS

Стандартных макросов UMI.CMS очень много, с ними вы можете подробно ознакомиться в документации разработчика, рассматривать я их не буду. Ну может быть немного позже, когда начну готовить цикл статей по созданию своего шаблона для UMI.CMS.

Но все эти макросы выходят из набора стандартных модулей UMI.CMS, таких например как каталог или поиск

Как вызвать кастомный макрос в UMI.CMS (?)

Перед тем, как вызвать кастомный макрос UMI.CMS нужно его написать написать 😉

Написание кастомного макроса на UMI.CMS

Кастомный макрос в UMI.CMS пишется в файле __custom.php своего модуля. Например: чтобы написать кастомный макрос для модуля каталог, вам нужно перейти в папку classes/modules/catalog/, если вам нужен кастомный макрос для модуля поиск, то соответственно идете в папку classes/modules/search/.

Если вам нужен просто кастомный макрос, как например в статье создание кастомного макроса для редиректа, то вам нужно работать с файлом custom.php в папке /classes/modules/.

Далее. Для того, чтобы кастомный макрос написаный для модуля работал для всех типов пользователей, а не только для супервайзера, нужно обязательно в папке модуля создать файл permissions.custom.php и в данный файл добавить:

<?php
$permissions = Array('view' => Array('metod','metod1','metod3'));
?>

metod, metod2, metod3 – это ваши кастомные методы, 'view' – тут должен быть указан индекс группы, доступ к которой разрешен для пользователя Гость, допустим для модуля Новости это группа view, это можно определить по настройкам пользователя Гость и фалу i18n.php, в котором есть такие строки:

'perms-news-view' => 'Просмотр новостей',
'perms-news-lists' => 'Управление новостями',
'perms-news-publish' => 'Возможность публикации'

Давайте напишем небольшой макрос, который для модуля emarket, который проверяет, если товар в корзине и получает его количество. В свое время я нашел этот макрос очень нужным в моих разработках.

Нужно открыть файл __custom.php и папке classes/modules/emarket/. После слов //TODO: Write here your own macroses пишем:

/* Проврка кол-ва товаров в корзине */
public function is_cart($id){
    $ini = cmsController::getInstance()->getModule("emarket");
    $page = (int) $id;
    static $pages_arr;
    if( is_null($pages_arr) ) {
        // текущая корзина покупателя
        $order_object = $ini->getBasketOrder();
        $order = order::get($order_object->id);

        // Список элементов заказа
        $orderItems = $order->getItems();

        $i = 0;
        foreach($orderItems as $orderItem) {
            $i++;
            // $page_id - id товара в корзине
            $page_id = $orderItem->getItemElement()->getId();
            $pages_arr[$page_id] = $page_id . "/" . $orderItem->getAmount();
            //$pages_arr[$i][] = "$page_id";
        }

        // если товаров нет, то ставим пустой массив
        if(is_null($pages_arr)) $pages_arr = array();

        if(in_array($page, $pages_arr)){
            $obrezl = strstr ($pages_arr[$page], "/");
            $udalil = str_replace ("/", "", $obrezl);

            return $udalil;
        }
    } else {
        if(in_array($page, $pages_arr)){
            $obrezl = strstr ($pages_arr[$page], "/");
            $udalil = str_replace ("/", "", $obrezl);
            return $udalil;
        }
    }
}

Не забываем предоставить доступ к макросу всем пользователям:

<?php
$permissions = array('purchasing' => array(
    'is_cart'
));
?>

На а теперь вызываем кастомный макрос на страницах сайта. Для этого в том месте, где вы хотите, чтобы показывалось кол-вл данного товара в корзине, просто пишете:

<div>В корзине: %emarket is_cart(%id%)% единиц товара</div>

На этом все 😉

Удачных разработок!
 
[poll id="7"]