We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 11031
    • 11 Posts
    Здравствуйте.

    Использую MODx Revolution 2.0
    Есть папка под названием "Баннера" её id=18, там лежат картинки баннеров.
    Есть сниппет который выводит все эти баннера
    [tt][[getResources? &parents=`18` &includeContent=`1` &tpl=`BANNER-tpl`]][/tt]

    Но, есть задача выводить на страницу определенные баннера.
    Для этого создан tv (listbox multi-select) под названием "Banner" который выбирает список всех баннеров:
    [tt]@SELECT `pagetitle` FROM `modx_site_content` WHERE `parent` = 18[/tt]

    И затем в настройках каждой страницы я выбираю какие баннера показывать.
    Но как переделать getResources что бы он этот фильтр понимал я не пойму, подскажите пожалуйста.

    В моём понимании должно быть, что то такое:
    [tt][[getResources? &parents=`18` &includeContent=`1` &tvFilters=`Banner` &tpl=`BANNER-tpl`]][/tt]
    Пробовал также вот такие варианты:
    [tt][[getResources? &parents=`18` &includeContent=`1` &tvFilters=`Banner==%` &tpl=`BANNER-tpl`]][/tt]
    [tt][[getResources? &parents=`18` &includeContent=`1` &includeTVs=`1` &tvFilters=`Banner==%` &tpl=`BANNER-tpl`]][/tt]
    [tt][[getResources? &parents=`18` &includeContent=`1` &includeTVs=`1` &processTVs=`1` &tvFilters=`Banner==%` &tpl=`BANNER-tpl`]][/tt]

    Есть подозрение, что неправильно написал выборку параметров для tv, но по другому пока, что не придумал.
    Наверно стоит использовать @EVAL и состоить консрукцию вида:
    баннер1==id||баннер2==id
      • 11031
      • 11 Posts
      Quote from: gofrolist at Jul 27, 2010, 03:05 PM

      Для этого создан tv (listbox multi-select) под названием "Banner" который выбирает список всех баннеров:
      [tt]@SELECT `pagetitle` FROM `modx_site_content` WHERE `parent` = 18[/tt]

      Есть подозрение, что неправильно написал выборку параметров для tv, но по другому пока, что не придумал.
      Наверно стоит использовать @EVAL и состоить консрукцию вида:
      баннер1==id||баннер2==id

      Состряпал вот такой SELECT, обошлось даже без EVAL
      [tt]@SELECT GROUP_CONCAT(CONCAT(pagetitle, ’==’, id) SEPARATOR ’||’) FROM modx_site_content WHERE parent = 18[/tt]

      Но фильтр все равно не работает.
        • 11031
        • 11 Posts
        Выяснил, что в getResources есть недокументированная функция &where в которой можно писать SQL запросы вида:
        &where=`{{"alias:LIKE":"foo%", "OR:alias:LIKE":"%bar"},{"OR:pagetitle:=":"foobar", "AND:description:=":"raboof"}}`


        В коде самого getResources нашел SELECT от функции tvFilters, но подобный я не смог воспроизвести.
        SELECT 1 FROM {$tmplVarResourceTbl} `tvr` JOIN {$tmplVarTbl} `tv` ON `tvr`.`value` LIKE {$tvValue} AND `tv`.`name` = {$tvName} AND `tv`.`id` = `tvr`.`tmplvarid` WHERE `tvr`.`contentid` = `modResource`.`id`);
          • 11031
          • 11 Posts
          Quote from: gofrolist at Aug 05, 2010, 03:43 PM

          Выяснил, что в getResources есть недокументированная функция &where в которой можно писать SQL запросы вида:
          &where=`{{"alias:LIKE":"foo%", "OR:alias:LIKE":"%bar"},{"OR:pagetitle:=":"foobar", "AND:description:=":"raboof"}}`


          Сделал временное решение через жуткие костыли:
          &where=`{"id:=":"[[*Banner:limit=`2`]]", "OR:id:=":"[[*Banner:stripString=`[[*Banner:limit=`2`]]`]]"}`


          Поясню как это работает.
          Проверил вывод TV параметра на странице следующим способом: [tt][[*Banner]][/tt]
          На экране получаем 2122 (к примеру если в TV выбраны два баннера с id 21 и 22), а БД эта запись видна как 21||22.
          Поэтому непонятно как разделить эти два разряда простым способом, пришлось извращаться такой структурой:
          [tt][[*Banner:limit=`2`]][/tt] - получаем первые две цифры (он же id первого баннера)
          [tt][[*Banner:stripString=`[[*Banner:limit=`2`]]`]][/tt] - отрезаем эти две цифры из общего массива

          Схема жутко кривая, тормозная и не универсальная. Поэтому вопрос остается открытым: Как фильтровать документы на основе TV параметров?
            • 1061
            • 81 Posts
            1. Так и не понял зачем тебе этот снипет, тебе же надо некоторые баннера а не все:
            Есть сниппет который выводит все эти баннера
            [[getResources? &parents=`18` &includeContent=`1` &tpl=`BANNER-tpl`]]

            2. Что находится внутри чанка - ’BANNER-tpl’?
              • 11031
              • 11 Posts
              Quote from: alex_dutch at Aug 29, 2010, 05:21 PM

              1. Так и не понял зачем тебе этот снипет, тебе же надо некоторые баннера а не все:
              [[getResources? &parents=`18` &includeContent=`1` &tpl=`BANNER-tpl`]]

              2. Что находится внутри чанка - ’BANNER-tpl’?

              1. Этот сниппет выводит все баннера, так и есть. И моя задача прикрутить к нему фильтр по какому нибудь параметру. В первом сообщении ниже по тексту описаны мои попытки прикрутить фильтр.

              2. Внутри чанка BANNER-tpl находится:
              [[+content]]
              
                • 38484
                • 1 Posts
                Есть такой тип вывода в TV "разделитель", указывается он вводится вид разделителя к примеру " " далее в сниппете выводится результат.
                $ar_banners = explode(' ',$banners);
                $ar_banners = array_unique($ar_banners);
                $rand_key = array_rand($ar_banners);
                $output = $modx->getChunk($ar_banners[$rand_key]);
                return $output;