Modx Revo передача параметров чанку на кириллице
Приветствую!
Такой вопрос (может кто сталкивался)
Передаю значения чанку на кириллице (UTF8) вот так:
В чанке соответственно:
В итоге в HTML вставляется вот так:
Т.е. все вставляется в h3, если передать значения на английском то все срабатывает как надо. Видимо парсер криво парсит — то ли что то с кавычками (хотя английских нормально проходит), то ли ему кириллица не нравится.
Пробовал @CODE: — он тоже лезит в h3 (сама деректива там появляется — h3 '@CODE: ПОИСК и т.д.)
Знающие люди подскажите, в код модикса лезть не хочется.
Куда копать?
Такой вопрос (может кто сталкивался)
Передаю значения чанку на кириллице (UTF8) вот так:
[[$chunkName?
&title=`ПОИСК что то еще на русском`
&button=`искать`
]] В чанке соответственно:
<article class="grid_[[+grid]]">
<h3>[[+title]]</h3>
<form id="form2" class="jqtransform" method="get">
...
<a class="button2">[[+button]]</a>
<div class="clear"></div>
</form>
</article>В итоге в HTML вставляется вот так:
<h3>`ПОИСК что то еще на русском`&button=`искать`</h3>
...
<a class="button2"></a>
...Т.е. все вставляется в h3, если передать значения на английском то все срабатывает как надо. Видимо парсер криво парсит — то ли что то с кавычками (хотя английских нормально проходит), то ли ему кириллица не нравится.
Пробовал @CODE: — он тоже лезит в h3 (сама деректива там появляется — h3 '@CODE: ПОИСК и т.д.)
Знающие люди подскажите, в код модикса лезть не хочется.
Куда копать?
Комментарии: 35
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
И кнопку кастомизироваеть не обязательно (скорее всего везде «искать» будет), а вот заголовок надо разный! Но тут еще одна проблема: если параметр на русском то в HTML вставляется с апострофами ` — или как этот символ называется :-) (это те кавычки в которых параметр пишется).
Но на английском все четко срабатывает)
А код трогать не охота — потом если обновить версию модикса, то надо опять лезть в код, а самое главное запомнить где правил))))
Т.е. title — без апострафов, да у меня там еще grid передается — его ставить первым (выше параметра на русском) иначе он тоже в title лезет.
Получается что русские символы ломают парсер, после них парсер перестает парсить параметры)))))
Но корень проблемы не решен!
Ищу в коде мод икса место отвечающее за парсинг параметров чанка)))) посмотрим что там
MODX Revolution 2.2.7-pl (traditional)
../core/model/modx/modparser.class.php
со строки 280
Вроде оно)))
Спертовзято с http://xpdo.org/api/xpdo/xPDO.html#escSplitРаспил строки по "&" на param=value, после уже param и value пилятся по знаку "=", $escToken по дэфолту ` (не ', а именно такой ` ).
Можно поиграть с параметрами (я именно про токены в $escToken — да да, плохой тон править сорцы, но главное причину найти).
То есть передать «другие токены» и использовать «переданные другие токены», вобщем пошел я спать)
Надо было сначала потестить, а я ж полез, Скиминочить, йопт)
Я не понял? работает али нет?
Я тут почитал в php5 (в php6 исправлено, но увы он еще не в релизе)))) строковые функции strlen, substr и т.д. не правильно работают с utf8 — надо использовать mb_substr, mb_strlen и т.д. с указанием кодировки в параметрах функций.
Сейчас некогда вечерком буду код править, заменять эти функции в методах классов в той же escSplit
Да и к стати тоже самое при передаче параметров сниппетам… вообщем езде где можно параметры передать такая байда)))))
Интересненко!
Поставил Denwer и все заработало!
Просто я до этого на Ubunte 9.04 делал это…
Надо копать в сторону Ubuntu
Вроде и код модикса правил… использовал mb_substr, mb_strlen (см. выше) — может проблема в unix (у меня ubuntu 9.04), возможно там что-то править нужно, настройки какие… в итоге отказался от передачи параметров на русском)))))
Хотя надо бы добить эту проблему))))) может на днях еще поковыряюсь)))) — раз не один я с такой проблемой)))
у вас какая версия nix`ов?
Что такое nix`ов?
Ну вот вы нашли решение проблемы)))) PHP глючит)))
Всетаки мысль правильно у меня шла )))))
Будем знать теперь!
В коде модикса используются substr, strlen и другие строковые функции без приставки mb_
Они неправильно работают с UTF8 — и это известный факт, есть даже багрепорты об этом на сайте php
Вроде как те же функции с приставкой mb_ решают проблемы, но возможно я не весь код перелопатил… не все заменил…
На до же найти тот участок который за парсинг сниппетов отвечает…
На этой неделе поковыряю еще
Но это не очень хороший выход — даже если получится… любое обновление модикс — и править опять придется код модикса ручками))))))
По поводу Formit и Breadcrumbs для них параметры парсит ядро модикса — соответственно там тоже лажа получается
И вообще любому сниппету параметры на русском = лажа, а pdoCrumbs видимо сам парсит параметры без помощи ядра модикса)))))
Сейчас нашел способ написать один параметр на кириллице
если этот параметр ставить самым последним и без кавычек то нормально получается)
Чанк Test
Вызываю
Получаю
У меня только один вопрос — как вам это удается? :)
П.С. Правда версия MODX 2.3.5.
если там не ноль, кириллица в сниппетах валится
П.С. Имею ввиду комментарии мне здесь. ;)
Так что, Сергей не хвалится, а рассказывает, как должно быть. А вот у вас печалька, да.
2 дня потратил на поиск корня проблемы.
А кому-то просто поехидничать охота :)