Артем

Артем

С нами с 12 января 2015; Место в рейтинге пользователей: #273

Оптимизации и тонкости работы с БД для больших магазинов на MODX Revolution

Небольшое вступление

Данная статья не претендует на универсальное решение. Всегда пользуйтесь собственной головой. Всё описанное ниже актуально для MODX Revolution 2.8.3-pl, miniShop2 2.9.1-pl.

wfoojjaec
16 сентября 2021, 19:09
modx.pro
30
2 898
+26

Изменение цены в корзине при переоценке

Привет.

Иногда возникает такая ситуация, когда пишите интернет-магазин на MODX и miniShop2 и при этом вы импортируете товары или переоцениваете их с какого-нибудь внешнего сервиса (Например 1С). Проблема которая возникает абсолютно всегда в таких случаях, что цены на товары меняются достаточно часто. В miniShop2 нет (пока нет) события, который бы позволял хендлить события перехода в коризну. Однако, мы можем сделать это на уровне MODX, его событий и API

Создаем плагин cartCheck и вешаем его на событие OnWebPagePrerender. Это событие уже спарсило ресус и его данные, но еще не вывело на страницу — все что нам нужно. В коде, делаем проверку на шаблон страницы. Обычно, корзина имеет свой выделенный шаблон. Далее нам предстоит инициализировать минишоп, получить корзину, модифицировать ее как угодно и назначить обратно. Так же мы сделаем проверку на то, опубликован или удален ресурс и не дадим его купить. На этом, собственно все. Ниже привожу код плагина

<?php
if ($modx->event->name = 'OnWebPagePrerender'){
    if ($modx->resource->id == 5) {
        /** @var miniShop2 $miniShop2 */
        $miniShop2 = $modx->getService('minishop2');
        $miniShop2->initialize();
        $cart = $miniShop2->cart->get();
        foreach ($cart as $key => &$element) {
            /** @var msProduct $product */
            if ($product = $modx->getObject('msProduct', $element['id'])) {
                $element['price'] = $product->get('price');
                if (!$product->get('published') || $product->get('deleted')){
                    unset($cart[$key]);
                }
            }
        }
        $miniShop2->cart->set($cart);
    }
}
Павел Бигель
07 мая 2020, 15:56
modx.pro
9
1 819
+11

Заготовка MODX RESTFull API для работы с магазином на основе miniShop2

Подготовил и выложил на Github полностью готовый компонент, который реализует RESTFull API на базе встроенного в MODX modRestService.

Вполне можно брать его как заготовку, допиливать свои нужды и использовать.
Ниже расскажу как с ним работать и на что обратить внимание.

Николай Савин
08 марта 2020, 15:07
modx.pro
13
2 749
+22

Шпаргалка на все случаи жизни

Полезные ссылки, которые Вам пригодятся в некоторых ситуациях.
Михаил
07 февраля 2020, 21:42
modx.pro
71
2 311
+35

Плюс и минус в каунте корзины MS2

Досточно простой вопрос, который мучает начинающих разработчиков. Решил поделиться решением, как сделать кнопки плюс и минус в корзине MS2. Что бы все было «по-фуншую»

Начнем c разметки. Я показываю на страндартной теме MS2. Вносим правки в чанк tpl.msCart

...
<td class="count">
<form method="post" class="ms2_form" role="form">
  <input type="hidden" name="key" value="{$product.key}"/>
  <div class="form-group">
    <div class="input-group input-group-sm qty">
      <span class="input-group-prepend">
      <span class="input-group-text minus input_count_action">-</span>
      </span>
      <input type="number" name="count" value="{$product.count}" class="form-control"/>
      <span class="input-group-append">
      <span class="input-group-text plus input_count_action">+</span>
      <span class="input-group-text">{'ms2_frontend_count_unit' | lexicon}</span>
      </span>
    </div>
      <button class="btn btn-sm" type="submit" name="ms2_action" value="cart/change">
      ↻</button>
  </div>
</form>
</td>
...
Олег Щавелев
02 декабря 2019, 02:08
modx.pro
14
3 026
+8

MODX и REST

Раз уж зашла тема про REST хочу написать серию заметок о том, как обстоят дела с построением REST архитектуры в MODX или о том, как сделать API приложение на базе MODX.
Николай Савин
19 сентября 2019, 07:45
modx.pro
3
2 202
+19

[mFilter2] Вывод товаров со смежными значениями

Небольшая заготовка из вчерашнего рукоделия.

Имеем сайт с подбором товаров по характеристикам, реализованным на mFilter2.
Один из параметров «Мощность активная» выглядит так (увеличение по клику):


Как видно, есть большое разнообразие товаров с близкими значениями мощностей, но общее количество товаров не столь велико.
Это приводит к тому, что когда посетитель выбирает, к примеру, мощность 10 кВт, то он видит 1 товар в результатах подбора. А специфика продукции такова, что логично предложить пользователю аналогичные изделия как с чуть меньшей мощностью, например 9 кВт, так и с большей, до 12-15 кВт.

Нет, конечно можно сказать, что пусть нащелкает нужные цифры в подборе, но всегда есть «но». На страницу «Товары с мощностью 10 кВт» (где уже стоит галочка в фильтре) пользователь приходит из поисковых систем, фильтра он не видел и не нажимал. Если на странице будет 1 товар, пользователь может быстро уйти, решив, что мы предлагаем крайне скудный ассортимент, так и не увидев, что есть фильтр.

В общем, небольшая зарисовка на тему того, как при выборе в фильтре параметра со значением 10, показать все товары в диапазоне -x%....+y%.

Наумов Алексей
26 февраля 2019, 10:29
modx.pro
15
1 465
+10

Динамическое обновление цены товара miniShop2 по курсу доллара, через Cron.

Всем привет, друзья. Возникла у меня задача, сделать так, чтобы цены у товаров менялись в соответствии с курсом доллара, раз в сутки.
Vlad Brise
17 декабря 2018, 23:01
modx.pro
21
2 956
+10

[miniShop2] Версия 2.4.15

Новая версия miniShop2 — основное изменение затрагивает работу с пользователем заказа, поле ПОЧТА становится НЕ ОБЯЗАТЕЛЬНЫМ!

В последнее время в моду вошла авторизация по номеру телефона, что потребовало внести коррективы в код магазина.
НЕ ОБНОВЛЯЙТЕ РАБОЧИЕ МАГАЗИНЫ, ПОКА НЕ ПРОЧИТАЕТЕ ЭТУ ЗАМЕТКУ ЦЕЛИКОМ!!!
Володя
06 августа 2018, 12:42
modx.pro
6
3 507
+18

[Решено] Как программно изменить заказ minishop2?

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

UPD. Решил вот как. Для начала покопался в самом минишопе, ибо сам он умеет делать то что мне надо через список заказов в админке, а значит у него есть для этого все необходимые педали.
gruzoveek
13 июня 2018, 12:04
modx.pro
2
2 354
0