G@G 28 августа 2014 0 15
Здравствуйте коллеги!
Делаю алфавитный рубрикатор, за основу взял вариант GetResources+Ajax:
http://modx.ws/urok-modx-ajax-zagruzka-resursov

Застрял на параметре в сниппете, не знаю синтаксис.

Как правильно написать фильтр, если первый символ ЦИФРА, типа:
$params['where'] = '{"pagetitle:LIKE":"[0-9]%"}';


и если первый символ английская буква:
$params['where'] = '{"pagetitle:LIKE":"[A-z]%"}';
15 комментариев
Fi1osof1
Fi1osof 29 августа 2014г в 01:06 #
В данном случае LIKE не поможет. Здесь нужны регулярные выражения, то есть конструкция REGEXP (или RLIKE - синоним REGEXP).
В вашем случае:
Как правильно написать фильтр, если первый символ ЦИФРА, типа:

$params['where'] = '{"pagetitle:RLIKE":"^[[:digit:]]+"}';

или
$params['where'] = '{"pagetitle:RLIKE":"^[0-9]+"}';

Знак ^ - это начало строки, чтобы именно в начале искал цифру, а не где-то в любом месте строчки.
- цифровой символ.
[0-9] В квадратных скобках пишется перечисление возможных символов. 0-9 - это, как все поняли, от нуля и до девятки. Можно указать, к примеру, [0,1,3], то есть только эти цифры искать (любую из них).
+ - это минимум один символ. * - любое количество (даже отсутствие). ? - отсутствие или один символ.
и если первый символ английская буква:

$params['where'] = '{"pagetitle:RLIKE":"^[a-z]+"}';

Вот только с кирилицей в конструкции [...] полная беда, даже не пытайтесь.
G
G@G 29 августа 2014г в 09:49 #
Отлично! Работает!
Спасибо огромное Николай.
Несколько дней бился над этим вопросом.
А с кирилицей у меня все проще, там по одной букве передаю (через LIKE - работает норм.), не массивом.
Fi1osof1
Fi1osof 29 августа 2014г в 12:53 #
Пожалуйста :)
B
Batyabest 29 августа 2014г в 22:44 #
У меня возникла немного похожая проблема.
Передаю sql запрос для выборки из базы, и в запросе хочу подставить имя пользователя. Не работает.

$user = '';
echo 'ID пользователя:'. $user; // Выводит значение как положено

$result = mysql_query("SELECT * FROM `tables` WHERE `user` = '$user'");
Не работает такая конструкция, а если напрямую прописать:

$result = mysql_query("SELECT * FROM `tables` WHERE `user` = '5'");

Работает выборка.

echo "SELECT * FROM tables WHERE usernames = '$user'";

Выдает что вроде бы имя подставляется правильно.

Понимаю, что нужно делать через xPDO, но осилить его пока не могу, не совсем понимаю его синтаксис, по урокам создавал таблицу, через CMP Generator все делал и работало, а на свою переделать не получается, поэтому пока хочу сделать через SQL.
Fi1osof1
Fi1osof 29 августа 2014г в 23:49 #
У вас как-то странно, то колонка user, то usernames. ID у вас хоть числовой? Дайте полный код без всяких изменений.
B
Batyabest 30 августа 2014г в 00:25 #
Поправил.

$user = '';
echo 'ID пользователя:'. $user; // Выводит значение как положено

$result = mysql_query("SELECT * FROM `tables` WHERE `username` = '$user'");

Не работает такая конструкция, а если напрямую прописать:

$result = mysql_query("SELECT * FROM `tables` WHERE `username` = 'petya'");


Работает выборка.

echo "SELECT * FROM tables WHERE username = '$user'";


Выдает

"SELECT * FROM tables WHERE username = 'petya'"
Fi1osof1
Fi1osof 30 августа 2014г в 00:33 #
$user = '';

echo 'ID пользователя:'. $user; // Выводит значение как положено

Как у вас там что-то выводится, если у вас присваивается пустое значение переменной? $user = '';
B
Batyabest 30 августа 2014г в 09:53 #
Редактор код сожрал, там должно быть:
''
Fi1osof1
Fi1osof 30 августа 2014г в 11:10 #
Да, MODX вырезает знаки [[]] в запросах (а еще и HTML-сущности, что для меня оказалось новостью (нафига сущности вырезать??)). В общем, вроде поправил. Как раз сейчас и проверим.
B
Batyabest 30 августа 2014г в 09:55 #
Короче, там через modx.user.id:userinfo=`username` получаем имя залогиненного пользоваателя
Fi1osof1
Fi1osof 30 августа 2014г в 11:13 #
Итак, [[+modx.user.id]] - это MODX-тег, а не PHP-переменная. Если разницы не видите - очень плохо. И это не является числом.
Уж если вы пытаетесь что-то в php делать, то и делайте средствами php, а не шаблонизации. $id = $modx->user->id. А уж если ооочень хочется плейсхолдер использовать, то $id = $modx->placeholders['modx.user.id'] или $id = $modx->getPlaceholder('modx.user.id').
B
Batyabest 30 августа 2014г в 12:11 #
Спасибо, огромное.
Добавил такую запись $user = $modx->user->get('username'); и получил в переменной $user значение текущего залогиненного пользователя. Теперь в запросе SQL отрабатывается выборка как положено.

Но меня сильно заинтересовала возможность использовать свои таблицы средствами xPDO. Мне кажется, это гораздо перспективнее и, самое главное, правильнее в отношении ModX.

Если не трудно, скиньте ссылочки на учебные материалы по пользовательским таблицам в ModX. Делал по этой инструкции, не получилось. В консоли все равно выдает ошибку.
Fi1osof1
Fi1osof 30 августа 2014г в 12:15 #
1. Дальше если захотите писать, пишите отдельный топик. Хватит нам уже флудить в чужом топике.
2. Материала по xPDO у Ильи больше чем необходимо. Вот прям все по порядку и изучайте. https://ilyaut.ru/xpdo/. Я пересказом заниматься не буду.
B
Batyabest 30 августа 2014г в 12:16 #
Хорошо, спасибо
Fi1osof1
Fi1osof 30 августа 2014г в 12:17 #
Пожалуйста
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.