Как лучше доработать к miniShop2 акции ?

Здравствуйте, подскажите пожалуйста, есть задача сделать акции для товаров, то есть к примеру у определенных товаров в заданные промежуток времени цена должна быть снижена на 10%. В БД сейчас сделал таблицу stock затем с помощью компонента CMP Generator создал пакет stockProduct. Вопрос сейчас в том что между таблицей ms2_products и stock должна быть связь. Сделал поле в таблице ms2_products — stock_id.Скорее всего нужно же ещё отредактировать файл /core/components/minishop2/model/schema/minishop2.mysql.schema.xml? Прописать там связь между таблицей stock и ms2_products? Находил ещё такую вот статью но там minishop2.mysql.schema.xml не трогают dart.agency/blog/modx/plagin-tovara-dlya-minishop2-modx-revo.html
Подскажите пожалуйста как лучше это сделать и правильно ли я иду. Заранее благодарю за ответ.
Сергей Хлопов
14 января 2021, 16:53
modx.pro
524
0

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

Артур Шевченко
14 января 2021, 18:20
0
Я бы сделал категорию, в которую добавлял бы товары участвующие в акции, величину скидки можно устанавливать либо через системные настройки, если скидка одна на все товары, либо индивидуально у товара, либо сделать подкатегории по величине скидки. Если акций несколько, то тогда точно нужно создавать категорию и подкатегории с акциями. А потом написал бы сниппет, который запускался бы по cron раз в сутки и проверял бы какие товары пора убирать из акции или какую акцию отключать. Я так делал для всех товаров сайт и для одной акции, поэтому обошёлся без дополнительных категорий.
Это сниппет который запускается по крону
<?php
$snippet = $argv[1]; // этот аргумент содержит название сниппет, который будет работать с акциями
require_once '/home/a/a99963am/art-sites.ru/public_html/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';

$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
echo $modx->runSnippet($snippet);

Вот пример задания для крон SnippetName — имя сниппета для параметра $argv[1]
/usr/local/bin/php5.6 ~/domain.ru/public_html/assets/cron-run-snippet.php SnippetName
А ваш вариант кажется мне избыточно сложным, зачем вам отдельная таблица?
    Сергей Хлопов
    15 января 2021, 09:32
    0
    Благодарю за ответ. Таблица stock для хранения акций,
    в ней поля:
    — date-from (дата от)
    — date-to (дата до)
    — percent (процент на сколько цену у товаров снизить)

    А в таблице ms2_products думал что бы в поле stock_id был id акции.

    То есть к примеру:
    Товар 1 у него stock_id = 1
    Товар 2 у него stock_id = 1

    И есть акция:
    id — 1
    date-from — 15.01.21
    date-to — 16.01.21
    percent — 15

    А вот с категориями, а URL товара меняется же из за категории, и в хлебных крошках путь, и в sitemap?
      Артур Шевченко
      15 января 2021, 09:41
      0
      Товар может принадлежать сразу к нескольким категориям и url не поменяется, если вы конечно отдельно товары по акции выводить не будете. Насчёт sitemap не знаю, надо смотреть что там будет, но это тоже можно скорректировать как надо. Ваш вариант по сути тоже самое, только вы вместо подкатегорий создали таблицу с акциями, но как по мне это сложнее, проще использовать уже имеющиеся возможности.
Александр Мельник
14 января 2021, 23:16
0
А что вы планируете хранить в вашей таблице
stock
?
Вы ведь написали что задача уменьшать цену существующего товара?
    Сергей Хлопов
    15 января 2021, 09:33
    0
    Благодарю за ответ. Таблица stock для хранения акций,
    в ней поля:
    — date-from (дата от)
    — date-to (дата до)
    — percent (процент на сколько цену у товаров снизить)

    А в таблице ms2_products думал что бы в поле stock_id был id акции.

    То есть к примеру:
    Товар 1 у него stock_id = 1
    Товар 2 у него stock_id = 1

    И есть акция:
    id — 1
    date-from — 15.01.21
    date-to — 16.01.21
    percent — 15
    Артем
    15 января 2021, 00:57
    0
    Скорее всего нужно же ещё отредактировать файл /core/components/minishop2/model/schema/minishop2.mysql.schema.xml?
    Не нужно так делать, есть куда более правильный подход.

    А вообще, мне лично неясно, зачем здесь нужна вторая таблица. Достаточно создать 3 новых поля — discount, discount_after, discount_until, затем написать небольшой кусок логики, который будет проверять, что товар попадает в нужный временной отрезок и к нему можно применить акцию, ну и останется только рассчитать скидку согласно акции.
    По инструкции, которую ты скинул, можно расширить админку и сделать вполне удобный интерфейс для заполнения этой инфы.
      Сергей Хлопов
      15 января 2021, 09:44
      0
      Благодарю вас за ответ, таблица stock для хранения акций. Ну да по поводу 3 поля на товарах неплохо, но мне кажется не очень удобно, это же тогда в каждый товар нужно будет заходить и устанавливать эти поля
        Сергей Хлопов
        15 января 2021, 10:50
        0
        Хотя можно просто удобный интерфейс для этого сделать, наверно лучше сделаю с помощью вот этих 3-х полей
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9