Новости

Несколько взаимосвязанных параметров и характеристик товара

  • Добрый вечер. Хотел бы уточнить вопрос, возможности стандартными средствами shopkeeper (MIGX) сделать следующую вещь:

    Есть 1 товар с определенным артикулом, который может находиться в нескольких магазинах (реальных магазинах) и иметь разный размер, вес и цену. Т.е. в карточке товара вывести два селекта:

    1-ый селект: выбор магазина, и в зависимости от того, какой магазин выбран, выводятся возможные размеры (которые есть в этом магазине) во втором селекте, а в описании товара просто меняется его вес и цена.

    2-ой селект, который просто выводит все возможные размеры этого артикула из в всех магазинов, и в зависимости от выбранного размера выводит в первом селекте магазины в котором товар есть

    Понимаю, что можно например размер==цена||размер2==цена2||etc можно вывести через param-edit и в наборе параметров шопкипера в настройке changePrice поставит replace, но как можно увязать несколько tv.param между собой не представляю.

    Хотелось бы понять в какую сторону копать, или хотя бы на каике встроенные средства желательно обратить внимание. Прекрасно понимаю как это сделать SQL запросом, но не могу понять как это всё прибить к шопкиперу.

    В данный момент реализован рабочий магазин shopkeeper (MIGX) 1 Товар в 1 магазине, с 1 размером и с 1 описанием, 1 цена и так далее..

  • Пришлось опять вернуться к этому вопросу. Может кому пригодится, опишу как это реализовал в своём магазине.

    В общем есть магазин бижутерии, в котором есть изделия, например может быть 6 колец по одному артикулу, но с разным размером, весом и соответственно ценой, также они могут быть раскиданы по магазинам. Нужно было вывести два селекта:

    1-ый - вывод всех магазинов есть в которых есть это кольцо
    2-ой - вывод размеров, которые есть в этом магазине

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

    Товары все выгружается из 1C по ftp на сервер в *.txt, а оттуда в базу

    ......
    $db->exec("LOAD DATA LOCAL
    INFILE '/home/s/shop/new/public_html/ostatki.txt' INTO TABLE `modx_shop_content`
    COLUMNS TERMINATED BY '^'
    (shops, category, articul, material, proba, weight, size, price, oldprice2, sale, image,param1,param2);	
    ");
    ......
    

    1 строка - 1 товар
    в колонку shops выгружаются с базы просто список магазинов в которых есть этот артикул изделия

    ТЦ Центр 1||ТЦ Центр 2||ТЦ Центр 3||ТЦ Центр 4
    

    в колонку param1 выгружаются уже параметры изделий с этим же артикулом
    Магазин==Цена==Размер==Вес

    ТЦ Центр 1==12500==17==1.36||ТЦ Центр 2==13500==18==2.16||ТЦ Центр 3==14500==19==2.26||ТЦ Центр 4==15500==20==2.36
    

    В шаблоне карточки товара подключаю Chained Selects Plugin for jQuery

    <script src="js/jquery.chained.min.js"></script>
    <script type="text/javascript" charset="utf-8">
         $(".sizes").chained(".shops");
    </script>
    

    с помощью param_edit_table вывожу 1-ый необходимый селект с магазинами

    [[param_edit_table?
    &tvValue=`[[*shops]]`
    &tpl=`@CODE:
    <select class="shops">
         <option value="">Выберите магазин</option>
         [[+inner]]
    </select>
     <!--tpl_separator-->
    <option  value="[[+field1]]" name="[[+field1]]">[[+field1]]</option>
    `
    ]]
    

    И так же с помощью param_edit_table вывожу уже размеры

    [[param_edit_table?
    &tvValue=`[[*param1]]`
    &tpl=`@CODE:
    <select class="shk_param sizes" name="param1__[[*id]]" id="param1[[*id]]" onchange="SHK.additOpt(this)">
        <option value="">Выберите размер</option>
        [[+inner]]
    </select>
    <!--tpl_separator-->
    <option  value="[[+idx]]__[[+field2]]" name="[[+field1]]" class="[[+field1]]"[[+selected1]]>[[+field3]]</option>
    `
    ]]
    

    name="[[+field1]]" class="[[+field1]]" - нужны для работы плагина

    В принципе и всё. Если есть более изящные/правильные решения рад буду узнать.

 

Последние комментарии

  • M

    @Andchir
    Да, в TM2 в админке фильтр age включен. Все данные из TV подтянулись, все норм.

    Читать далее
  • В компоненте в админке фильтры есть?

    Читать далее
  • M

    Ломаю голову над запуском Tagmanager2 на простом сайте с выводом обычных item-ов для последующей фильтрации. Делую все по инструкции. Запустил tmCatalog, все отображается:

    [[!tmCatalog? &cache=`1` &elementClass=`modSnippet` &element=`getProducts` &tpl=`filtr_tpl` &sortbyTV=`age` &sortdirTV=`ASC` &parents=`3` &limit=`0` &debug=`0` ]]

    Чанк вывода каждого itema имеет следующий вид:

    <div class="col-xl-4" style="padding-left: 5px; padding-right: 5px; float: left;"> <div class="post-02 post-02__style-02 js-post-effect"> <div class="post-02__media"> <a href="[[~[[+id]]]]"> [[getImageList? &tvname=`slider` &docid=`[[+id]]` &limit=`1` &tpl=`@CODE:<img src="[[+slide]]" alt="[[+alt]]" />` ]] </a></div> <div class="post-02__body"> <h2 class="post-02__title"><a href="[[~[[+id]]]]">[[!pdoField? &id=`[[+id]]` &field=`name`]]</a></h2> <div class="post-02__department">[[!pdoField? &id=`[[+id]]` &field=`seo_tag`]]</div> <div class="post-02__content"> <div class="post-02__description"> [[pdoField:ellipsis=`200`? &id=`[[+id]]` &field=`specification`]] <ul> <li><span class="primary-color">Age</span>[[!pdoField? &id=`[[+id]]` &field=`age`]]</li> <li><span class="primary-color">Dress Size</span>[[!pdoField? &id=`[[+id]]` &field=`dress_size`]]</li> <li><span class="primary-color">Height</span>[[!pdoField? &id=`[[+id]]` &field=`height`]] cm</li> <li><span class="primary-color">Weight</span>[[!pdoField? &id=`[[+id]]` &field=`weight`]] kg</li> </ul> </div> <a class="post-02__link" href="[[~[[+id]]]]">View detail</a> </div> </div> </div> </div>

    filter.js имеет следующий вид. Пока решил фильтровать только числовое значение age:

    config: { filters_cont: '#filters',//Селектор оберточного элемента блоков с фильтрами sortby: 'pagetitle',//Имя поля сортировки по умолчанию sortdir: 'asc',//Направление сортировки по умолчанию numeric: ['age'],//Имена доп. полей с числовыми значениями multitags: [''],//Имена доп. полей с множественными значениями guard_key: '#',//Разделитель для множественных значений products_cont: '#products',//Селектор контейнера с выводом товаров filter_slider: 'div.range-slider',//Селектор слайдеров (ползунок для числовых значений) filter_slider_cont: 'div.filter_slider',//Селектор контейнера со слайдером pages_cont1: '#pages',//Селектор контейнера с постраничной навигацией pages_cont2: '#pages2',//Селектор второго контейнера с постраничной навигацией. Если нет, оставить пустым. active_page_selector: '.current',//селектор номера текущей страницы внутри контейнера (pages_cont) filters_type: 'default',//Тип фильтрации. Возможные значения: // default (показ числа товаров по каждому фильтру и блокирование пустых вариантов), // only_block (только блокирование пустых париантов), // none (не показывать цифры и не блокировать) filter_delay: 700,//Задержка до отправления запроса на сервер (сбрасывается после каждой отметки фильтра) price_field: 'price',//Название поля или TV цены товара multi_currency: true,//Мультивалютность включить / выключить (true/false) base_url: '/', ajax_url: 'assets/components/tag_manager2/connector_fe.php', ajax_loader: 'assets/components/tag_manager2/img/ajax-loader2.gif' },

    Все скрипты подключи вручную, все отображается внизу страницы, проверял.
    Сам tmFilters не отображается хоть убей. Вывожу:

    <div id="filters"> [[tmFilters? &filterNumericTpl=`tm2_filterNumericTpl` &filterNumericOuterTpl=`tm2_filterOuterTpl` &jsScript=`0` &jsMap=`1` &filtersType=`filters` ]] <form action="[[~[[*id]]]]" method="get"> <input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" /> [[+filters]] <button id="clear" class="btn btn-danger btn-sm" type="button" onclick="tmFilters.resetFilters(); return false;">Сбросить</button> </form> </div>

    При выводе на странице выводится только кнопка. Фильтров как и не существует. Я понимаю, если бы кривенько вывелись чанки с фильтром и он не фильтровал, здесь же сам фильтр никак не хочет выводиться в бэкенд. Кто с таким сталкивался? Куда копать?

    Читать далее
  • @Andchir Спасибо!!!
    Все перепробовал кроме [[+note]]
    В письме со статусом отправлен, чтобы трек-номер отправлять покупателю. Все работает. Еще раз спасибо.

    Читать далее