Модификатор сортировки pdoResources по pagetitle

Всем привет!
Есть набор ресурсов — персоналии. Имя и фамилии разделены тегом 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`
]]
ничего не выводит.
Направьте пожалуйста, заранее спасибо!
Серый
26 ноября 2024, 14:07
modx.pro
173
0

Комментарии: 7

Серый
26 ноября 2024, 15:21
0
Либо еще вариант — это написать сниппет, которому отдаем список родителей, а он из них делает список id отсортированный по фамилиям, то есть той части pagetitle, которая идёт после тега br.
Но сам не сдюжу, прошу помочь.
    Александр Туниеков
    27 ноября 2024, 08:26
    0
    Сделаю примерно без проверки кода. Для MODX2.8
    [[!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 не знаю понимает ли юникод…
      Александр Туниеков
      27 ноября 2024, 08:38
      0
      Таки накосячил в myTpl :-). Надо так
      {foreach $ress as $res}
          <p> {$res.id} {$res.surname}</p>
      {/foreach}
        Серый
        27 ноября 2024, 14:06
        0
        Спасибо!!! Скоро опробую, отпишусь о результатах!
    Наумов Алексей
    26 ноября 2024, 15:41
    0
    Параметр sortby сортирует по полю в базе. У вас в базе нет поля «pagetitle:getSurname», есть только «pagetitle».

    Я бы предложил фамилию записать в отдельное поле и без проблем по ней сортировать.
      Серый
      27 ноября 2024, 14:06
      0
      Придётся многое костылить: pagetitle будут вместо имени и фамилии только именем, это также прилетит в breadcrumbs… Вобщем, имеющаяся универсальность пострадает, без учета необходимости переделывать все шаблоны и ресурсы под новые реалии полей(
        Александр Туниеков
        27 ноября 2024, 19:13
        0
        Вообще можно завести допполе и при сохранении ресурса плагином писать в допполе разбирая pagetitle.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7