Правильное оформление условия в шаблоне
Добрый день! Есть такая небольшая проблема, не могу правильно внедрить в условие шаблонизатора сниппет свой.
Код сниппета такой:
В чанке используя все возможности шаблонизатора пытаюсь выстроить это дело таким образом:
Код сниппета такой:
<?php
$q = $modx->newQuery('msProductLink', array('link' => 1, 'master' => $parent));
$q->select('slave');
$resources = array();
if ($q->prepare() && $q->stmt->execute()) {
$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
return count($ids);
Называется он у меня SlaveGoods.В чанке используя все возможности шаблонизатора пытаюсь выстроить это дело таким образом:
[[[[!SlaveGoods &parent=[[*id]]]] :is=`0`:then=`Ничего нет!`:else=`Если условие не выполняется и записи есть`]]
В результате это не работает все. Такой вариант вообще возможен или нет? Может через плейсхолдер свой включить это в условие? Хотя начальник мой говорит, что через плейсхолдеры свои не будет работать тоже. Как решить эту проблему? Комментарии: 17
...
return count($ids) ? $modx->returnChunk('yesChunk') : $modx->returnChunk('noChunk');
Иными словами — выносите логику в сниппет.
может не returnChunk, а getChunk? Общий смысл понял, но пока не получается, по той причине, что ругается на конструкцию, которую вы написали мне.
Переписал по-другому немного, в итоге просто ничего не выводит из этих чанков:
if (count($ids) > 0)
{
return $modx->getChunk('simular_goods');
}
else
{
return $modx->getChunk('no_simular_goods');
}
Ну да, getChunk конечно же…
что-то должно выводится в любом случае, где то ошибка скрывается =)
Отлаживайте сниппет.
что-то должно выводится в любом случае, где то ошибка скрывается =)
Отлаживайте сниппет.
Сниппет-то сам рабочий, когда пишу таким образом, выводит надпись и число записей, а когда загружаю чанки, то никакой реакции, хотя там hmtl-код есть.
<?php
$q = $modx->newQuery('msProductLink', array('link' => 1, 'master' => $parent));
$q->select('slave');
$resources = array();
if ($q->prepare() && $q->stmt->execute())
{
$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
echo "<b>Сниппет SlaveGoods работает!</b>";
return count($ids);
Сделал тестовый сниппет PrintChunk).
там одна строка.
И не работает. Как обращаться к чанкам правильно?
там одна строка.
return $modx->getChunk('no_simular_goods');
И не работает. Как обращаться к чанкам правильно?
Я даже не знаю… каких нибудь пробелов или служебных символов в именах чанков нет случайно?.. как бы должно работать
Переписал немного по-другому:
<?php
echo "Сниппет PrintChunk работает!";
$output = $modx->getChunk($chank);
return $output;
Создал такой параметр $chank и вызываю потом следующим образом:[[!PrintChunk? &chank=`tell_my`]]
И ничего не выводит. Так как же вывести чанк из сниппета? Документация показывает, как будто я все правильно пишу, хотя на деле не работает это все… Не знаю даже что делать-то.
Пишет только Сниппет PrintChunk работает! Смотрел документацию тут: ссылка
А вообще такая конструкция
Обычно пишут так (сниппет используется в качестве фильтра):
[[[[!SlaveGoods &parent=[[*id]]]] :is=`0`:then=`Ничего нет!`:else=`Если условие не выполняется и записи есть`]]
должна работать?Обычно пишут так (сниппет используется в качестве фильтра):
[[*id:SlaveGoods:is=`0`:then=`Ничего нет!`:else=`Если условие не выполняется и записи есть`]]
Кроме того, я согласен с Алексеем, нужно вынести все в сниппет и вызывать просто сниппет. Фильтры работают медленнее. И еще хочу заметить, что в сниппетах не должно быть никаких echo и print.Так как же вывести чанк из сниппета?Ты так много говоришь про чанки, а где они? Покажи хотя бы чанк tell_my.
В чанке tell_my записанно следующее:
Написал в сниппете PrintChunk вывод echo чтобы проверить, что сниппет вообще работает. Не знаю почему такая простая конструкция не выводит чанк?
<div id="modal_form">
<div id="feedbackFormWrap">
<form id="id_form" method="post" action="" class="delive-form">
<div class="box">
<h2>Заказать обратный звонок</h2>
<h3>Отправитель</h3>
<div class="block">
<span class="cl" style:"padding-left:15px;">Имя</span>
<input type="text" id="name" name="name" size="25" maxlength="50" value="[[!+fi.name]]" /><br />
</div>
<div class="block">
<span class="cl" style:"padding-left:15px;">Ваш телефон</span>
<input type="text" id="email" name="email" size="25" maxlength="50" value="[[!+fi.email]]" /><br />
</div>
</div>
<input name="submit" class="next-step" type="submit" id="submit" value="Отправить">
<p style="margin-top:15px;">[[!+fi.validation_error_message]][[!+fi.error.attibute_name]]
</p>
</form>
</div>
</div>
<div id="overlay"></div>
Форма, которая не выводится. Написал в сниппете PrintChunk вывод echo чтобы проверить, что сниппет вообще работает. Не знаю почему такая простая конструкция не выводит чанк?
<?php
$output = $modx->getChunk($chank);
return $output;
Сниппет вызываю потом таким образом:[[!PrintChunk? &chank=`tell_my`]]
Пользуйся pdoTools для вывода чанков.
// Подключаем pdoTools для работы с инлайновыми чанками
$pdo = $modx->getService('pdoTools');
$tpl = $modx->getOption('tpl', $scriptProperties, '@INLINE array(\'id\'=>\'[[+id]]\', \'date\'=>\'[[+date]]\', \'time\'=>\'[[+time]]\'); '); // шаблон вывода
$return='';
$return .= $pdo->getChunk($tpl, array('id'=>'1', 'date'=>'2', 'time'=>'4') );
return $return;
Сделал как вы написали, у меня в результате не чанк выводится, а данные массива таким образом:
array('id'=>'1', 'date'=>'2', 'time'=>'4');
Чтобы это могло значит? Ведь, вроде, по идее должен грузиться сам чанк с именем tpl…
Когда нет шаблона, тогда и выводится array(...).
Этот код правильный —
Этот код правильный —
[[!PrintChunk? &chank=`tell_my`]]
Скорее всего имя чанка указано неправильно. Просто открой чанк, скопируй его название и вставь его в вызов сниппета.
Задачу решил таким образом:
$pdo = $modx->getService('pdoTools');
return $pdo->getChunk('tpl', array('id'=>'1', 'date'=>'2', 'time'=>'4'));
Ну хоть решил) Вообще параметр `tpl` должен был указываться в вызове сниппета, в нём должно быть имя чанка… а выводил данные т.н. массива, потому что скорее всего вы не указали параметр `tpl` и пришлось брать значение по-умолчанию… а по-умолчанию у нас инлайн чанк — "'@INLINE array(\'id\'=>\'[[+id]]\', \'date\'=>\'[[+date]]\', \'time\'=>\'[[+time]]\'); '"
return $pdo->getChunk('tpl', array('id'=>'1', 'date'=>'2', 'time'=>'4'));
В данном случае вызывается чанк с именем tpl, а как я понимаю, такого чанка нет. Вот и получается array().
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.