We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17459
    • 268 Posts
    Добрый день!

    Мне потребовалось сделать доп менюшку для каждой странички.

    Я сделал TV [*optionalmenu*], листбокс мультиселект.
    @EVAL $result = $modx->db->select("id, pagetitle", "modx_site_content"); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $output .= $line[’pagetitle’]."==".$line[’id’]."||"; } return $output;

    Я подключил сниппет [[optionalmenu]] в шаблон документа:
    [[optionalmenu? &optionalmenu=[*optionalmenu*]]]

    Я сделал чанк {{optionalmenu}}:
    <li><a href="[~[+id+]~]">[+menutitle+]</a></li>

    Теперь я делаю сам сниппет [[optionalmenu]]:
    <?php
    if (isset($optionalmenu)) {
    $output .= "<ul>";
    $output .= $optionalmenu; // тест
    $output .= "</ul>";
    }
    return $output;
    ?>

    Он у меня выводит, например:
    <ul>10,12,14</ul>

    Вопрос такой:
    как мне заставить сниппет подгружать чанк для каждого ид, подставлять туда всё как надо и делать линку?
    то есть я хочу получить такой результат:
    <ul><li><a href="линка на док с ид=10">имя в меню для ид=10</a></li><li><a href="линка на док с ид=12">имя в меню для ид=12</a></li><li><a href="линка на док с ид=14">имя в меню для ид=14</a></li></ul>

    Спасибо!
      • 897
      • 1,620 Posts
      может не стоит изобретать велосипед?

      я думаю вам подойдет Wayfinder
        "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

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

        Who can defeat the Russian bear?
        • 33694
        • 742 Posts
        Кажется мне, вашу задачу можно решить гораздо проще... но т.к. её вы не озвучили, то будем делать по традиции — через жопу:

        Вот подсказка, мальнький сниппет выводящий ссылку на указанный в параметре &docid=`id документа`.
        <?php
        $output = '';
        
        if (isset($docid)) 
        {
          global $modx;
        
          $url = $modx->makeUrl($docid);
          $doc = $modx->getPageInfo($docid, 'menutitle');
        
          $output .= "<li><a href=\"$url\">$doc['menutitle']</a></li>"; 
        }
        
        return $output;
        ?>
        



        ... но думаю это всё равно ни к чему не приведёт.
          • 17459
          • 268 Posts
          спасибо за совет про wayfinder, но я что-то с ним не особо разобрался...

          мне нужно сделать очень и очень простую вещь, я подумал, что проще это сделать самому, а не через большой и навороченный скрипт.

          моя цель, вообщем-то, думал, будет понятна: сделать менюшку а-ля "Смотрите также...".
          То есть надо дать возможность для каждой страничке делать через админку ссылки на любые другие странички на этом сайте.

          Первую часть задачи я сделал: в админке есть TV, он сохраняет ID страничек, на которые надо сделать ссылки.

          Вторая часть задачи - вывести ссылки.

          Я знаю, как это сделать через php без чанков с помощью makeUrl и getPageInfo, вопрос-то в другом: как сделать это через чанки.

          То есть что такое чанк? Это шаблон. Вот как мне через сниппет подставить в этот шаблон нужные мне переменные и вернуть в сниппет результат?

          сниппет должен работать так:

          ===
          получаю список ID
          для каждого ID делать
          получить $имя
          аутпут .= подставить $имя и $id в чанк и вернуть результат
          ===

          я умею делать всё кроме последней строчки, я бы хотел отделить дизайн от кода, то есть html запихать в чанки.

          я знаю решение моей задачи: через SELECT залезть в БД и получить переменную содержимое чанка, потом заменить там [+name+] на $имя и [+id+] на ID. Я думаю, что должна быть аналогичная функция. Есть такая?

          Я бы хотел воспользоваться этой функцией, вставить_чанк(имя_чанка), которая бы вместо каждого [+smth+] в чанке имя_чанка подставляла бы значение переменной $smth и выводила результат. Если такой переменной нет, то вместо [+smth+] подставляла бы пусто.

          Есть ли в ModX такая функция и можно ли как-то её написать? Чтобы её можно было использовать из любого сниппета.

          Мне было бы это очень удобно, не хочу напрягать своего дизайнералазить по моим сниппетам в поисках html-хода.
            • 17459
            • 268 Posts
            Что-то начинаю думать, что такой функции нет sad

            Поэтому спрошу, в какой конкретно файл мне надо дописать мою функцию, чтобы её можно былоиспользовать из всех сниппетов?
              • 897
              • 1,620 Posts
              посмотрите
              getChunk()
              parseChunk()

              для того чтобы понять как работать с чанками программно посмотрите код того же wayfinder или ditto
                "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

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

                Who can defeat the Russian bear?
                • 17459
                • 268 Posts
                http://wiki.modxcms.com/index.php/API:parseChunk
                Большое спасибо, как раз то, что я искал.

                Плохо только, что всё в разных местах у них. В документации на modxcms.com такой функции и не было нигде.