Fenom и toPlaceholder
Как я понимаю, феном не сможет прочитать плейсхолдер, установленный сниппетом через toPlaceholder?
Или я что-то упустил?
Мой сниппет:
И интересно что неважно, каким образом запущен сниппет, через Fenom или обычным способом, плейсхолдер не подхватывается феномом, в то время как другие теги, типа {$pagetitle} работают прекрасно.
В чём может быть загвоздка?
Или я что-то упустил?
Мой сниппет:
{$_modx->runSnippet('!pdoField', [
'id' => $id,
'field' => 'longtitle',
'top' => 1,
'toPlaceholder' => 'placeholder_name',
])}
Далее при вызове плейсхолдера:[[+placeholder_name]] // этот вариант работает
{$placeholder_name} // этот не работает и выбивает весь феном из чанка в сырые теги
И интересно что неважно, каким образом запущен сниппет, через Fenom или обычным способом, плейсхолдер не подхватывается феномом, в то время как другие теги, типа {$pagetitle} работают прекрасно.
В чём может быть загвоздка?
Поблагодарить автора
Отправить деньги
Комментарии: 20
Также я заметил, что феном не работает с тв-параметрами, включёнными в &includeTVs сниппета!
Например, есть mFilter2 с параметром:
Короче ситуация такая же…
Как решить эту проблему? Или оставить так?
Например, есть mFilter2 с параметром:
&includeTVs=`tv_name`
В чанке при вызове[[+tv_name]] // этот вариант работает
{$tv_name} // этот не работает и выбивает весь феном из чанка в сырые теги
Короче ситуация такая же…
Как решить эту проблему? Или оставить так?
Если что-то выбивает, то у тебя ошибка синтаксиса, пора бы это уже запомнить.
Если шаблон не может даже скомпилироваться, то до его выполнения дело вообще не доходит.
Если шаблон не может даже скомпилироваться, то до его выполнения дело вообще не доходит.
Очень странно…
Не работает никак, ни с получением установленного плейсхолдера, ни с правильным синтаксисом!
Мне всё же кажется, что проблема в названии плейсхолдера, т.к. он через тире: placeholder-name и tv-name.
Потому что при подключении тв у mFilter2 без тире, например:
Не работает никак, ни с получением установленного плейсхолдера, ни с правильным синтаксисом!
Мне всё же кажется, что проблема в названии плейсхолдера, т.к. он через тире: placeholder-name и tv-name.
Потому что при подключении тв у mFilter2 без тире, например:
&includeTVs=`keywords`
в чанке {$keywords} // Работает прекрасно!
Интересно что с нижним подчёркиванием переменной работает:
{var $placeholder_name = $_modx->getPlaceholder('placeholder-name')}
{$placeholder_name}
а с тире нет:{var $placeholder-name = $_modx->getPlaceholder('placeholder-name')}
{$placeholder-name}
Ну, наверное так и есть, потому что переменные в PHP (да и вдругих языках) не могут называться через тире. Только через подчёркивание.
Если речь о ТВ в чанке, то можно так
Если на странице, то так:
Если речь о ТВ в чанке, то можно так
Моя ТВшечка: {$_pls['tv-name']}
Если на странице, то так:
{var $tv_name = $_modx->getPlaceholder('tv-name')}
Моя ТВшечка: {$tv_name}
Классно! Спасибо, всё работает!
Я бы долго ещё думал, пока бы не додумался до тире в сочетании с $_pls[]…
Вопрос полностью решён!
Я бы долго ещё думал, пока бы не додумался до тире в сочетании с $_pls[]…
Вопрос полностью решён!
Чего тут думать, если Fenom компилирует шаблон в PHP, который не позволяет называть переменные через тире. А ты ему указываешь именно такую переменную.
Ты журнал системы вообще не читаешь, принципиально?
Ты журнал системы вообще не читаешь, принципиально?
Виноват. Спасибо за быструю подсказку. Век живи — век учись.
Журнал системы у меня ничего не показывал, т.к. log_level был установлен на 1
Журнал системы у меня ничего не показывал, т.к. log_level был установлен на 1
pdoTools логирует ошибки Fenom на уровне 1 (LOG_LEVEL_ERROR).
Я бы, на твоём месте, разобрался, почему журнал системы не работает.
Я бы, на твоём месте, разобрался, почему журнал системы не работает.
Ок, спасибо!
Интересно что ни один из предложенных вариантов не срабатывает на странице для тв-шки у которой много тире:
[[*tv-name-of-name-of-other-name]] // работает
{$_pls['tv-name-of-name-of-other-name']} // не работает
{$_modx->getPlaceholder('tv-name-of-name-of-other-name')} // не работает
Никак не завелось. Пришлось переименовывать тв-шку в tv_name_of_name_of_other_name и переписывать все места, где она встречалась.
А такой вариант пробовали?
{$_modx->resource->getTVValue('tv-name-of-name-of-other-name')}
Ради интереса попробовал. Неа, не работает. Ни с этой тв-шкой ни с другой, нормальной. Доходит до места вызова тега и выдаёт return наверное, т.к. после него ничего не выводит.
P.S. Хотя по видимому работает, т.к. он спотыкается на сырые теги в вызове Office, видно я там не всё переписал на феном. Удалив его всё заработало, вывело чистый код из базы. Тут я и заметил, что у базы кодировка была неправильной — вывело кракозябры ))).
Спасибо за ещё один вариант вывода — он обязательно пригодится!
P.S. Хотя по видимому работает, т.к. он спотыкается на сырые теги в вызове Office, видно я там не всё переписал на феном. Удалив его всё заработало, вывело чистый код из базы. Тут я и заметил, что у базы кодировка была неправильной — вывело кракозябры ))).
Спасибо за ещё один вариант вывода — он обязательно пригодится!
Как я понимаю, только что установленные плейсхолдеры в феноме не получится ставить в любое место страницы, а строго после вызова сниппета, который устанавливает этот плейсхолдер.
Вот пример:
Как обойти этот момент на Феноме? Делать 2 вызова сниппета? Или использовать параметр toPlaceholder (только для pdo-сниппетов)?
Вот пример:
{$_modx->getPlaceholder('totalMy')} // тут НЕ выводит
{$_modx->runSnippet('!getTickets', [
'parents' => 0,
'totalVar' => 'totalMy',
])}
{$_modx->getPlaceholder('totalMy')} // тут выводит
С modx-плейсхолдерами всё работало, даже если вставить плейсхолдер до вывода сниппета.Как обойти этот момент на Феноме? Делать 2 вызова сниппета? Или использовать параметр toPlaceholder (только для pdo-сниппетов)?
Парсер MODX работает в цикле до 10 раз, чтобы разобрать все плейсхолдеры. То есть:
1. Видим [[+totalMy]], значения нет
2. Видим [[!getTickets]], запускаем, он выставляет значение
3. Проверяем, что у нас осталось необработанного
4. Запускаемся еще раз и вот теперь только обрабатываем [[+totalMy]]
5. Ой, а чего это у меня так всё тормозит?
Fenom работает один раз и позволяет сохранять работу сниппетов в переменные:
1. Видим [[+totalMy]], значения нет
2. Видим [[!getTickets]], запускаем, он выставляет значение
3. Проверяем, что у нас осталось необработанного
4. Запускаемся еще раз и вот теперь только обрабатываем [[+totalMy]]
5. Ой, а чего это у меня так всё тормозит?
Fenom работает один раз и позволяет сохранять работу сниппетов в переменные:
{set $tickets = $_modx->runSnippet('!getTickets', [
'parents' => 0,
'totalVar' => 'totalMy',
])}
{$_modx->getPlaceholder('totalMy')}
{$tickets}
Класс! Супер!
Спасибо, всё оказывается проще чем казалось на первый взгляд!
Спасибо, всё оказывается проще чем казалось на первый взгляд!
а как указать шаблон на {$_modx->getPlaceholder('totalMy')}
В чём может быть загвоздка?В том, что только что установленный плейсхолдер нужно получить.
{var $placeholder_name = $_modx->getPlaceholder('placeholder_name')}
Как ни странно, это есть даже в документации.
А у меня трудность с чанком вывода
В чанке mFilter2 установлен {include 'chunk-name'} с множеством модификаторов на замену внутри
В чанке mFilter2 установлен {include 'chunk-name'} с множеством модификаторов на замену внутри
[[+title:replace=`==`:replace=`и==так далее`]]
Как задать вариацию в таком случае, чтобы не клонировать одни и те же чанки в которых [[+tv.myTV:replace=`==`]] замены уже существуют в чанке с +title? Делаю так — результат по параметру {$_pls['myTV']} не выводит{var $title = $_modx->getPlaceholder('myTV')}
{var $title = $_pls['tv.myTV']} // var не работает
{set $title = $_pls['tv.myTV']} // и set не работает
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.