Бакрин Андрей
13 окт. 2014 г., 13:33

Выполнить php код в чанке?

Здравствуйте. Возможно ли выполнить php код в чанке? Думаю, что нет. Но возникла ситуация, когда у меня в срипте JS нужно получить переменную из PHP. В связи с чем делаю такую конструкцию:
var a=[<=implode(",",$array)?>];
Но в чанке на не работает. Возможно ли как-то передать значение в чанк? Переменная a нужна в теле функции, как быть?
Кусочек кода там не вставился:
Как быть учить modx. В чанке можно вызвать сниппет. Создаешь сниппет: data_arr
туда пишешь php код в конце return нишь переменную с полученными данными return;
вызываешь в чанке:
var a=[[[!data_arr]]];
Нет, в чанке ничего такого нельзя, на то он и чанк. Но у вас же смарти-шаблонизация, нет? Можете не чанк использовать, а перекинуть это в сам шаблон и в нем уже выполнить {implode(',', $array)}
Да, можно так. Только вот так: var a=[[!data_arr]]; (думаю просто опечатка)
Я сначала все запихал в сниппет и вызвал его на странице. Но после выполнения кода выводится запись return; 1 Откуда она берется ума не приложу.
Вот такой кусочек кода, Мне нужно вставить var a = Значения из результатов работы скрипта-обработчика (массив чисел). Вариант, который закомментирован - это работает в просто php файле. А вариант ниже не работает. Что неправильно пишу?
Сниппет это просто php и работает по типу как файлы копай в эту сторону.
Выложи на гистхаб листинг всего сниппета и вызов его в чанке/шаблоне.
http://jsfiddle.net/dk2brm8w/ Сейчас вот в таком варианта вроде бы работает, но помимо всего еще выводится на экран, а мне этого не нужно. Как тогда выделить кусочек кода, чтобы на экран не выводился, а в чанк передавал значение?
Попробуйте в сниппете вот так:
$arr = implode(",",$array); return "[{$arr}];";
А лучше вот так:
return json_encode($array)
Первый вариант как надо, но выводит результат строкой в месте вызова сниппета. А как просто передать значение без вывода?
но выводит результат строкой в месте вызова сниппета
Открою вам тайну: сниппет и возвращает строку, и ничего кроме строки. То есть или выполняете в нем return $result, и его он и возвращает, или не возвращает ничего более.
А как просто передать значение без вывода?
А вот этот вопрос вообще не понятен. Что надо вообще? Передать из чанка что-то в сниппет в качестве параметра? Все как обычно: [[!snippet?foo=[[+foo]] ]]. Это если в чанке. И да, $_POST в чанке вы не передадите параметром сниппету. В Смарти-шаблоне можно. {$smarty.post.foo}
попробуй в начале сниппета написать <php
попробуй в начале сниппета написать
<php
знак вопроса почему-то не выводится )
Потому что <? - это как бы начало тега. Такой тег не разрешен, поэтому он вырезается методом strip_tags(). Надо будет доработать обработку запросов...
Беда.. Хоть какое-то представление имеется о том, как связан фронтенд с бекендом? И как создаются переменные в js?
Хм, код вырезался
< script > window.blablabla = [[!snippet]]; < /script >
p.s. на всякий случай - пробелы в телах надо убрать
Возможно ли как-то передать значение в чанк?
В чанк значение передается также, как и в сниппет:
[[!chunkName? &a=12345]]
Вот именно, беда... Поэтому когда я вижу такие пробелы, я и советую забросить ShopModxBox. Это же не так, что просто поставил и все (как большинство простейших модулей). Тут хочешь не хочешь, а программировать приходится. И что делать, когда даже элементарных знаний не хватает? Люди только-только на трехколесном велосипеде научились кататься, и уже хотят в ралли участвовать.

Добавить комментарий