We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7419
    • 13 Posts
    Сниппет самописный. С параметрами.

    Это работает: [[сниппет? &параметр=`1`]]
    Это не работает: [!сниппет? &параметр=`1`!]

    Где логика? Где здравый смысл?
    Или это я туплю?

    Кто-нибудь может объяснить, почему некэшируемый сниппет с параметрами не работает?
      Кто умеет - делает.
      Кто не умеет - учит.
    • Обычно работает и так, и так. Сниппет покажите, может там что-то намудрили.
        Разработка сайтов и программных модулей на MODX.
        Опыт работы на MODx с 2005 года. Высокое качество.
        Компания Baltic Design Colors: http://www.bdcolors.ru.
        • 7419
        • 13 Posts
        Снипет самописный. Всего это две строки кода grin
        <?php
        include_once("./manager/new/list_content.php");
        
        return $result;
        ?>



        Содержимое list_content.php:
        <?PHP
        $startId=isset($startId) ? $startId : $modx->documentIdentifier;
        $cols=intval($cols)>0?$cols:1;
        
        if (intval($_POST["selectedStar"])>0){
        	$where.=" AND doc.stars=".$_POST["selectedStar"];
        }
        if (intval($_POST["priceMore"])>0){
        	$where.=" AND doc.price>".$_POST["priceMore"];
        }
        if (intval($_POST["priceLess"])>0){
        	$where.=" AND doc.price<".$_POST["priceLess"];
        }
        
        
        
        $sql="SELECT DISTINCT sc.id,sc.introtext,sc.menutitle,doc.adr,doc.stars,doc.price FROM modx_site_content sc
        LEFT JOIN dn_docs AS doc ON doc.id = sc.id
        WHERE sc.parent = '{$startId}' AND sc.deleted=0 AND (sc.privateweb=0)".$where."
        GROUP BY sc.id ORDER BY sc.pagetitle
        LIMIT 5";
        
        
        //$result=$sql;
        $rs=$modx->db->query($sql);
        $max_row_in_col=ceil(mysql_num_rows($rs)/$cols);
        
        $n=$r=0;
        while ($row = $modx->db->getRow($rs)) {
        	$r++;
        	$n=$max_row_in_col<$r?$n+1:$n;
        	$rez[$n].="<p><img src='css/.png'/><img src='css/{$row['stars']}stars.png'/><a href='[~".$row['id']."~]'>{$row['menutitle']}</a></p>";
        }
        
        for ($n=0;$n<$cols;$n++){
        	$result.="<div class='col".$cols."'>".$rez[$n]."</div>\n";
        }
        
        ?>
        



        Нужно дополнительно обозначить параметры вызова сниппета, для того чтобы он закешировался? А как?
          Кто умеет - делает.
          Кто не умеет - учит.
          • 1788
          • 1,103 Posts
          Зачем инклудить то, что можно хранить в базе?
            • 7419
            • 13 Posts
            Так удобнее редактировать.

            Кстати сам принцип хранения кода в базе ошибочен. На мой взгляд в базе данных должны быть именно данные, а не код.
              Кто умеет - делает.
              Кто не умеет - учит.
              • 1788
              • 1,103 Posts
              Quote from: dim.nov at Dec 03, 2009, 02:25 PM

              Так удобнее редактировать.

              Кстати сам принцип хранения кода в базе ошибочен. На мой взгляд в базе данных должны быть именно данные, а не код.
              Вы все равно вызываете свой скрипт кодом, который хранится в базе smiley
                • 7419
                • 13 Posts
                Quote from: antey at Dec 03, 2009, 06:11 PM

                Вы все равно вызываете свой скрипт кодом, который хранится в базе smiley
                Вы очень наблюдательны. Суть в том, что даже поставив EditArea в админку МОДХа, я не получил желаемого уровня удобства разработки, поэтому использую внешний файл. Позже, когда закончу работу над этим сниппетом, я волью его код в базу, а сам файл удалю и забуду о нем.

                Но мы отклонилисьот темы, а мне все-таки хотелось бы получить ответ на заданный в первом посте вопрос о кэшировании, а обсуждение применяемых методик разработки вынести за рамки этой темы и отложить до лучших времен.
                  Кто умеет - делает.
                  Кто не умеет - учит.
                  • 1788
                  • 1,103 Posts
                  Кешируется только скрипт из базы.
                    • 785
                    • 2,113 Posts
                    Вопрос поставлен некорректно. Что такое «Это не работает»? Вариантов может быть много – не подключается внешний файл, вообще не начинает выполняться сниппет, все работает, но не выдается нужный результат и так далее. Для выявления симптомов требуется дополнительное тестирование, а без этого можно только ответить в такой же манере «Не работает, так как неправильно сделано».
                      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                      Статьи о MODx, регулярно новые публикации
                      • 7419
                      • 13 Posts
                      Quote from: AKots at Dec 04, 2009, 03:45 AM

                      Вопрос поставлен некорректно. Что такое «Это не работает»? Вариантов может быть много – не подключается внешний файл, вообще не начинает выполняться сниппет, все работает, но не выдается нужный результат и так далее. Для выявления симптомов требуется дополнительное тестирование, а без этого можно только ответить в такой же манере «Не работает, так как неправильно сделано».

                      Любой вопрос покажется некорректным тому, кто его не понимает. Специально для Вас поясню что мы имеем:
                      1. Есть некий сниппет который работает и если его вызывать так:[[сниппет]] И если так:[!сниппет!]
                      2. Добавляем параметр в строку вызова сниппета. В результате это работает [[сниппет? &параметр=`1`]], а это не работает: [!сниппет? &параметр=`1`!]

                      Фраза "не работает" применена очень даже кстати, так как если данный сниппет работает, он возвращает данные. Здесь же он никаких данных не возвращает, значит он не работает. Но суть не в этом! Суть вопроса в том, что результат работы меняется в зависимости от формы вызова сниппета!

                      Так вот вопрос: Почему, при прочих равных (сниппет один и тот же, параметр один и тот же, данные одни и те же), кэшируемый сниппет работает, а некэшируемый не работает? Почему такое происходит?

                      Кэш чистил, поэтому сразу скажу, что проблема не в кэше.
                        Кто умеет - делает.
                        Кто не умеет - учит.

                      This discussion is closed to further replies. Keep calm and carry on.