pdoTools->getChunk не парсит вложенный контент

Добрый день.

modx 2.6.5
pdoTools 2.12.3-pl
php 7.3

Написал свой плагин для поиска.
Всё нормально работает, но вот ресурсы, у которых class_key === modWebLink и в content есть теги fenom (например у меня там просто ссылки на внутренние ресурсы {`id` | url}), он их не обрабатывает и выплёвывает необработанными тегами.

пытался сделать так
/* И getChunks и parseChunk */
$obj->content = $pdoTools->getChunk('@INLINE {$c}', ['c'=>$obj->content]);
Обработка тегов в ресурсах включена, конечно.

Код:
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}

$alias = $modx->context->getOption('request_param_alias', 'q');
$searchQueryAlias = 's';

if (!array_key_exists($alias, $_REQUEST) || $_REQUEST[$alias] !== 'search' || !array_key_exists($searchQueryAlias, $_REQUEST)) {return false;}

$searchQuery = trim($_REQUEST[$searchQueryAlias]);

if (!isset($modx->resource)) {
    $modx->resource = $modx->newObject('modResource');
    $modx->resource->pagetitle = 'Поиск по сайту';
}

$fqn = $modx->getOption('pdoTools.class', null, 'pdotools.pdotools', true);
if ($pdoClass = $modx->loadClass($fqn, '', false, true)) {
    $pdoTools = new $pdoClass($modx, $scriptProperties);
}
elseif ($pdoClass = $modx->loadClass($fqn, MODX_CORE_PATH . 'components/pdotools/model/', false, true)) {
    $pdoTools = new $pdoClass($modx, $scriptProperties);
}
else {
    $modx->log(modX::LOG_LEVEL_ERROR, 'Could not load pdoTools from "MODX_CORE_PATH/components/pdotools/model/".');
    return false;
}
$pdoTools->addTime('pdoTools loaded');

$out = '';

$stmt = $modx->newQuery('modResource');

$stmt->limit(15);

$preparedSQ = str_replace('  ', ' ', trim($searchQuery));
$preparedSQ = preg_replace('#[^\w]#u', ' ', $preparedSQ);
$preparedSQ = str_replace('  ', ' ', trim($preparedSQ));
$preparedSQPieces = explode(' ', $preparedSQ);

$stmt->where(['id:!=' => 1]);

$stmt->andCondition(['pagetitle:LIKE' => "%$preparedSQ%"]);
$stmt->orCondition(['longtitle:LIKE' => "%$preparedSQ%"]);

if (count($preparedSQPieces) > 1) {
    foreach($preparedSQPieces as $idx => $piece) {
        $stmt->orCondition(['pagetitle:LIKE' => "%$piece%"]);
        $stmt->orCondition(['longtitle:LIKE' => "%$piece%"]);
    }
}

$out = '';

$count = $modx->getCount('modResource', $stmt);
if (intval($count) > 0) {
    $objs = $modx->getIterator('modResource', $stmt);
    
    foreach($objs as $obj) {
        $obj->content = $pdoTools->getChunk('@INLINE {$c}', ['c' => $obj->content]);
        $out .= $pdoTools->getChunk('@FILE chunks/particles/search-list.item.tpl', $obj->toArray());
    }
} else {
    $out .= '<div class="col-12">По вашему запросу «'.$searchQuery.'», ничего не найдено, уточните запрос.</div>';
}

$out = $pdoTools->getChunk('@FILE pages/search.tpl', [
    'title' => 'Результат по запросу «'.$searchQuery.'»',
    'items' => $out
]);

die($out);
Denis Bushaev
15 января 2020, 16:08
modx.pro
1
692
0

Комментарии: 11

Denis Bushaev
16 января 2020, 15:08
0
Пичально, что никто так и не помог.
Обновил modx до 2.7.2 — та же фигня.
Еще заметил такую же шнягу в pdoSitemap. Тут всё еще проще. Просто вызов pdoSitemap и на тех же ресурсах тэг
<loc>
с нераспаршенным тегом
{`id` | url}.
Осмелюсь попросить помощи @Василий Наумкин
    Василий Наумкин
    16 января 2020, 15:12
    0
    Как минимум, кавычки не верные — у текста в Fenom должны быть обычные, а не обратные как у параметров родного парсера.
    {'10' | url}
    Да и не нужны кавычки для чисел
    {10 | url}
    А вообще, полагаю, в чанке должна быть переменная
    {$id | url}
      Denis Bushaev
      16 января 2020, 15:14
      0
      Да не, это как пример было. есс-но там стоит обычная цифра
        Denis Bushaev
        16 января 2020, 15:16
        0
        В ресурсе стоит content допустим:
        {13 | url}
        В чанке просто выводится
        <div>{$content}</div>
          Василий Наумкин
          16 января 2020, 15:18
          0
          Ну, тогда дело в том, что Fenom не рекурсивный и обрабатывает страницу ровно один раз.

          За этот раз он выводит твой контент и всё, он так и остаётся.
            Denis Bushaev
            16 января 2020, 15:26
            0
            А почему тогда не срабатывает «костыль» такого плана?
            $obj->content = $pdoTools->getChunk('@INLINE {$c}', ['c' => $obj->content]);
              Василий Наумкин
              16 января 2020, 15:31
              0
              Наверное потому, что {$c} парсится до попадания в чанк. Попробуй [[+c]] или {{+c}}.
                Denis Bushaev
                16 января 2020, 15:39
                0
                Так этот код в сниппете.
                Но я всё равно попробовал. Не работает(
    Сергей Шлоков
    16 января 2020, 18:01
    +2
    Только феном можно распарсить так
    $obj->content = $pdoTools->getParser()->fenom('{$c}', ['c' => $obj->content]);
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      11