We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17459
    • 268 Posts
    Задача: вызов двух случайных документов. (отзывы клиентов)

    Сделал дитту, написал сниппет, который возвращает два случаных ид.

    <?php
    $resource = $modx->getDocumentChildren($folder, 1, 0, ’id’);
    $random = (rand(1, count($resource)) - 1);
    $random2 = $random;
    while ($random2 == $random) {$random2 = (rand(1, count($resource)) - 1);}
    $output = $resource[$random][’id’].",".$resource[$random2][’id’];
    return $output;
    ?>

    если я его вызываю [!random? &folder=`32`!] то он мне возращает всё как надо...

    если я его сую в дитту... [!Ditto? &documents=`[[random? &folder=`32`]]` &depth=`1` &display=`2` &showInMenuOnly=`1` &tpl=`ditto_otz` !]

    то всегда вижу одно и то же... кэширование с самой страницы я снял... кэширование с [[random? &folder=`32`]] снять не получается, он выдаёт ошибку.

    Как быть? Как мне заставить дитту работать с моим сниппетом?

    Или подскажите ещё варианты... (в чанке дитты три поля, интротекст, пэджтитл, лонгтитл и картинка TV)
      • 17459
      • 268 Posts
      То есть если нажать на Обновить то всё ок... А хочется, чтобы работало и без этого нормально
        • 33694
        • 742 Posts
        Попробуйте через evalSnippet самостоятельно запускать Ditto с нужными параметрами. Или там обязательно нужно прозрачность соблюсти?


        P.S. К слову говоря, вместо evalSnippet можно ещё использовать упрощённый (кустарный) способ самостоятельного запуска сниппетов. Простота этого метода заключается в отсутствии необходимости подготавливать порой довольно громоздкие массивы для передачи запускаемому сниппету кучи параметров, часть которых никогда не меняется. Вместо этого, в заранее подготавленных переменных передаются только изменяющиеся (динамические) параметры. Вообщем, тупо делается:
        <?php
        ...
        $value1 = getRandomItem();
        echo '[!Ditto? &documents=`' .$value1. '` &depth=`1` &display=`' .$value2. '` &showInMenuOnly=`1` &tpl=`ditto_otz`!]';
        ?>
          • 897
          • 1,620 Posts
          а все из-за того что не читаете документацию!

          http://ditto.modxcms.com/files/snippet-ditto-php.html#randomize

          p.s. наверно надо экзамены или зачеты вводить smiley
            "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
            [e]Bu$ter, Алексей, спасибо. +rep Действительно, мне стоило бы сначала проверить наличие встроенного в дитту функционала под мои задачи прежде чем писать самому...

            Но вообще, мне не оч нравится этот момент в ModX... я думаю, в новых версиях что-то изменится... чтобы можно было [!!] в [!!] запускать...

            А пока приходится выкручиваться такими способами...

            В названии топика про рэндомность ничего нет не случайно... Вопрос скорее носит общий характер, эти ид могли получаться не случайно, а по какому-нибудь хитрому алгоритму, которого в дитто нет... другие параметры тоже могут генерироваться на лету...
              • 33694
              • 742 Posts
              Ну а я знал про это параметр, но проигнорировал его, т.к. с его помощью можно только косвенно получить желаемый результат. Насколько я понял, там просото перетусовывается вывод (а запрашивается он стандартным способом). Ну и как тут рендомный item получить?
              Конечно можно запросить 30 документов, перетусовать их (с помощью randomize=`1`), и вывести одни-два оказавшихся сверху. Но это, по моему, сверх иррациоально.


              P.S. Напомнило кое что. У меня в плеере старого телефона на ряду со стандартным способом воспроизведения композиций — по порядку, был предусмотрен режим случайного воспроизведений — т.н. shuffle. Его реализация свалила меня с ног: при активации этого режима, загруженный список копозиций перетасовывался и играл дальше как обычный (по порядку).
                • 17459
                • 268 Posts
                Мне нужно вывести два случайных неповторяющихся отзыва... В данном случае через средства дитто будет работать?.. Или он может два одинаковых вывести?..
                  • 897
                  • 1,620 Posts
                  будет работать
                    "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
                    [!Ditto? &parents=`32` &depth=`1` &display=`2` &randomize=`1` &showInMenuOnly=`1` &tpl=`ditto_otz` !]

                    Написал вот так... вообще, разницы не увидел... когда я перехожу по ссылкам на главную всегда то же самое пока не нажму Обновить sad
                      • 19164
                      • 1,215 Posts
                      Может вся проблема в том что браузер кеширует? Очень уж на это похоже. Не оперой случаем, пользуешься?
                        DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

                        Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

                        [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]