Павел Романов

Павел Романов

Был в сети 30 июля 2026, 15:23
Заказы принимаю
Да, только в Revo их лучше прописывать не так:
[[*id:is=`15`:then=`[[$chunk]]`]]
а так:
[[$[[*id:is=`15`:then=`chunk`]]]]
Это из-за того, что парсер сначала выполняет все чанки на странице, а потом только выводит нужные в соответствии с условиями.
Во втором же варианте будут обработаны только текстовые строки и пустые [[$]], если условие не выполнено.

Но если используете Fenom, то можно не извращаться, поскольку там парсер работает по-другому:
{if $_modx->resource.id == 15}{$_modx->getChunk('chunk')}{/if}
Ну вообще-то конечно сниппет — самое оптимальное для таких вложенностей.
Но если стоит pdoTools и выводите соответствующими инструментами, то попробуйте Fenom использовать:
{var $av = $_pls['tv.aviable']}
{if $av == 0}
	Нет в наличии
{else}
	{if $av > 1 && < 10}
		<i class="fa fa-circle"></i>
	{else}
		{if $av >= 10 && < 30}
			<i class="fa fa-circle"></i> <i class="fa fa-circle"></i>
		{else}
			{if $av >= 30}
				<i class="fa fa-circle"></i> <i class="fa fa-circle"></i> <i class="fa fa-circle"></i>
			{/if}
		{/if}
	{/if}
{/if}
Вроде, нигде не ошибся ))
Попробуйте так:

<?php
$tip_poddonov = $hook->getValue('tip_poddonov');
$maxweight = $hook->getValue('maxweight');
$q = count($tip_poddonov);
$count = 0;
while($count < $q){
    $string .= '<b>Тип поддонов для грузов:</b> '.$tip_poddonov[$count].'<br /><b>Макс. вес груза на палете, кг:</b> '.$maxweight[$count].'<br /><br />';
    $count++;
}
$modx->setPlaceholder('all', $string);
return true;
Ну и славненько ).
Вообще, IMHO, если вывод чуть хитрее стандартного (несколько вкладок у формы, зависимые TV, запросы, подобные Вашему), лучше всегда конфигурации использовать — там, кстати, и возможностей больше.
Я сейчас проверил — работает. Сделайте конфигурацию — таким образом Вы избегнете ошибок.
Например, эта строка, как минимум, должна быть такой:
{"header":"Альбом", "sortable":"false", "dataIndex":"albumname", "renderer": "this.renderChunk", "renderchunktpl":"[[Snippet? &id=`[[+album]]`]]"}
Да, сорри, это я не понял, что речь про админку.

Прежде чем писать свой, попробуйте сделать это MIGX-поле
через конфигурацию.
Только для вывода в таблице назовите поле не album, а как-нибудь иначе, например, albumname.
У него в качестве ререндера выберите thisRenderChunk и в поле renderChunk template пропишите:
[[Snippet? &id=`[[+album]]`]]
Можно сделать сниппет по мотивам этого:

<?php
if(empty($id)) return '';
$table = 'modx_gallery_albums';
$sql = "SELECT `name` FROM `$table` WHERE `id` = $id";
$query = new xPDOCriteria($modx, $sql);
if ($query->prepare() && $query->stmt->execute()){
    $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($res as $row){
        $out = $row['name'];
    }
} else {
    $out = "Ошибка";
}
return $out;

И вызывать его так:
[[Snippet? &id=`[[+album]]`]]

А можно поставить Rowboat и вызывать так:
[[Rowboat?
   &table=`modx_gallery_albums`
   &tpl=`album-name`
   &where=`{"id":"[[+album]]"}`
]]

Чанк «album-name»:
[[+name]]
У Вас дата в базе хранится в виде 2016-07-01 03:00:00, а Вы пытаетесь фильтровать по дате в Unix-формате.
Если в лоб, то решение следующее:
1. Сделать еще одно поле timeUnix типа текст.

2. Сделать плагин на событие OnDocFormSave, который будет брать дату из поля timeEvent, переводить ее в нужный формат и записывать в поле TV timeUnix:
<?php
$res = $modx->getObject('modResource', $id);
$date = $res->getTVValue('timeEvent');
if(empty($date)) return '';
$time = strtotime($date);
$res->setTVValue('timeUnix', $time);

3. Выборку в pdoResources cделать уже через этот новый TV:
&where=`{"timeUnix:>=,<=:AND":[1467331200,1498867200]}`
Если у Вас в TV subcategory у товара в базу пишется ||***||, то будет.

У одного товара это ||63||, у другого может быть ||636||,||363|| (если параметр множественный и соответствующим образом настроен), у третьего ||6363|| и тут нет никаких пересечений — это разные строки.
Если прописывать в tvFilters %||[[*id]]||%, то все нормально будет выводиться.
На странице с ID=636 мы же ищем товар, у которого в TV есть именно такая подстрока: ||636||. С какой стати нам выведется товар с ||63||?

Другое дело, что может быть путаница из-за этого || — потому я всегда использую #.
Это понятно. Я сам обычно использую ## или ::
А что у Вас не работает-то? Если Вы используете || в качестве обёртки, то это должно фунциклировать:
&tvFilters=`subcategory==%||[[*id]]||%`

Только вызов у Вас какой-то странный. Сделайте так:
[[pdoResources?
        &parents=`53`
        &includeTVs=`image,price,price-wsale,subcategory`
        &tpl=`product-item`
        &templates=`4`
        &tvFilters=`subcategory==%||[[*id]]||%`
        &tvFiltersOrDelimiter=`:`
]]