Последние темы


Один товар в нескольких категориях shopkeeper 3 + фильтр по цене (ползунок)

  • Стоит задача сделать чтобы один товар можно было отображать в разных категориях. Как это сделать я знаю (делал уже). Но еще нужен фильтр по цене (ползунок).
    Решил сделать с помощью tagmanger2... и наверное это была моя ошибка.
    Сам сайт: http://test.amarantu.ru/
    Сейчас по сути что не работает (не могу сделать, работает но не так как нужно):

    1. Категории это папки в админке (они же и пункты меню, при нажатии на пункт меню должна открываться страница со своими товарами + прицепленными к ней). Товары прицепляю к другим с помощью tv поля со множественным выбором. Но не могу отфильтровать без костылей в getProducts. В pdoResources когда-то делал так:
      &parents=id ресурса каталога верхнего уровня
      &tvFilters=parent==[[*id]],template==4||category==%#[[*id]]#%
      Тоесть вывожу все товары каталога, далее фильтрую. Вывожу товары у которых id родитя совпадает с открытой категорией (те которые фактически находяться в данной категрии (папке), далее добавляю сюда те товары которые прицеплены к странице).
      Записать такую конструкцию в getProducts у меня не получилось. Сделал так:
      &parents=9
      &where={"template":"6"}
      &tvFilters={"category:LIKE":"%#[[*id]]#%"}
      Выводит только "прицепленные" товары. Тоесть и товар который фактически в папке приходиться прицеплять к своей же категории так как не могу профильтровать по parent==[[*id]] (костыль).
    2. Не могу включить фильтр по цене (в панели управления) для категорий в которых фактически товаров нет. Например товары сейчас только в категории "Подарочные книги" и "Всемирная история" там есть фильтр по цене ползунок. А как включить фильтр (ползунок) например для категории "Для руководителя" (там товаров как таких нет, только прицепленные)? Это уже проблема...
    3. После того как пробую сортировать товары на странице например по дате добавления (по любому параметру) tagmanager2 подставляет свои параметры в tvFilters и оставляет на странице только те товары которые фактически находяться в категории. Тоесть в категории "Для руководителя" ничего не остается, а например в категории "Всемирная история" только книга "Власть" которая там фактически находиться.

    Вообщим я немного в помешательстве. Понимаю что наверное изначально выбрал не верное направление.
    Что думаю делать дальше:

    1. Может все-же кто-то подскажет как реализовать (исправить баги) такую штуку с помощью tagmanar2?
    2. Если с tagmanar2 не вариант буду делать без него. Тогда подскажите, пожалуйста, как реализовать ползунок фильтрации по цене (понимаю что если поискать то можно найти в инете кучу вариантов, но я уже и так на неделю не успеваю с проектом), возможно кто-то делал такое?
    3. Или может у кого-то есть принцыпиально другой подход к этой задаче?

    Спасибо, даже если Вы только прочли мое сочинение (писал примерно час =). Надеюсь с Вашей помощью осилю эту на первый взгляд простую по сути, а я думал и в реализации задачу.

  • У TagManager нет поддержки множественных категорий. Нужно допиливать, но с какой стороны к этой задаче подступиться не знаю (не думал об этом). Если вы не программист или время ограничено, то лучше взять движок, где такая возможность уже реализована. Например, Shopkeeper4
    http://forum.modx-shopkeeper.ru/topic/1233/вышел-shopkeeper-v4-0-rc

  • Смотря как Вы на сео ориентируетесь. Вариант: сделать один основной каталог, а левое меню в качестве фильтра по категориям (тегам) с помощью того же тагменеджера.

  • Спасибо за ответы Andchir и City Shafl!
    Shopkeeper4 обьязательно попробую, сделать один основной каталог, а левое меню в качестве фильтра по категориям - пока делать не буду, хотя тоже вариант.
    Попробую сделать без tagmanar2 (так как по большому счету он мне нужен только для ползунка фильтрации по цене) и прикрутить сторонний фильтр по цене. Возможно у кого-то есть хороший вариант ползунка - буду благодарен.

  • Реализовал без tag_manager. Сам ползунок фильтрации по цене сделал используя код: http://jsfiddle.net/5aPg7/

 

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

  • а редактируются они через CMP

    Покажите скриншот. Не понял что за CMP. Но если и не подвязаны, оставьте значение, которое было.
    Вот мой скриншот:
    0_1565682115311_screenshot_179.png

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

    Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    MIGXDB

    какие родители в элементах migx db?
    это элементы, которые к ресурсам никак не подвязаны!
    а редактируются они через CMP

    Читать далее
  • //Название поля ID родителя $cf_config['parent_field'] = false;

    Почему так? В MIGXDB документы должны иметь родителя. Иначе как вы их добавляете/редактируете в админке?

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

    отключил, очистил
    далее http://joxi.ru/12MEdEvtloelG2 -> http://joxi.ru/VrwXwXZt7RN7Mm
    в журнале ошибок - пусто
    код настройки

    <?php //Название класса таблицы товаров в БД $cf_config['className'] = 'delivery_flight'; //Название пакета таблицы товаров в БД $cf_config['packageName'] = 'delivery_schedule'; //Название поля ID родителя $cf_config['parent_field'] = false; //разбивка по столбцам при импорте и экспорте (content|tv|category) $cf_config['content_row'] = array( array('ID',array('id','content')), array('Наименование',array('name','content')), array('Время',array('time','content')), array('Откуда',array('from','content')), array('Время в пути',array('duration','content')), array('Куда',array('to','content')), array('Время прибытия',array('arrival_time','content')), array('Стоимость',array('price','content')), array('Тариф',array('delivery_rate_id','content')), array('Сортировка',array('sort','content')), ); //значения по умолчанию при импорте или проверка при экспорте $cf_config['imp_content_default'] = array( 'content' => array( 'deleted' => 0, 'published' => 1, //'template' => 9 'createdon' => strtotime("now") //'publishedon' => strtotime("now") //'pub_date' => strtotime("now") //'editedby' => 1 //'editedon' => strtotime("now") ), 'tv' => array( //7 => 0 ) ); //первая строка - названия полей $cf_config['include_captions'] = true; //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать. $cf_config['batch_import'] = 300; //разбивать по категориям $cf_config['include_categories'] = false; //удалять дочерние категории при очистке и обновлении каталога $cf_config['delete_subcategories'] = true; //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_field'] = false; //проверять соответствие товара при обновлении по значению TV. Указать ID TV. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_tvid_val'] = false; //Добавлять товары, которые не найдены при обновлении по TV (imp_chk_tvid_val) или полю (imp_chk_field) $cf_config['imp_if_not_exist'] = true; //удалять HTML-теги при экспорте $cf_config['exp_strip_tags'] = false; //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = false; //Изменить значения поля для всех вложенных товаров до начала импорта. //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе. //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым) $cf_config['imp_before_change'] = false;//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены //удалить файл после экспорта (скачивания) $cf_config['exp_delete_file'] = false; //кодировка CSV-файла при экспорте $cf_config['exp_csv_charset'] = 'UTF-8'; //'windows-1251' //Импортировать (обновлять) пустые значения $cf_config['imp_empty'] = true; //Имя файла процессора, который использовать для импорта. Если пусто, используется стандартный процессор "import". $cf_config['imp_custom_processor'] = ''; //путь (xpath) в XML структуре до товаров $cf_config['imp_xml_itemsparent_path'] = '';//'/catalog/shop/offers'; //Структура XML файла для импорта $cf_config['imp_xml_structure'] = ''; //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок. $cf_config['imp_testmode'] = true; //функция для фильтрации значений при ИМПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; /* if(isset($output_arr['content']['pagetitle'])) $output_arr['content']['pagetitle'] = mb_strtoupper($output_arr['content']['pagetitle'], 'UTF-8'); */ return $output_arr; } //функция для фильтрации значений при ЭКСПОРТЕ function filter_export($value_arr,$doc_id=0){ $output_arr = $value_arr; //var_dump($value_arr,$output_arr); //exit; /* if(isset($output_arr['price'])) $output_arr[1] = floatval($output_arr[1]) - 200; */ return $output_arr; } ?>

    shema пакета, для которого написана настройка

    <model package="delivery_schedule" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1"> <object class="delivery_rate" table="delivery_rates" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="color" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="desc" dbtype="text" phptype="string" null="false" default="" /> <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/> <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" /> <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" /> <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/> </object> <object class="delivery_flight" table="delivery_flights" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="from" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="duration" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="to" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="arrival_time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="price" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/> <field key="delivery_rate_id" dbtype="int" precision="10" phptype="integer" null="false" default="0"/> <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" /> <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" /> <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/> <aggregate alias="Delivery_rate" class="delivery_rate" local="delivery_rate_id" foreign="id" cardinality="one" owner="foreign" /> </object> </model>

    Читать далее