We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12710
    • 132 Posts
    Там ничего сложного нету. Почти все моменты уже обсуждались в разделах Дитто и Вайфиндера. А также хорошо описано в доке
      Человек может все, главное захотеть
      http://vigmarket.com
      • 26709
      • 4 Posts
      Quote from: Kollad at Dec 21, 2009, 08:37 AM

      Подскажите как можно реализовать следующую функцию(возможность)

      Начну сначала:

      У меня есть товары(Товар, Товар2, Товар3 ... ТоварN)
      И у каждого из них брэнд(TV Параметр, или пишется текстом, или конечно же лучше выпадающий список(который я задал ранее)) (кстати подскажите как это лучше сделать, где копать) - Бренд1, Бренд2, Бренд 3 ... БрендN

      Зачем это нужно? - Добавить в меню навигации, допустим слева, блок Бренды, там выводятся бренды тех товаров, которые я добавил(и если можно количество товаров - *брендN (n)* c этим брендом), и при нажатии на бренд в этом меню, показывается товары только этого бренда(так же, если возможно, чтобы показывалась категория товара, к которой он относится, если сложно, хотябы подскажите чтобы показывались товары этого бренда, а я уже сам попробую добавить чтобы выводилась категория(поскольку сниппет каталога использовал этот h t t p://h88 . ru/modx/dokumentaciya/katalog-na-cms-modx.html *ditto + phx*)

      Надеюсь понятно обьяснил суть вопроса!

      Вот такое? http://zaotl.ru/ Справа список брендов
        • 7368
        • 264 Posts
        @Serg24

        Не совсем. То есть у меня есть список брендов (автоматически берется из TV - brand, или вбивается вручную). Справа/слева есть этот список в виде ссылок, и при нажатии на него, выдается товар с моего каталога(на Ditto) только с тем параметром TV - по которому я нажал ссылку.

        Например.

        У меня есть 2 товара с brand = brand_1, и 4 товара с brand = brand_2. Допустим слева создается менюшка со списком
        brand_1
        brand_2
        При нажатии на brand_1, показываются только 2 товара, у которых TV параметр brand = brand_1. Соответственно так же и для brand_2!

        Вот еще не знаю как быть с выводом самой меню брендов. Желательно конечно, чтобы она автоматически генерировалась с теми параметрами TV brand, которые есть у товаров для каждой под-категории. То есть если я добавил новый товар, и добавил ему brand = brand_3, и мне не приходилось редактировать меню фильтра по брендам, и добавлять вручную ссылку на brand_3, а она добавлялась туда сама, предварительно просмотрев все товары этой категории (Категория - контейнер, товары - дочерние ресурсы с различными TV параметрами, в том числе и brand)

        Вроде понятно расписал(:

        Вот рабочий пример http://www.vsedveri.ru/
        Справа есть выборка параметров, с кнопкой "Подобрать" по TV параметрам. (прочитал на Хабре, что там используется tvEditor, кто знаком с этим, я так понимаю сниппетом)
        Делаем поиск по множественным TV @ habrahabr

        Только мне надо немножко другая схема. То есть у меня сразу слева выводится список параметров, и при нажатии на ссылку переходит на страницу с документами, в которых есть этот параметр TV(!)
          • 12710
          • 132 Posts
          http://modxcms.com/forums/index.php/topic,10292.msg109914.html#msg109914

          Если не ошибаюсь то это ваше решение
            Человек может все, главное захотеть
            http://vigmarket.com
            • 7368
            • 264 Posts
            Да!Это оно, спасибо!(: Решение помогло, получилось прикрутить фильтрование, оказалось очень просто(: Начинаю влюбляться в MODx все больше и больше(:

            [[Ditto? &startID=`13` &depth=`3` &filter=`brand,brand1,1` &summarize=`10` &tpl=`shopStuff` &paginate=`1`]]
            
            &startID=`13` - ID моего документа, откуда начинается каталог
            &depth=`3` - глубина поиска в подкаталогах
            &filter=`brand, brand1, 1` - понятно (поле TV по которому искать,значение этого поля,1)
            1 - исключать все документы, в которых brand не равно brand1 - то есть выбирать только с brand1
            &summarize=`10` - количество выводимых на странице результатов
            &paginate=`1` - добавлять навигацию по страницам, если больше результатов чем в &summarize
            &tpl=`shopStuff` - шаблон вывода
            


            Вот, может кому-то пригодится, постарался объяснить каждый параметр вызова!

            Список брендов у меня содержится в отдельном контейнере, в котором каждый отдельный ресурс - это отдельный бренд, а TV параметр брендов я задаю в dropdown list menu возможные значение.
            То есть при добавлении нового бренда, нужно будет -
            1. Добавить в TV параметр brand, возможное значение brand_N,
            2. В контейнере (у меня brands.html) добавить новый дочерний ресурс (с любым названием - !конечно же лучше с названием бренда!) допустим new_brand.html
            3. Добавить вызов Ditto? &filter=`brand,new_brand,1` в new_brand.html

            В этом вся сложность моего решения(:
            Пока придумалось такое, более динамичного пока нету(:
            Та и в принципе, нету в этом смысла, поскольку я думаю что брендов огромное количество не будет, даже если 10-20, то это совсем немного.

            Есть "+" этого решения, на странице бренда (например brand1.html), вначале страницы можно добавить описание бренда, картинку и тд. И уже после этого выводить список товара этого бренда(:

            Можно добавлять описание и вызов в [*content*] страницы, а можно вынести в отдельный шаблон для страницы бренда - например catalog-brand, и в нем делаем примерно так
            <body>
            [[Ditto? &startID=`13` &depth=`3` &filter=`brand,brand1,1` &summarize=`10` &tpl=`shopStuff` &paginate=`1`]]
            [*content*]
            </body>

            Вызов ditto и content можно менять местами, то есть настраивать вывод как Вам удобнее!

            Вызов в общем шаблоне такой

            [[Ditto? &startID=`28` &tpl=`brandLinks`]]

            Это уже не первый вызов Ditto в общем шаблоне(какие могут быть нюансы и проблемы с двойным вызовом, или даже с многократным)

            chunk : brandLinks
            <span><a href="[(site_url)][~[+id+]~]">[+pagetitle+]</a></span>
              • 7368
              • 264 Posts
              И еще вопросик, как с помощью Ditto сделать вызов, чтобы выбирались только документы, которые не контейнеры?

              Зачем это надо?

              У меня есть такая структура

              -Категория 1
              --Под-категория 1
              ---Товар 1
              ---Товар 2
              --Под-категория 2
              ---Товар 1
              ---Товар 2

              Мне надо, чтобы когда я захожу в "Категорию 1", у меня сначала показывается список под-категорий (это реализовано), а ниже список всех товаров (не контейнер) в этой КАТЕГОРИИ!, то есть брались товары из под-категории 1 и под-категории 2, и дальше нажимаю, допустим под-категорию 1 - и выдаются товары только с этой под-категории. И дальше по аналогии.

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

              Подскажите хотя бы идею вывода всех НЕ Контейнеров данного контейнера(простите за сумбурность(: ), а дальше я уже по принципу работы каталога прикручу вывод товаров(:

              Спасиб(:
                • 12710
                • 132 Posts
                depth

                Число уровней в глубину для поиска документов. Документы будут найдены внутри документов-контейнеров, указанных в &startID и &parents и вложенных документов-контейнеров до уровня указанного в &depth. Т.е. если этот параметр равен 1, то будут брать только непосредственно дочерние документы, указанных в &startID и &parents. Если &depth = 2, в поиск пройдет еще и в дочерних.

                hideFolders


                Значения:
                0 - оставить папки
                1 - исключить папки


                рабочий пример
                [!Ditto? &startID=`2`&tpl=`vitrina` &depth=`7` &hideFolders=`1`&randomize=`1`&paginate=`1` &summarize=`6`]
                  Человек может все, главное захотеть
                  http://vigmarket.com
                  • 7368
                  • 264 Posts
                  Спасибо igor_belousov, но я уже нашел другой способ(:

                  Вывод для общего каталога(только категории) - вписал в общем шаблоне - catalog

                  [*isfolder:is=`1`:then=`
                  <div class="catalog">[!Ditto? id=`cat[*id*]` &parent=`[*id*]` &display=`all` &tpl=`catalog_tpl` &filter=`isfolder,1,1` &noResults=`{{ditto_empty}}` &sortBy=`menuindex` &sortDir=`ASC`!]</div>
                  
                  `*]


                  Вывод уже для категорий(есть под-категории и товары) - вписал в общем шаблоне - subcatalog - и выставил его для всех категорий внутри контейнера catalogue(мой каталог)

                  [*isfolder:is=`1`:then=`
                  <div class="catalog">[!Ditto? id=`cat[*id*]` &parent=`[*id*]` &display=`all` &tpl=`catalog_tpl` &filter=`isfolder,1,1` &noResults=`{{ditto_empty}}` &sortBy=`menuindex` &sortDir=`ASC`!]</div>
                  
                  <div class="catdocs">
                  [!Ditto? id=`doc[*id*]` &parent=`[*id*]` &paginate=`1` &display=`all` &tpl=`catalog_content_tpl` &filter=`isfolder,1,2` &noResults=`{{ditto_empty}}` &sortBy=`menuindex` &sortDir=`ASC`!]
                  </div>
                  `*]


                  PS Люблю MODx!! grin
                    • 7368
                    • 264 Posts
                    Вот по-прежнему борюсь с брендами, что бы они автоматически добавлялись в фильтры. Как я понял, нужно для этого писать сниппет. Ничего, буду старатся(:

                    Код моего сниппета:

                    <?php
                    $brands = $modx->getDocumentChildrenTVarOutput($parentid= 23, $tvidnames= array ('brand'), $published= 1, $docsort= "menuindex", $docsortdir= "ASC", $tvfields= "*", $tvsort= "brand", $tvsortdir= "ASC");
                    
                    print_r($brands);
                    ?>


                    На странице выводится следующее содержание

                    Array 
                    ( 
                    [24] => Array ( [brand] => brand1 ) 
                    [26] => Array ( [brand] => brand2 ) 
                    )
                    


                    То есть получается я сканирую все документы в контейнере, в котором есть 2 дочерних документа(не контейнера) на TV параметр = brand, и мне выводится список:

                    ID страница - и параметр TV brand

                    В принципе, примерно то что нужно. НО!

                    1) Если у двух товаров один и тот же brand, то результат будет
                    ...
                    [24] => Array ( [brand] => brand1 ) 
                    [26] => Array ( [brand] => brand1 ) 
                    ...
                    


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


                    Надо чтобы когда вывожу этот список, бренды не дублировались в выводе, а в скобках писалось их количество

                    Бренды:
                    - brand1 (2)
                    - brand2 (0)


                    или если запрос выведет

                    ...
                    [24] => Array ( [brand] => brand1 ) 
                    [26] => Array ( [brand] => brand2 ) 
                    ...
                    


                    Бренды:
                    - brand1 (1)
                    - brand2 (1)


                    Примечание: Было бы хорошо, чтобы не выводилась строка, в которой количество брендов = 0

                    2) Структура каталога следующая

                    -Категория 1 (13)
                    --Под-категория 1 (14)
                    ---Товар 1 (15)
                    ---Товар 2 (16)
                    --Под-категория 2 (17)
                    ---Товар 1 (18)
                    ---Товар 2 (19)


                    Если в коде моего сниппета вызывать

                    <?php
                    $brands = $modx->getDocumentChildrenTVarOutput($parentid = 14, $tvidnames= array ('brand'), $published= 1, $docsort= "menuindex", $docsortdir= "ASC", $tvfields= "*", $tvsort= "brand", $tvsortdir= "ASC");
                    
                    print_r($brands);
                    ?>


                    То результатом будет 2 товара (15,16)

                    Если $parentid=`17`
                    То соответственно (18,19)

                    НО! Если я пишу $parentid=`13`, то есть хочу выбрать все документы, из данного контейнера, в которых есть подкаталоги, а уже в которых содержатся товары с брендами, то ничего не получается. Результат
                    Array ( [14] => Array ( [brand] => ) )
                    


                    14 - это ID документа, дочернего к 13му, который сразу следует за документом. Ну в принципе из структуры это понятно.

                    Подскажите, пожалуйста
                    1) Как мне расширить сниппет, каким образом можно отсортировать массив нужным мне образом(описал выше)
                    2) Как получить значение TV параметра всех ресурсов, содержащихся в контейнере(например ID=13)

                    Спасибо(:
                      • 26564
                      • 162 Posts
                      А чего с брендами бороться?
                      Делаешь под каждый бренд свою страницу namebrend.html (для seo пользы дела) и делаешь вызов

                      [[Ditto? &startID=`4974` &language=`russian-UTF8` &summarize=`10`  &paginate=`1` &paginateAlwaysShowLinks=`1` &hideFolders=`1` &tpl=`shopStuff` &tagData=`brand` &tagMode=`onlyTags` &tags=`Искомый бренд` &tagDelimiter=`,` ]]

                      И так на каждой странице, меняешь только &tags=`Искомый бренд`.

                      А в шаблоне один раз прописал ссылки типа такой-то бренд на эти страницы и все дела.