Вызов fenom обработчика

Добрый день! Помогите, никак не могу понять, как вызвать обработчик Fenom, чтобы обработать json строку методом json_decode и через foreach назначить переменные. Это пишется в какой-то контроллер modx или каким то методом вызывается fenom через pdoresources? Спасибо! Очень сложно найти именно такую банальную инфу, к сожалению…
Vyacheslav
01 февраля 2017, 14:22
modx.pro
2
2 960
0

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

Алексей Ерохин
01 февраля 2017, 17:38
+2
{var $array = $json | fromJSON}
{if $array | iterable}
	{foreach $array as $key => $value}
    		{$_modx->setPlaceholder($key,$value)}
	{/foreach}
{/if}
{$_modx->getPlaceholder('key')}
    Алексей Ерохин
    01 февраля 2017, 17:40
    +2
    Вообще здесь довольно доступно написано
    docs.modx.pro/components/pdotools/parser#Шаблонизатор-Fenom
      Vyacheslav
      01 февраля 2017, 17:48
      0
      Вот куда этот код писать? В чанк? В чанке этот код не работает. Если в контроллер, то в какой? Если в свой, то как его вызвать до загрузки страницы? Везде в этой статье подразумевается, что феном вызвать вообще проще простого, но если я пишу код в чанк, на странице выводится этот код вместо результата.
        Алексей Ерохин
        01 февраля 2017, 17:55
        +2
        Настройки нужные включены?

        В логах пишется, где ошибка в синтаксисе fenom, причем до конкретного символа.

        В чанке вместо [[+id]] можно писать {$id}, fenom по умолчанию обрабатывает.

        А еще у pdoResources есть параметр &decodeJSON=`1`, который сразу декодирует json, лучше его отключить, если хотите сами обрабатывать.

        Я просто не знаю, что вы хотите получить и как, поэтому оперирую общими тезисами. Может в вашем случае код немного изменится.
          Владимир Ребров
          15 мая 2020, 13:27
          0
          Спасибо большое, очень помогли. Не мог обработать json в чанке, не знал о существовании активированного по дефолту параметра decodeJSON — в документации его нет.
          Захарий
          01 февраля 2017, 17:57
          +2
          Fenom — парсер тегов(грубо говоря). На замену родным [[+pagetitle]]. Ну и плюс новые методы, модификаторы и т.д. То бишь, писать нужно там где использовали [[+]] — чанки, шаблоны, ресурсы. Для этого вам нужно: версия pdoTools с поддержкой Fenom, включить обработку феном тегов в системных настройках и отсутствие «Феном» ошибок на странице в целом(например, распространенный конфликт с метрикой из-за {(i=).
      Vyacheslav
      01 февраля 2017, 17:58
      0
      Конкретно мой пример — я хочу получить json ответ со списком файлов на яндекс.диске
        Алексей Ерохин
        01 февраля 2017, 18:10
        +1
        У вас должен быть сниппет, который получит ответ от апи, с помощью него и выводите через $modx->getChunk, либо подключив сервис pdoTools $pdoTools ->getChunk

        В самом сниппете можете использовать php-функцию json_decode и в цикле заполнять поля чанка.

        И вот в чанке можете уже писать {$placeholder} для обработки fenom
          Vyacheslav
          01 февраля 2017, 18:27
          0
          Можете мне помочь на платной основе? Скайп sarcopter5
        Vyacheslav
        01 февраля 2017, 18:27
        0
        Можете мне помочь на платной основе? Скайп sarcopter5
          Vyacheslav
          01 февраля 2017, 19:13
          0
          Проблема не обработки fenom кода заключалась в том, что я писал код без фигурных скобок.
          Писал var $array = $json | fromJSON вместо {var $array = $json | fromJSON}
            Владимир
            08 июля 2019, 14:59
            0
            Ребята, подскажите пожалуйста! Как в ajax файле form.php подключить после вызова чанка обработку fenom тегов и снипетов? Вот содержимое файла form.php
            <?php
            	if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
            		return;
            	}
            
            	define('MODX_API_MODE', true);
            
            	require dirname(dirname(dirname(__FILE__))) . '/index.php';
            	
            	$modx->getService('error','error.modError');
            	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
            	$modx->setLogTarget('FILE');
            	
            	
            	if ($_POST['action'] == "1" && isset($_POST['mass'])) {
            		//Получаем значение для второго селектора
            
            		$output = $modx->getChunk('mass',array(
                        'mass' => strval($_POST['mass']),
                        'h' => strval($_POST['h']),
                        'l1' => strval($_POST['l1']),
                        'l2' => strval($_POST['l2']),
                        'l3' => strval($_POST['l3']),
                    ));
            
            		$result = array($output, 'success');
            	}
            	else {
            		$result = array('Некорректный запрос', 'error');
            	}
            	
            	if (!empty($result)) {
            		die(json_encode($result));
            	}
              Юрий
              09 июля 2019, 12:46
              0
              if (!$pdoTools = $modx->getService('pdoTools')) return;
                Владимир
                10 июля 2019, 12:16
                0
                Подставлял уже методом тыка в каждую строку, как не читало fenom теги и снипеты, так и не читает. Есть подозрение что где-то упускаю, что-то но не консоль не чего не показывает, ни сам разобраться не могу(
                  Pavel Zarubin
                  10 июля 2019, 13:36
                  +1
                  $pdoTools = $modx->getService('pdoTools');
                  $output = $pdoTools->getChunk('mass',array(
                              'mass' => strval($_POST['mass']),
                              'h' => strval($_POST['h']),
                              'l1' => strval($_POST['l1']),
                              'l2' => strval($_POST['l2']),
                              'l3' => strval($_POST['l3']),
                          ));
                    Владимир
                    10 июля 2019, 13:40
                    0
                    Спасибо за помощь, но тоже не работает(
                      Pavel Zarubin
                      10 июля 2019, 13:42
                      0
                      Такого быть не может, а со стандартными тегами modx'a работает? А то может у вас путь до index.php неправильный
                        Владимир
                        10 июля 2019, 13:45
                        0
                        Стандартные теги показывает, тобишь переменные которые передаються в чанк h, l1, l2, l3 (показывает через такой вызов
                        [[+h]]
                        )
                          Pavel Zarubin
                          10 июля 2019, 13:50
                          0
                          Тогда у вас исключительный случай) Попробуйте еще с файловым чанком, а вдруг…
                          $pdoTools = $modx->getService('pdoTools');
                          $output = $pdoTools->getChunk('@FILE mass.tpl',array(
                                      'mass' => strval($_POST['mass']),
                                      'h' => strval($_POST['h']),
                                      'l1' => strval($_POST['l1']),
                                      'l2' => strval($_POST['l2']),
                                      'l3' => strval($_POST['l3']),
                                  ));
                          mass.tpl должен лежать в core/elements/
                          также проверьте все таки настройки pdoTools, включена ли обработка синтаксиса фенома в чанках и на странице
                            Владимир
                            10 июля 2019, 13:58
                            0
                            Fenom теги заработали (огромное спасибо!), а сниппеты все так же не обрабатываються (даже в феном вызове)
                              Pavel Zarubin
                              10 июля 2019, 14:11
                              0
                              //Сниппеты из бд в чанках и на странице
                              {'snippetName' | snippet: [
                                  ...params...
                              ]}
                              //Файловые сниппеты в чанках и на странице путь относительно core/elements
                              {'@FILE snippetName.php' | snippet: [
                                  ...params...
                              ]}
                              //API файловые сниппеты
                              $pdoTools = $modx->getService('pdoTools');
                              $pdoTools->runSnippet('@FILE snippetName.php', [...params..]);
                              
                              //API из БД
                              $pdoTools = $modx->getService('pdoTools');
                              $pdoTools->runSnippet('snippetName', [...params..]);
                                Владимир
                                10 июля 2019, 14:14
                                0
                                Спасибо огромное! Буду пробовать
                                Владимир
                                10 июля 2019, 14:21
                                +1
                                //Сниппеты из бд в чанках и на странице
                                {'snippetName' | snippet: [
                                    ...params...
                                ]}

                                Работает! Ты мой спаситель! Прям от души благодарю!
                        Владимир
                        10 июля 2019, 13:51
                        0
                        а fenom теги и вызов сниппетов такая ситуация
                    Юрий
                    10 июля 2019, 14:04
                    0
                    Извиняюсь, не увидел ответы
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              26