Нужно, что бы в сниппете значение из tv было числом
Здравствуйте!
Мне нужно добавлять пунктам меню css-класс разным страницам. Условий много, поэтому я решил сделать для этого свой сниппет «dismenu», что бы там в php все это дело просчитывать. Создал tv (числовое поле) `day-num` для страниц и пытаюсь получить значение в сниппете для переменной $daynum:
Подскажите, что я делаю не так?
Мне нужно добавлять пунктам меню css-класс разным страницам. Условий много, поэтому я решил сделать для этого свой сниппет «dismenu», что бы там в php все это дело просчитывать. Создал tv (числовое поле) `day-num` для страниц и пытаюсь получить значение в сниппете для переменной $daynum:
[[pdoMenu? &parents=`219`
&level=`1`
&includeTVs=`day-num`
&rowClass=`[[dismenu? &daynum=`[[+day-num]]`]]`
]]Проблема в том, что в сниппете переменная $daynum выводится как текст (т.е. я не могу ее ни сравнить с другим числом, ни сделать арифметические действия). Все мои попытки преобразовать ее в число в сниппете с помощью функций php тоже не дают результата (превращается тупо в 0).Подскажите, что я делаю не так?
Комментарии: 63
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
вот на js набросал
jsfiddle.net/jury1/a4mL290e/1/
Попробуйте так:
Или используйте var_dump
возвращает
string(12) " 5"="
отображает 5
отображает 0
отображает string(12) " 5"="
как еще что проверить я не знаю… (
Как Вы предлагаете проверить?
мы с вами выяснили, что значение из TV приходят в «неправильном» формате.
Подскажите дальнейший алгоритм действий
и он фаирбаге вижу " 5 " (т.е. какие-то лишние пробелы) — Вы об этом говорили?
Вот Вы и на финишной прямой. Вы знаете теперь, что отдаёте тэвэхе число 5, а получаете строку 5. Значит, проблема на стадии замены тэвэхи на её значение. Проверьте параметры ввода и вывода тэвэхи. Если там нет проблем (типа параметр вывода — строка, например), попробуйте установить ввод — текст, вывод — по умолчанию.
forums.modx.com/thread/62570/tv-1
Содержимое сниппета:
Вывожу на странице:
и получаю (барабанная дробь):
А не работает именно когда я через PdoMenu пытаюсь tv получать для других страниц:
1. Создал tv (числовое поле) `day-num` для страниц (страницы — это у меня дни недели) и заполнил их значениями от 0 до 6
2. Создал сниппет dismenu:
3. Вывожу меню с днями недели на странице:
Все.
"$tmp = $modx->resource->getTVValue('day-num'); print_r($tmp);" говорит номер дня недели страницы, на которой мы находимся… А нужно «пробежаться» по всем страницам из pdo меню (
Показываю
вставил ваш код
заменил на свои значения — белый экран
В общем, тут Вам в мануалы — копайте в сторону {ignore}{/ignore} и пробелов (по ходу курения манов поймёте, о чём речь). + логи MODX по мере внесения правок смотрите, они вполне говорящие в данном случае.
И причём вообще fenom если он тут никакую погоду не делает. Ну напишите всё на стандартном синтаксисе.
Промолчал, но не промолчал — охерительная логика
Ну не запросы же делать в базу вместо самого pdoTools, когда это как собаке пятая нога
Я же прямо написал: — слово «проблема» видать, надеюсь?) Вот тут вот у тебя со зрением всё отлично было, а в этот раз удила закусил что-то)
Ещё раз повторю: Я нигде слова не сказал, что твои решения хоть малость плохие итп — не по делу нападаешь — охолони!)
— ключевое, «что говорит».
Короче, не суть. Лучше поделись, разобрался ты в самой проблеме или нет в рамках предложенного в топике вызова сниппа?
Короче, лучше делюсь, разобрался я в самой проблеме в рамках предложенного в топике вызова сниппета:
Проблема заключается в том, что проблемы вовсе и нет! Опа, уже 500 раз говорю. Санта-Барбара бл…
Если бы знаний было чуть больше, то можно было бы увидеть, что вызов либо неправильный, либо контекст неизвестен, я уже выше говорил:
Вот сам вопрос и вот ответ: «Нужно? Можно! Ведь существуют тысячи компонентов с десятками тысяч сниппетов, и у них как-то получается получить то, что нужно. Еще не смешно? pdoMenu который вызывается в примере (барабанная дробь) получает в качестве параметра limit число и у него как ни странно всё получается»
Не используя fenom и tpl вызвать в параметре &rowClass сниппета pdoMenu свой сниппет, который вернёт значение «this text», if (x > n); где x — текущий день недели, а n — числовое значение tv, указываемое на странице вручную (и описать причины текущей проблемы):
Код вызова:
Код сниппета:
Мы верим в Баху!)
Чанк:
Эмм… может потому что вот
Но ведь тут уже вопрос принципа — почему значение tv, переданное из pdo мы не можем привести к обычному числу? (все разработчики MODX могут, а мы ет).
Кстати с id ресурса такая же фигня — он передается, но в сниппете php отказывается его воспринимать как число
Столкнулся с такой же проблемой. Если кратко, то решение: обращением к сниппету через чанк.
Если чуть более подробно, то суть проблемы в том, что в сниппет попадает не значение переменной day-num, а строка с названием переменной.
В этом можно убедиться, если в сниппете написать:
Тогда мы реально видим, что пришло. В вашем случае окажется что $day-num = [[+$day-num]], и естественно, что никакие математические операции с ней не возможны. Получается сначала срабатывает сниппет, а потом pdo заменяет переменные [[+…]] на их значения.
Если же создать чанк (например daynum_class) и обратиться из него к снипету dismenu. Тело чанга:
А из pdoMenu обратиться к чангу:
То это будет работать. Есть еще вариант обратиться через файл:
Но этот вариант не проверял.
В приведенный выше примерах с TV я так понял пытаются через API по имени переменной из сниппета узнать ее значение. На мой взгляд это не лучшее решение.