Получение tv-параметра c помощью fenom

Здравствуйте!
Столкнулся с проблемой: в шаблоне документа синтаксис fenom не возвращает tv-параметр.
<p>[[*newsTestTv]]</p>
<p>{$_modx->resource.newsTestTv}</p>
В первом случае, стандартный синтаксис возвращает корректное значение параметра.
Во втором случае — возвращается «Array».
Пожалуйста, помогите советом.

P.s.: При вызове сниппетов никаких проблем подружить tv-параметры и феном не возникло, благодаря документации Василия.

UPD: Методом тыка было выяснено, что {$_modx->resource.tvName} возвращает массив, где первым элементом идет ключ — название tv-параметра, а вторым — его значение.
<p>[[*newsTestTv]]</p>
<p>{$_modx->resource.newsTestTv[1]}</p>
Два вызова, возвращающие одинаковый результат.
Денис Райх
21 августа 2015, 04:16
modx.pro
3
10 859
+1

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

Василий Наумкин
21 августа 2015, 09:42
+2
Поправил в версии 2.1.4-pl, можно обновляться и использовать ТВ как задумано:
{$_modx->resource.newsTestTv}
    Денис Райх
    24 августа 2015, 02:04
    0
    Василий, здравствуйте.
    Большое спасибо за Ваши компоненты!
    Обновил pdoTools до версии 2.1.7-pl.

    Возможно, имеет место баг в работе служебной переменной {$_pls}, которая, по документации, предназначена для вывода вложенных плейсхолдеров с cинтаксисом [[+tag.sub_tag]] — {$_pls['tag.subtag']} (успешно применить эту переменную не получилось ни разу).

    Прилагаю синтетический тест.
    Документ содержит следующий контент:
    {$_modx->runSnippet('myFenomTest')}
    
    <div class="pure-u-1">
        <p>ModxSmarty: Name - [[+pref.tag.sub_tag1]]; Surname - [[+pref.tag.sub_tag2]];</p>
        <p>Fenom: Name - {$_modx->getPlaceholder('pref.tag.sub_tag1')}; Surname - {$_modx->getPlaceholder('pref.tag.sub_tag2')};</p>
        <p>Fenom#2: Name - {$_pls['pref.tag.sub_tag1']}; Surname - {$_pls['pref.tag.sub_tag2']};</p>
    </div>
    Текст сниппета «myFenomTest»:
    <?php
    $modx->toPlaceholders(array(
      'tag' => array(
          'sub_tag1'   => 'John',
          'sub_tag2' => 'Doe')
    ),'pref');
    Результат:
    ModxSmarty: Name - John; Surname - Doe;
    
    Fenom_1: Name - John; Surname - Doe;
    
    Fenom_2: Name - ; Surname - ;
      Василий Наумкин
      24 августа 2015, 06:12
      1
      +2
      {$_pls} — это плейхолдеры, переданные в чанк. А ты выставляешь и пытаешься получать глобальные плейсхолдеры.

      <?php
      $pdo = $modx->getService('pdoTools');
      
      return $pdo->getChunk(
          '@INLINE
              <p>{$_pls.tag.sub_tag1} {$_pls.tag.sub_tag2}</p>
              <p>{$_pls["tag.sub_tag1"]} {$_pls["tag.sub_tag2"]}</p>
          ',
          array(
              'tag' => array(
                  'sub_tag1' => 'John',
                  'sub_tag2' => 'Doe',
              ),
              'tag.sub_tag1' => 'John',
              'tag.sub_tag2' => 'Doe',
          )
      );
        Денис Райх
        24 августа 2015, 06:30
        0
        Большое спасибо за объяснения, Василий!
        В Вашей документации этот момент показался мне неочевидным.
        Соответственно, при использовании Fenom'a, предусмотрено три инструмента для работы с плейсхолдерами:
        {$_modx->getPlaceholder('tag_name')}
        — для получения глобальных,
        {$_pls.tag.subtag}
        — для работы с вложенными плейсхолдерами, передаваемыми в чанк,
        и
        {$tag}
        — для работы с переменными, передаваемыми сниппетом в чанк-обёртку результатов,
        если я верно понял.
          Василий Наумкин
          24 августа 2015, 06:34
          +1
          Я не знаю, что тут может быть непонятного:
          Fenom использует точку для доступа к значению массива, а MODX обычно выствляет так плейсхолдеры из массивов. Соотвественно, для тегов [[+tag.sub_tag]] аналогов в Fenom не предусмотрено.

          Поэтому для подобных плейсхолдеров вам необходимо использовать вторую служебную переменную — {$_pls}:

          {$_pls['tag.subtag']}
          Больше ни для чего {$_pls} не нужен.
    Александр
    06 августа 2023, 13:43
    0
    мне кстати сейчас в modx 3, поставленной сегодня выдает Array в ответ на {'metaTitle' | resource}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    8