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

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

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

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

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