Получить модификации опции в pdoResources

Добрый день.

Модно ли каким-то образом получить модификации продукта определённой опции в вызове pdoResources?
Пытался через LeftJoin, но никак не получилось…

{'!pdoResources' | snippet : [
    'class' => 'msProduct',
    'where' => [
    	"parent" => 3015,
    	"class_key" => "msProduct",
	],
    'limit' => 1,
    'leftJoin' => [
    	"Mods" => [
                "class" => "msopModification",
                "on" => "Mods.rid = msProduct.id"
            ]
    ],
    'select' => '{
    	"Mods": "*",
        "msProduct": "id,parent,pagetitle",
    }',
    'showLog' => 1,
    'tpl' => '',
]}
Помогите пожалуйста.
Андрей
04 февраля 2021, 22:21
modx.pro
626
0

Комментарии: 23

Артур Шевченко
04 февраля 2021, 23:19
-1
А зачем? Вы уверены, что ответ на ваш вопрос является единственно верным решением вашей задачи?
    Андрей
    04 февраля 2021, 23:29
    0
    Не уверен))
    Суть такова: внутри товара я получаю некий ресурс — в галерее которых цвета.
    В тоже время у этого товара есть опция, в модификациях которой указана наценка.

    Проще говоря, есть группы лдсп и на каждую группу по названию (категория 1, категория 2 и т.д.) есть наценка. Вот ее и нужно подтянуть.
      Артур Шевченко
      05 февраля 2021, 00:48
      -1
      Ничего не понял, но очень интересно. Почему просто не сделать нужную модификацию?
        Андрей
        05 февраля 2021, 10:03
        0
        ))
        Обычные модификации не подходят, ввиду крайне не удобного администрирования.
        Попытаюсь объяснить подробнее:
        Мебель, выбор ткани или выбор цвета.
        Цвета и ткани делятся на ценовые категории, внутри каждой много делений по названиям тканей, а каждая ткань в свою очередь представляет из себя множество фото в разных цветовых решениях.
        Категории тканей — это у нас категории товаров. Сама ткань — ресурс (товар), фото тканей — галерея изображений.
        Суть в том, что в зависимости от товара наценка на категории тканей разная. Поэтому вводим такую опцию — Категории тканей, которая содержит просто перечисление категорий (категория 1, категория2, категория 3 и т.д.), а в модификациях мы указываем наценку, допустим: кат1 — 0, кат 2 — +500, кат 3 + 1000 и.т.д
        При нажатии на сайте ссылки выбор ткани всплывает модальное окно в которое подгружаются только те ресурсы, названия родителя которых совпадают с значениями опций (где-то может быть 5 категорий ткани, где-то 8) и они раскидываются по вкладкам (табам), каждый таб — отдельная категория ткани. и вот сюда мне нужно погрузить наценку категории, а для этого — получить модификации продукта по опции Категория тканей и соответственно наценку на каждое из значений опции
    Артур Шевченко
    05 февраля 2021, 12:28
    -1
    Структура каталога такая
    — Категория-1
    ----Ткань-1
    ----Ткань-2
    ----Ткань-3
    — Категория-2
    ----Ткань-4
    ----Ткань-5
    ----Ткань-6
    ?
      Андрей
      05 февраля 2021, 12:46
      0
      Да, все верно
        Артур Шевченко
        05 февраля 2021, 12:50
        -1
        И одна ткань может быть в нескольких категориях?
          Андрей
          05 февраля 2021, 12:51
          0
          нет, ткани могут быть только в одной категории.
            Артур Шевченко
            05 февраля 2021, 12:55
            -1
            А в опции Категории тканей какие категории перечислены, не те же, что в дереве?
              Андрей
              05 февраля 2021, 12:58
              0
              Те же, и называются также. Но в дере допустим 13 категорий, а у товаров может быть только 8, значит в опции у него будет до 8 категории значения.
              Хотя это редко. В основном везде у всех полный перечень. да и опции ввелись только из-за того, что наценка разная от товара к товару.
                Артур Шевченко
                05 февраля 2021, 13:17
                -1
                А почему категории в опции называются так же как и категории в дереве и при этом вы говорите. что товар одновременно может быть только в одной категории, хотя в опции их может быть до 8?
                  Артур Шевченко
                  05 февраля 2021, 13:19
                  -1
                  Если Категории в дереве и Категории в опциях это разные сущности, то они должны называться по-разному, если одинаковые, то зачем их дублировать?
                    Андрей
                    05 февраля 2021, 13:39
                    0
                    Принцип такой:
                    Свой модификатор обходит значения опции и по названию находит ID ресурсов.
                    Далее из них формируются табы
                    {var $tabs = $_modx->getResources(
                                            [
                                                'published' => 1,
                                                'deleted' => 0,
                                                'id:IN' => $_modx->resource.color|getPageIDsByPagetitle,
                                            ],
                                            [
                                            'class_key' => 'msCategory',
                                            'sortby' => 'menuindex',
                                            'sortdir' => 'ASC',
                                            'limit' => 0,
                                            'select' => 'id,pagetitle'
                                            ]
                                        )}
                    
                                        <ul class="fabric-tabs">
                                            {foreach $tabs as $tab}
                                                <li class="tab-link {$tab@index == 0 ? 'current' : ''}" data-tab="tab-{$tab.id}">{$tab.pagetitle}</li>
                                            {/foreach}
                                        </ul>
                    А уже внутри таба выдергиваются ресурсы (ткани) и их галереи
                    Вот кусок кода, в котором немного иная логика — ценник единый на все товары и поэтому задается в TV поле категории. А мне нужно сейчас перевести ее на модификации
                    {if $.post.id != ''}
                        {'!pdoResources'|snippet:[
                            'parents' => $.post.id,
                            'class' => 'msProduct'
                            'where' => ['class_key' => 'msProduct'],
                            'limit' => 0,
                            'leftJoin' => [
                                'TVCategory' => [
                                    'class' => 'modTemplateVarResource',
                                    'on' => 'msProduct.parent = TVCategory.contentid AND TVCategory.tmplvarid = 6',
                                ],
                                "fabricType" => [
                                    "class" => "msProductOption",
                                    "on" => "fabricType.key = 'tkan_type' and fabricType.product_id = msProduct.id"
                                ]
                            ],
                            'select' => 'msProduct.id,parent,pagetitle,TVCategory.value as category_price, fabricType.value as fabric_type',
                            'tpl' => '@INLINE
                                <div class="select-color-gallery" data-type="{$fabric_type}">
                                    {$category_price|setPlaceholder:"category_price"}
                                    {"!msGallery"|snippet:[
                                        "product" => $id,
                                        "tpl" => "tpl.selectFabric",
                                    ]}
                                </div>
                            ',
                        ]}
                    {/if}
                      Артур Шевченко
                      05 февраля 2021, 14:33
                      -1
                      Вы не ответили на мой вопрос, а это важно для понимания, Категории в дереве и Категории в опциях это разные сущности?
                        Андрей
                        05 февраля 2021, 14:34
                        0
                        В дереве категории — это ресурсы типа Категория товаров.
                        В опции — это опция типа «Список с автодополнением»
                          Артур Шевченко
                          05 февраля 2021, 14:38
                          -1
                          Это я понял, что показывает опция? отношение к категории в дереве?
                          Андрей
                          05 февраля 2021, 14:41
                          0
                          Значение опции = Наименованию категории в дереве
                          Артур Шевченко
                          05 февраля 2021, 14:42
                          -1
                          И у одной ткани — товара — может быть до 8 значений в опции Категория ткани, так?
                          Андрей
                          05 февраля 2021, 14:52
                          0
                          1. Товар Диван Амстердам. У него есть опция Категории тканей, со значениями: Категория 1, Категория 2, Категория 3 (для примера)
                          2. Есть в дереве ресурсов такая структура, как вы писали выше:
                          — Категория-1
                          ----Ткань-1
                          ----Ткань-2
                          ----Ткань-3
                          — Категория-2
                          ----Ткань-4
                          ----Ткань-5
                          ----Ткань-6
                          — Категория-3
                          ----Ткань-7
                          ----Ткань-8
                          ----Ткань-9
                          Товар-ткань в данном случае лишь для удобства структурирования — он может быть и простым ресурсом. Главное — внутри него есть галерея с фото тканей.
                          3. При клике в карточке товара Дивана по кнопке выбора ткани открывается модальное окно в которой в виде табов подгружаются категории в каждом из табов идут галереи из ресурсов, дочерних к данной категории.

                          Пример в скринах
                          prnt.sc/ye2m65
                          prnt.sc/ye2o7m
                          prnt.sc/ye2q5p
                          Артур Шевченко
                          05 февраля 2021, 16:55
                          -1
                          Понятно, если структуру оставлять такую, то тогда не получится использовать модификации, а если использовать модификации, то надо менять структуру. Другими словами если использовать модификации, то Диван это товар, ткань это опция, причём тканей должно быть столько сколько есть комбинаций ткань+категория ткани, что скорее всего будет неудобно администрировать. Поэтому надо писать свою логику. Я бы связал диван и ткани через Связи дальше написал бы js который формировал как бы комплект товаров и при добавлении в корзину в плагине менял стоимость.
                          Андрей
                          05 февраля 2021, 16:59
                          0
                          не, связи, модификации это все не то. Администрировать с ума сойдете. Представьте что тканей порядка 10к… И они довольно часто переходят из категории в категорию… И это все надо сделать по всем товарам.
                          Поэтому весь вопрос в том, как получить модификации, все остальное работает правильно. Может не через pdoResources делать можно а иначе, если есть мысли буду признателен.
                          Артур Шевченко
                          05 февраля 2021, 17:04
                          -1
                          Напишите свой сниппет.
                          Андрей
                          05 февраля 2021, 17:11
                          0
                          Хорошо
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      23