К содержанию

Получение id ресурса по pagetitle

Нашел кучу примеров и вариантов, как зная id получить любое поле хоть родителя, хоть дедушки, но никак не могу понять как провернуть обратное — зная поле, в моем случае pagetitle, узнать id ресурса, чтобы потом уже узнать любое поле… неужели никому не надо было ни разу или это элементарно и я туплю?
Андрей
Андрей
09 января 2018, 17:20
modx.pro
6 706
Реклама

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

Михаил
Михаил Эксперт
09 января 2018, 20:25
$q = $modx->newQuery('modResource');
$q->where(array('pagetitle':LIKE => '%пейджтайтл%')); //тут ставим любые поля ресурса

$resource = $modx->getObjectt('modResource', $q);
print_r($resource->toArray());
    Андрей
    Андрей Старожил
    03 апреля 2018, 22:23
    понадобилось добавить условие для поиска (выяснилось что заголовки могут повторяться в других разделах), доработал код вот так
    <?php
    $q = $modx->newQuery('modResource');
    $q->where(array('pagetitle' => $idsearch, 'parent=' => array('993','992','995','989','990','991','994','996','997','988')));
    
    $resource = $modx->getObject('modResource', $q);
    
    $iddd = $resource->uri;
    
    return $iddd;
    на 99% дает верный результат, но в нескольких случаях выдает ресурс у которого родитель не перечислен в условии. что не так?
    Андрей
    Андрей Старожил
    15 декабря 2018, 12:12
    $q = $modx->newQuery('modResource');
    $q->where(array('pagetitle' => $idsearch, 'parent:IN' => array('4498')));
    
    $resource = $modx->getObject('modResource', $q);
    ищет только в верхнем уровне, как можно добавить чтобы искал в n-вложенных уровнях?
      Михаил
      Михаил Эксперт
      15 декабря 2018, 16:48
      Тогда можно воспользоваться getChildIds

      $child = $modx->getChildIds($parent, $depth, array('context_key' => 'web'));
      
      $q = $modx->newQuery('modResource');
      $q->where(array('pagetitle' => $idsearch, 'parent:IN' => $child));
      
      $resource = $modx->getObject('modResource', $q);
    Андрей
    Андрей Старожил
    09 января 2018, 20:35
    Спасибо, я решил вот так
    [[!pdoResources?
                             &parents=`2`
                             &depth=`3`
                             &limit=`1`
                             &tpl=`tpl.url`
                             &where=`{"pagetitle":"[[+tv.rrr]]"}`
                            ]]
    меня тоже озарило)
    учитывая что id для меня не самоцель, а этап для получения урл ресурса, мне кажется это более подходящий вариант
      Баха Волков
      Баха Волков Администратор
      10 января 2018, 18:31
      Эмм… пример выше намного лучше и полезней…
        Андрей
        Андрей Старожил
        14 января 2018, 19:11
        согласен. посмотрел в статистику — мое творение в 4 раза больше запросов с БД генерит, на больших выборках разница во времени очень заметна.
        Roman
        Roman Проверенный
        19 февраля 2018, 21:23
        У меня работает так
        [[!pdoResources?
                                 &parents=`2`
                                 &depth=`3`
                                 &limit=`1`
                                 &tpl=`tpl.url`
                                 &where=`{"pagetitle":[[+tv.rrr]]}`
                                ]]
        т.е. TV не обертываю в кавычки
          Андрей
          Андрей Старожил
          19 февраля 2018, 23:07
          Роли не имеет. Так все равно больше запросов. На больших объемах это сильно заметно.
            Roman
            Roman Проверенный
            19 февраля 2018, 23:10
            У Вас получилось сделать как написал Михаил?
              Андрей
              Андрей Старожил
              19 февраля 2018, 23:14
              Да, конечно.
                Roman
                Roman Проверенный
                20 февраля 2018, 21:26
                У меня не получается, ошибку выдает
                  Андрей
                  Андрей Старожил
                  21 февраля 2018, 09:26
                  я код немного переделал под себя, вот такой точно не выдает ошибку
                  <?php
                  $q = $modx->newQuery('modResource');
                  $q->where(array('pagetitle' => $idsearch));
                  
                  $resource = $modx->getObject('modResource', $q);
                  
                  $iddd = $resource->uri;
                  
                  return $iddd;
                    g0dzilla
                    g0dzilla Старожил
                    21 февраля 2018, 09:35
                    ":LIKE" пишется сразу после pagetitle. Разберитесь с синтаксисом.
                    $q->where(array('pagetitle:LIKE' => '%pagetitle%'));
                    Код из коммента выше будет искать по точному совпадению, т.е. если перед pagetitle или после него будет пробел или другой символ, сниппет ничего не вернет.
          srs
          srs Проверенный
          15 декабря 2018, 19:22
          Как вариант:
          echo $modx->getObject('modResource', ['pagetitle' => 'page title'])->get('id');
          // or 
          $res = $modx->getObject('modResource', ['pagetitle' => 'page title']);
          echo $res->get('id');
          echo $res->get('parent');
          echo $res->getTVValue('foo');
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            17