Clone wiki

CMS / Сниппеты

Сниппеты - это части php кода, который можно вызывать из шаблона. Создав сниппет и вызвав его на странице, будет выведен не текст сниппета а результат его выполнения, как PHP кода. Например, если вы создадите сниппет содержащий такой код

echo 'Hello World';

то на месте его вызова отобразится лишь "Hello World".

При помощи сниппетов можно создавать как небольшие расширения базовых возможностей, такие как вывод последних сообщений форума или комментариев, так и довольно крупные приложения вроде рейтингов и голосований. И это все далеко не предел. В сниппетах Atom-M CMS вас, пожалуй, ограничивает только ваша фантазия.

Стоит заметить, что сниппеты надо называть только латинскими буквами и цифрами. Без других символов вроде знаков препинания и кирилицы.

При вызове сниппетов таким образом {[TeSt]} происходит кэширование на один час. Это сделано с целью уменьшения нагрузки, ведь на одной странице может быть множество сниппетов. Для вызова сниппета в не кэшируемой форме надо добавить восклицательный знак перед названием спиппета при выводе в шаблоне, например {[!TeSt]}.

В сниппетах нельзя использовать <?php в начале и ?> в конце.

Пример

Допустим, у нас есть сниппет с именем test.

Его содержимое

?>
<ul>
<li>1 point</li>
<li>2 point</li>
<li>3 point</li>
</ul>
<?php

И так же, у нас есть шаблон

<html>
  <head>
    <title>Test snipet</title>
  </head>
  <body>
    {[test]}
  </body>
</html>

Как видите, мы сразу вызвали в шаблоне наш сниппет командой {[test]}. Если такую страничку на AtomM CMS открыть в браузере то она примет следующий вид:

<html>
<head>
<title>Test snipet</title>
</head>
<body>
<ul>
<li>1 point</li>
<li>2 point</li>
<li>3 point</li>
</ul>
</body>
</html>

В шаблоне произошла подмена кода вызова сниппета на его содержимое. Но это была вставка статического содержимого, мы как бы вставили обычный HTML код. Для вызова динамического содержимого (PHP), сниппет должен содержать только сам код. Не должно даже быть начального и конечного тегов PHP.

Пример

function light() {
   $a = 3;
   return $a;
}

Также можно это комбинировать. В следующем примере задаётся переменная в php коде, за ним следует html код, в котором с помощью перебирания массива выводится заданное количество смайликов:

$smiles = 5;
?>
Много смайлов:
<?php
while ($smiles > 0) {
  echo ' :) ';
  $smiles = $smiles - 1;
}
?>

<?php

Все очень просто.

Начиная с версии Atom-M 2.3.4 появилась возможность передавать дополнительные параметры в сниппет, более того, параметры могут передавать переменные. Например, если вызвать сниппет

{[!имя_сниппета?id={{ atm_user.id }}&name={{ atm_user.name }}]}

то из кода сниппета можно будет обращаться к массиву $params, содержащему соответствующие id и имя пользователя.

echo 'Ваш ID: ' . $params['id'];
echo '<br>Ваше имя: ' . $params['name'];

Updated