Выборка modUser по значениям дополнительных полей
Как грамотно через api MODX Revo сделать запрос на выборку всех пользователей, у которых, к примеру значение дополнительного поля c_id = 18?
Комментарии: 19
Чето типо того:
$query = '"c_id":"18"';
$c = $modx->newObject('modUser');
$c->innerJoin ('modUserProfile','Profile');
$c->where(array('Profile.extended:LIKE' => '%'.$query.'%'));
$users = $modx->getCollection('modUser',$c);
там все в json хранится
Только не забыть заэкранировать _ :)
Что заэкранировать? Если мы получаем айдишник от пользователя с фронтеда, и он является числом, то достаточно прописать
Или вы про знак подчеркивания? А его, простите, зачем экранировать?
$id = (int) $_GET['id_from_user'];
а в остальных случаях модикс прекрасно обо всем позаботится.Или вы про знак подчеркивания? А его, простите, зачем экранировать?
Потому что при использовании LIKE знак подчеркивания является служебным символом (как и %) и означает, что на его месте может стоять один любой символ.
Окак, не знал… Хотя в нашем случае это не особо бы повлияло на результат, но замечание действительно полезное!
У меня ваш код выдает вот такую ошибку:
Fatal error: Call to undefined method modUser_mysql::innerJoin()
$c = $modx->newQuery('modUser');
ага, ошибочка на ночь глядя небольшая :)
Ага, так работает.
Всем спасибо! Вопрос решен.
Логично предположить, что если мы хотим взять выборку по какому-то из полей профиля, то код будет
на что MODX начинает ругаться… что не так?
$query = '18';
$c = $modx->newQuery('modUser');
$c->innerJoin ('modUserProfile','Profile');
$c->where(array('Profile.comment:LIKE' => '%'.$query.'%'));
$users = $modx->getCollection('modUser',$c);
на что MODX начинает ругаться… что не так?
Сделал так, все работает (вытягиваю только поля «полное имя»).
Еще раз, спасибо всем.
$q=$modx->newQuery('modUser');
$q->select(array(
'modUser.id',
'p.fullname'
));
$q->innerJoin('modUserProfile', 'p','modUser.id = p.internalKey');
$q->where(array('p.comment'=>'18'));
$result = $modx->getCollection('modUser', $q);
Еще раз, спасибо всем.
Можно выборку сделать при помощи сниппета Peoples:
Не пойму, как выборку:
[[!Peoples? &where=`{"Profile.id:=":30}`]]
Вот только у меня никак не получается сделать выборку по extended field.Не пойму, как выборку:
$query = '"showprofile":"on"';
$c->where(array('Profile.extended:LIKE' => '%'.$query.'%'));
правильно переписать под такой синтаксис. Может кто подскажет?
Разобрался сам. Может кому пригодится:
[[!Peoples? &where=`{"Profile.extended:LIKE":"%\"showprofile\":\"on\"%"}`]]
не найду в документации у этого сниппета — &where
Добрый день всем — столкнулся с похожей проблемой, но выводиться все отлично, только есть одно но: нет пагинации при выборке.
То есть когда выводятся все ресурсы — пагинация есть, когда делаю выборку по диспетчерам, грузовладельцам и т.д., то пагинация отсутствует. Сам код с вызовом:
Введите телефон компании
— диспетчер([[!countExtendes? name=dispatcher]])
— грузовладелец([[!countExtendes? name=shipper]])
— перевозчик([[!countExtendes? name=transporter]])
— экспедитор([[!countExtendes? name=forwarder]])
[[!getPage?
&element=`Peoples`
&showHidden=`1`
&tpl=`peoples_tpl_compan`
[[!companSearch]]
&limit=`10`
&pageNavVar=`page.nav`
]]
Сам снипет:
if($_GET['com']){
echo '&where=`{«Profile.phone:LIKE»:"%'.$_GET['com'].'%"}`';
}
elseif(isset($_GET['sel'])){
echo '&where=`{«Profile.extended:LIKE»:"%'.$_GET['sel'].'%"}`';
}
Странно как то HTML почему то не отображается!!!
То есть когда выводятся все ресурсы — пагинация есть, когда делаю выборку по диспетчерам, грузовладельцам и т.д., то пагинация отсутствует. Сам код с вызовом:
Введите телефон компании
— диспетчер([[!countExtendes? name=dispatcher]])
— грузовладелец([[!countExtendes? name=shipper]])
— перевозчик([[!countExtendes? name=transporter]])
— экспедитор([[!countExtendes? name=forwarder]])
[[!getPage?
&element=`Peoples`
&showHidden=`1`
&tpl=`peoples_tpl_compan`
[[!companSearch]]
&limit=`10`
&pageNavVar=`page.nav`
]]
- [[!+page.nav]]
Сам снипет:
if($_GET['com']){
echo '&where=`{«Profile.phone:LIKE»:"%'.$_GET['com'].'%"}`';
}
elseif(isset($_GET['sel'])){
echo '&where=`{«Profile.extended:LIKE»:"%'.$_GET['sel'].'%"}`';
}
Странно как то HTML почему то не отображается!!!
Странно как то HTML почему то не отображается!!!До тебя с первого раза не доходит, что для отображения кода нужно использовать тег code?
Я же это уже объяснял.
Просто сайтов много и не помню на каком надо писать на каком не надо
Напишу заново код:
<form class="form form-compan" action="" method="get" name="del_res">
Введите телефон компании
<input type="text" name="com" size="60">
<input type="submit" name="submit" value="Искать" class="search">
<input type="reset" name="reset" value="Очистить">
<div class='znachki'>
<p class='litImg-main'><input class="check_box_gg" type="radio" name="sel" value="dispatcher">- диспетчер([[!countExtendes ? name=dispatcher]])
</p>
<p class='litImg-main'><input class="check_box_gg" type="radio" name="sel" value="shipper">- грузовладелец([[!countExtendes ? name=shipper]])
</p>
<p class='litImg-main'><input class="check_box_gg" type="radio" name="sel" value="transporter">- перевозчик([[!countExtendes ? name=transporter]])
</p>
<p class='litImg-main'><input class="check_box_gg" type="radio" name="sel" value="forwarder">- экспедитор([[!countExtendes ? name=forwarder]])</p>
</div>
</form>
<div class="page-inner">
<table class="staff">
<tr class="shapka">
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
[[!getPage?
&elementClass=`modSnippet`
&element=`Peoples`
&showHidden=`1`
&tpl=`peoples_tpl_compan`
[[!companSearch]]
&limit=`4`
&pageNavVar=`page.nav`
]]
</table>
<div class="pagination">
<ul>
[[!+page.nav]]
</ul>
</div>
</div>
сам снипет [[!companSearch]]:<?php
if($_GET['com']){
echo '&where=`{"Profile.phone:LIKE":"%'.$_GET['com'].'%"}`';
}
elseif(isset($_GET['sel'])){
echo '&where=`{"Profile.extended:LIKE":"%'.$_GET['sel'].'%"}`';
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.