We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 25441
    • 60 Posts
    Подскажите пожалуйста, есть [*parent*], который возвращает родительский id, а есть ли параметр чтобы вывести child ID?
      • 897
      • 1,620 Posts
      childid чего?
        "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

        Не используйте Revo для "просто сайтов". Используйте Evo

        Who can defeat the Russian bear?
        • 25441
        • 60 Posts
        Quote from: Aleksey at Jul 07, 2009, 07:41 AM

        childid чего?
        Извиняюсь, не до конца вопрос раскрыл.

        Есть документ, и у него есть дочерний документ, вот id, дочернего документа мне надо узнать.
          • 31136
          • 72 Posts
          Можете для этой цели использовать функцию getChildIds из API:
          global $modx; // на всякий случай добовлю
          $children = $modx->getChildIds($parent, 1);
          if(is_array($children)) {
           echo 'Id первого дочернего документа = ' . $children[0];
           // или
           foreach ($children as $child) {
            echo 'Id дочернего документа = ' . $child;
           }
          

          Второй параметр (по умолчанию = 10) данной функции определяет максимальную глубину поиска дочерних документов, т. к. используется сквозной поиск.

          В Вашем случае можно написать микро-сниппет (если такого еще нет, назовем его FirstChild):
          <?php
          $parent = isset($parent) ? $parent : $modx->documentIdentifier;
          $children= $modx->getActiveChildren($parent, 'menuindex','asc');
          return is_array($children) ? $children[0]['id'] : $parent;
          ?>
          

          В сниппет можно передавать параметр parent - id документа, для которого необходимо получить id дочернего документа. Если же parent не указан - будет использован id текущего документа.
            • 25441
            • 60 Posts
            Quote from: Yurik at Jul 08, 2009, 01:27 AM

            Можете для этой цели использовать функцию getChildIds из API:
            global $modx; // на всякий случай добовлю
            $children = $modx->getChildIds($parent, 1);
            if(is_array($children)) {
             echo 'Id первого дочернего документа = ' . $children[0];
             // или
             foreach ($children as $child) {
              echo 'Id дочернего документа = ' . $child;
             }
            

            Второй параметр (по умолчанию = 10) данной функции определяет максимальную глубину поиска дочерних документов, т. к. используется сквозной поиск.

            В Вашем случае можно написать микро-сниппет (если такого еще нет, назовем его FirstChild):
            $parent = isset($parent) ? $parent : $modx->getDocumentIdentifier;
            $children = $modx->getChildIds($parent, 1);
            return is_array($children) ? $children[0] : 0;
            

            В сниппет можно передавать параметр parent - id документа, для которого необходимо получить id дочернего документа. Если же parent не указан - будет использован id текущего документа.

            Т.е. делаю сниппет, а куда прописывать функцию?
            Потом запускаю [[FirstChild]] и он выведет?

            А может быть можно как-то вставить If?
            Т.е. заходит человек на страницу одна ссылка [*id*] (где он сейчас), а другая [*ChildID*], если зашел на ChildID.
            Первый линк [*parentID*],вторая [*id*]
              • 31136
              • 72 Posts
              В коде сниппета FirstChild выше были ошибки, я их поправил.
              Итак, если стоит задача создания ссылок на родительский документ, либо на первый дочерний относительно текущего, для этого:

              • Создайте сниппет c именем child (для большей краткости) и вставьте в него код из предыдущего моего поста
              • В шаблоне / документе используйте конструкции:
                [list]
                [li][~[*parent*]~] - для получения URL на родительский документ
              • [~[!child!]~] - для получения URL на первый дочерний документ
              [/li]
              [/list]
                • 25441
                • 60 Posts
                Quote from: Yurik at Jul 08, 2009, 06:18 AM

                В коде сниппета FirstChild выше были ошибки, я их поправил.
                Итак, если стоит задача создания ссылок на родительский документ, либо на первый дочерний относительно текущего, для этого:

                • Создайте сниппет c именем child (для большей краткости) и вставьте в него код из предыдущего моего поста
                • В шаблоне / документе используйте конструкции:
                  [list]
                  [li][~[*parent*]~] - для получения URL на родительский документ
                • [~[!child!]~] - для получения URL на первый дочерний документ
                [/li]
                [/list]

                А api-функцию никуда не вставляю?
                  • 31136
                  • 72 Posts
                  Quote from: rolph at Jul 08, 2009, 07:17 AM

                  А api-функцию никуда не вставляю?

                  Все что нужно: создать сниппет child и вставить в него код:
                  <?php
                  $parent = isset($parent) ? $parent : $modx->documentIdentifier;
                  $children= $modx->getActiveChildren($parent, 'menuindex','asc');
                  return is_array($children) ? $children[0]['id'] : $parent;
                  ?>
                  
                    • 18141
                    • 9 Posts
                    привет, подскажите, как можно переделать снипет, чтобы получить ID первого докумета на бОльшем уровне вложенности.
                    т.е. у меня есть меню:

                    уровень 1
                    уровень 2
                    уровень 3
                    уровень 4
                    документ 1
                    документ 2
                    уровень 2 (2)
                    уровень 3 (2)
                    уровень 4 (2)
                    документ 1 (2)
                    документ 2 (2)

                    и мне нужно получить id-шки первого документа находясь на любом уровне от 2-го до 4-го, как это можно сделать?
                    в php совсем не силен, к сожалению ((

                      • 897
                      • 1,620 Posts
                      вам поможет сниппет UltimateParent
                        "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                        Не используйте Revo для "просто сайтов". Используйте Evo

                        Who can defeat the Russian bear?