Статьи и инструкции: Использование сниппетов
Для чего нужны сниппеты?
Сниппеты позволяют интегрировать любой ваш PHP и HTML-код непосредственно в среду визуальной верстки для написания собственных решений (например, вывести список страниц универсального модуля).
Сниппет всегда воспринимается компилятором как PHP-код, поэтому для исполнения PHP-скриптов обязательно наличие PHP-тегов (в стандартной конфигурации включена поддержка коротких тегов <? и ?>), но как и в любом php-файле вы также можете использовать HTML-теги.
Пример простейшего сниппета для получения списка страниц и их ID:
<?
$items = $this->smartriver->page(['where' => ['confirm' => 1]]);
if($items['status'] == 'ok'){?>
<ul>
<?
foreach($items['response'] as $item){
?>
<li><?=$item['name'].' (ID '.$item['id'].')'?></li>
<?
}
?>
</ul>
<?
}
?>
Сниппеты бывают двух типов: произвольные и виджеты.
Произвольные сниппеты не взаимодействуют с окружающей средой визуальной верстки и всегда остаются в рамках заданных высоты и ширины (необходимо, когда контент должен быть статичным), виджеты же, наоборот, взаимодействуют со средой визуальной верстки и могут увеличиваться или уменьшаться по высоте, при этом толкая объекты (необходимо при построении списков и других подобных элементов).
Также в сниппеты можно передавать параметры (делается это через элемент визуальной верстки, перечисление параметров идет через запятую).
Получить эти параметры в сниппете можно через символ #. Все параметры лучше присваивать в начале кода, во избежание непредвиденных ситуаций.
Пример сниппета с параметрами:
<?
$param_1 = #param_1;$param_2 = #param_2;
$param_3 = #param_3;
print_r($param_1);print_r($param_2);
print_r($param_3);
?>
$param_1, $param_2, $param_3 - это переменные, которые вы будете использовать в своем PHP коде, #param_1, #param_2, #param_3 - это своего рода теги параметров, переданных через визуальную верстку, неважно как вы их назовете (но, рекомендуется аналогично php-переменным, чтобы не было путаницы), важен лишь порядок, т.е. #param_1 идет первым в визуальной верстке, #param_2 - вторым и т.д.
Для получения ID текущей страницы (раздела, новости, товара и т.д.) необходимо использовать свойство $this->id. Оно доступно для использования в любом сниппете. Например, чтобы получить данные текущей страницы, на которой размещен созданный Вами сниппет, достаточно вызвать метод
$this->smartriver->page(['where' => ['id' => $this->id]]);
Каждый сниппет является изолированной сущностью, поэтому для использования переменных из одного сниппета в другом, следует включать в логику объект $this->storage и помещать в него необходимые свойства, например:
$this->storage->param1 = 'test';
Также предусмотрено свойство $this->module, используемое для получения названия модуля, и свойство $this->element для получения текущего объекта.