Почему не срабатывает функция PHP в вызове PDO

Здравствуйте,
Пытаюсь вырезать из строки «49 000 руб / 19 000 грн / 265 000 тенге» 49000, делаю с помощью:
{str_replace(" ", "", strstr($price, ' руб', true))}
, где
$price
— tv параметр. В шаблоне страниц, и других чанках, которые вызываются MIGX, все работает, а при выполнении функции в чанке pdoResources выводится пустое поле, в чем может быть проблема? в чайке вызываю так:
{str_replace(" ", "", strstr($priceStore, ' руб', true))}
— получаю пустоту (даже пробела лишнего не появляется)
Если вызвать
{$priceStore}
выводит: «49 000 руб / 19 000 грн / 265 000 тенге»
pdoResources вызываю так:
[[!pdoResources?
    &parents=`7`
    &limit=`10`
    &tpl=`shortStore`
    &useFenom=`1`
    &includeTVs=`photoStore, priceStore`
    ]]
Что я делаю не правильно?
Вячеслав Варов
26 марта 2017, 23:32
modx.pro
995
0

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

Максим Кузнецов
27 марта 2017, 06:13
0
1. В данном вызове pdoResources, плейсхолдер выглядит как [[+tv.priceStore]] (&tvPrefix=``)

2. Возможно, нужно вызвать функцию таким способом:
{set $priceStore = str_replace(" ", "", strstr($priceStore, ' руб', true))}
{$priceStore}

3. что за параметр useFenom у сниппета pdoResources?

4. для решения данной задачи вы можете воспользоваться параметром prepareSnippet
    Вячеслав Варов
    27 марта 2017, 07:52
    0
    useFenom включение шаблонизатора в чанках, в том то и проблема что перепробовал все, не работает:
    {set $priceStore = str_replace(" ", "", strstr($priceStore, ' руб', true))}
    {$priceStore}
    Не совсемпонял причем тут prepareSnippet…
      Максим Кузнецов
      27 марта 2017, 07:59
      0
      Дело в том, что я не могу найти данный параметр ни в документации, ни в наборе параметров. Разве что на гитхабе есть строка:
      $this->config['useFenom'] = $this->modx->getOption('pdotools_fenom_default', null, true);
      — отсылающая к системной настройке. Не подскажете, где можно почитать об этом параметре в рамках сниппетов pdo?

      Что же до prepareSnippet, логика довольно проста:

      1. создаете сниппет, допустим, priceFormatter, примерно с таким содержанием:
      $row['priceStore'] = str_replace(" ", "", strstr($row['priceStore'], ' руб', true));
      return serialize($row);

      2. Указываете свежесозданный сниппет в параметре prepareSnippet.
        Вячеслав Варов
        27 марта 2017, 08:05
        0
        Вот тут упоминается о useFenom
          Максим Кузнецов
          27 марта 2017, 08:09
          +1
          Скорее всего, данный параметр со временем был вынесен в системную настройку.

          К слову, вы можете попробовать добавить свой модификатор в рамках того же фенома:

          1. Создаете плагин на системное событие pdoToolsOnFenomInit:
          <?php
          	if ($modx->event->name == 'pdoToolsOnFenomInit') {
          		$fenom->addModifier('priceFormatter', function ($input) {
          			$clear_price = str_replace(" ", "", strstr($input, ' руб', true));
          
          			return $clear_price;
          		})
          	}

          2. В чанке применяете его к нужной переменной:
          {$priceStore | priceFormatter}
    Вячеслав Варов
    27 марта 2017, 08:03
    0
    Если убрать useFenom то вызов
    {$priceStore}
    выдает пустое место
      Максим Кузнецов
      27 марта 2017, 08:04
      +1
      Если у вас код вызова сниппета именно такой, как в теме вопроса, попробуйте, все же, дописать к вызову:
      &tvPrefix=``
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    8