Модификатор сортировки pdoResources по pagetitle
Всем привет!
Есть набор ресурсов — персоналии. Имя и фамилии разделены тегом br.
Возникла задача сортировать по фамилиям.
Нагуглил php код, сделал сниппет-модификатор (там у меня нормальный br c <>, просто здесь его разрывом строки заменяет):
Делаю вызов pdoResources:
Направьте пожалуйста, заранее спасибо!
Есть набор ресурсов — персоналии. Имя и фамилии разделены тегом br.
Возникла задача сортировать по фамилиям.
Нагуглил php код, сделал сниппет-модификатор (там у меня нормальный br c <>, просто здесь его разрывом строки заменяет):
$string = "$input";
$new_array = explode("br" , $string);
$output = end($new_array);
return $output;
если просто на странице вывести:[[*pagetitle:getSurname]]
— всё круто, выводит всё, что после br, исключая этот brДелаю вызов pdoResources:
[[!pdoResources:default=``?
&parents=`65,20`
&sortby=`pagetitle:getSurname`
&sortdir=`ASC`
]]
ничего не выводит.Направьте пожалуйста, заранее спасибо!
Комментарии: 7
Либо еще вариант — это написать сниппет, которому отдаем список родителей, а он из них делает список id отсортированный по фамилиям, то есть той части pagetitle, которая идёт после тега br.
Но сам не сдюжу, прошу помочь.
Но сам не сдюжу, прошу помочь.
Сделаю примерно без проверки кода. Для MODX2.8
[[!pdoSurname?
&parents=`65,20`
&tpl=`myTpl`
]]
[[!pdoSurname?
&parents=`65,20`
&tpl=`myTpl`
]]
$pdo = $modx->getService('pdoFetch');
$pdo->setConfig([
'parents'=>$parents,
'limit'=>0,
'return'=>'data'
]);
$ress = $pdo->run();
foreach($ress as $k=>$res){
$new_array = explode("br" , $res['pagetitle']);
$ress[$k]['surname'] = end($new_array);
}
function querySort ($x, $y) {
return strcasecmp($x['surname'], $y['surname']);
}
usort($ress, 'querySort');
$pdo->getChunk($tpl,['ress'=>$ress]);
myTpl{foreach $ress as $res}
<p> {$id} {$surname}</p>
{/foreach}
Код не проверял. Возможно мелкие ошибки. И strcasecmp не знаю понимает ли юникод…
Таки накосячил в myTpl :-). Надо так
{foreach $ress as $res}
<p> {$res.id} {$res.surname}</p>
{/foreach}
Спасибо!!! Скоро опробую, отпишусь о результатах!
Параметр sortby сортирует по полю в базе. У вас в базе нет поля «pagetitle:getSurname», есть только «pagetitle».
Я бы предложил фамилию записать в отдельное поле и без проблем по ней сортировать.
Я бы предложил фамилию записать в отдельное поле и без проблем по ней сортировать.
Придётся многое костылить: pagetitle будут вместо имени и фамилии только именем, это также прилетит в breadcrumbs… Вобщем, имеющаяся универсальность пострадает, без учета необходимости переделывать все шаблоны и ресурсы под новые реалии полей(
Вообще можно завести допполе и при сохранении ресурса плагином писать в допполе разбирая pagetitle.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.