We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 31688
    • 85 Posts
    Привет всем

    Создаю свой первый сниппет в связке с модулем. В целом все получилось, но затормозился на некоторых операциях. Такие вопросы:
    1. как создать плейсхолдеры для сниппета? Например есть у меня параметр в базе данных $data["name"] сделать бы [+name+]
    2. как вывести из сниппета код html в чанк. То есть сделать настройку типа &tpl=`чанк`. А то у меня весь визуальный код в самом сниппете выведен через echo

    Подскажите пожалуйста как это можно сделать или где про это почитать.

    Заранее спасибо!
      • 7033
      • 12 Posts
      Как-то так:
      <?php
      $modx->setPlaceholder("name", $data["name"]);
      $output = $modx->getChunk($tpl);
      return $output;
      ?>

      Чанк {{test}}
      <p>[+name+]</p>

      [!test? &tpl=`test`!]
        • 31688
        • 85 Posts
        2Den1s

        Супер! спасибо smiley
        Вроде получается, но не совсем полноценно.
        То есть сниппет работает, выводит данные из чанка test и отображает плейсхолдеры все. Но только у самой первой строки таблице в базе, а остальные не показывает.
        Либо, если закинуть визуальную часть из чанка обратно в сниппет, но с плейсхолдерами, выводит количество верное по строкам, но данные опять из одной строки - теперь только из последней.

        Что бы понятнее было напишу так:
        Допустим у меня база данных по клубам. Я ввел три клуба (три строки таблицы) с такими параметрами - id, название клуба, категория, описание.
        Сделал 4 плейсхолдера id, название клуба, категория, описание.
        Сделал нужный чанк - test - там в коде вставил созданные плейсхолдеры. Как то так:
        <h2>[+name+] <span style="color: #666; font-size: 10pt;">([+id+])</span></h2>
        <p>[+category+]
        <br><br>
        [+description+]
        </p>


        Теперь при вызове сниппета
        [!сниппет? &tpl=`test`!]
        у меня отображаются данные только одного клуба - самого первого.

        Что-то еще, я так понимаю, нужно дописать - но не понимаю что. Ведь когда все визуальные данные были в самом сниппете - выводились все данные.

        Плиз, хелп! Я делаю сниппет который выложу для всех. На мой взгляд он очень актуален, но вот мне чуток знаний не хватает чтобы сделать удобным для общественного пользования.
          • 7033
          • 12 Posts
          Вот так выводит
          <?php
          $names = array (array ("id" => "001", "name" => "Denis", "category" => "Trance", "description" => "Desc"), 
                          array ("id" => "002", "name" => "Boris", "category" => "Drum", "description" => "Desc"), 
                          array ("id" => "003", "name" => "Vasia", "category" => "Goa", "description" => "Fuck"));
          
          
          
          $modx->setPlaceholder("id", $names["0"]["id"]);
          $modx->setPlaceholder("name", $names["0"]["name"]);
          $modx->setPlaceholder("category", $names["2"]["category"]);
          $modx->setPlaceholder("description", $names["2"]["description"]);
          $output = $modx->getChunk($tpl);
          return $output;
          ?>
          Вы наверно чанк пытаетесь вывести в цикле, но так видимо нельзя, ну покрайней мере у мня выводилась первая запсь три раза, т.е. в чанке плейсхолдеры не обновлялись.
            • 44255
            • 2 Posts
            Что то я не понял последнего сообщения...(
            Как сделать чтобы сниппет через чанк выводил все записи huh
            Вот мой код:
            <?php
            $date_news = '21-06-2013'; // Полученное значение из календаря
            $date_news = strtotime($date_news);
            $n = 5;
            $date_news = substr($date_news, 0, $n);
            $date_news1 = $date_news . "00000";
            $date_news2 = $date_news . "99999";
            $res = $modx->db->query("SELECT * FROM `modx_site_content` WHERE createdon > '$date_news1' AND createdon < '$date_news2' AND parent = 171"); // Запрос к базе данных
            $r = $modx->db->getRow($res); // Заносим в массив полученные данные
            $link = "<a href=" . "/novosti_kompanii/" . $r['alias'] . ".html" . ">" . "Подробнее..." . "</a>"; // Вид ссылки
            $modx->setPlaceholder("title", $r['pagetitle']) // Название новости - плейсхолдер [+title+];
            $modx->setPlaceholder("description", $r['introtext']) // Краткое описание новости - плейсхолдер [+description+];
            $modx->setPlaceholder("link", $link) // Ссылка на полную новость - плейсхолдер [+link+];
            $output = $modx->getChunk($tpl); // Делаем подключение чанков
            return $output;
            /* Вывод в самом сниппете
            if($r > 0){
                    do{
                       echo "<h2>" . "<a href=" . "/novosti_kompanii/" . $r['alias'] . ".html" . ">" . $r['pagetitle'] . "</a>" . "</h2>" . "<br />";
                       echo "Краткое описание - " . $r['introtext'] . "<br />";
            }
                    while($r = $modx->db->getRow($res));
            }
            else{
               echo "Записей нет";
            }
            ?>
            */


            пишет что в 12 строке, где я обьявляю плейсхолдер синтаксическая ошибка...