Денис Усачев

Денис Усачев

С нами с 26 июля 2016; Место в рейтинге пользователей: #823

Тест вложенности ресурса в контейнер [с блекджеком и плюхами]

Проверить, есть ли контейнер в списке родителей ресурса, можно разными способами:

  • Можно сделать это используя карту ресурсов, которую MODX создаёт для каждого контекста после обновления кеша. Для этого необходимо воспользоваться методом $modx->getParentIds. Таким образом нагрузка и время затрачиваемое на проверку будет минимальным.

  • Не заморачиваться и сделать всё исключительно на Fenom, без модификаторов. Тут мы тоже можем воспользоваться методом $_modx->getParentIds, который Василий услужливо вынес в список доступных в Fenom.

  • Можно даже извратиться до того, что на каждую такую проверку получать объект через getObject('modResource') + получать объекты его родителей через getOne('Parent'). К слову, что будет в случае, если нам, к примеру, надо проверить 50 товаров на странице на вложенность в определённую категорию?
    Ради интереса, я воспроизвёл подобную ситуацию на тестовом сайте Modhost:
    1. Без каких-либо проверок 50 товаров в списке категории выводятся за 0,0282 сек.
    2. С подобной проверкой, за 0.1304 сек.
    3. С проверкой, которую мы рассматриваем в этом посте, за 0.0307 сек.

    А потом заказчики сходят с ума, почему их сайт так долго открывается...
Павел Гвоздь
26 апреля 2017, 05:28
modx.pro
17
4 507
+15

Как изменить цену в корзине исходя из веса?

В корзине особенная логика формирования цены должна быть, и она зависит от веса (weight), а не от количества.
Если в коротко, то при достижении веса например в 400 грамм суммарно для всех товаров в корзине должна применяться для всех них скидка в 20% например.

Это нестандартная задача, обычно оптовые цены зависят от количества, а не от веса.

Я вижу решение проблемы из двух этапов:
  1. бэкэнд из плагина
  2. фронтэнд на js-кэллбэке
По первому нашел много старых примеров, например тут и тут, но все они нерабочие и плагин ругается в логи.
Василий Столейков
06 апреля 2017, 04:38
modx.pro
4
4 654
0

Обновление корзины или рефреш страницы

Добрый день!

Сделал плагин для добавления подарка при достижении определенной суммы. Код стандартен

switch ($modx->event->name) {
	case 'msOnAddToCart': case 'msOnChangeInCart': case 'msOnRemoveFromCart':
		$cartArray = $cart->get();
		$cartStatus = $cart->status();
		
		if ($cartStatus['total_cost'] >= 100){
			$cart->add(666);
			$cartArray = $cart->get();
			foreach ($cartArray as &$cartProduct) {
				if ($cartProduct['id'] == 666) {
					$cartProduct['count'] = 1;
				}
			}
		}
		else{
			foreach ($cartArray as $key => $cartProduct) {
				if ($cartProduct['id'] == 666) {
					unset($cartArray[$key]);
				}
			}
		}
		$cart->set($cartArray);
		break;
}
подарок добавляется в корзину ($cart) все хорошо, но не знаю как обновить страницу с корзиной чтобы показать добавленный подарок в корзине. Тоже самое при удалении части заказа из корзины, если сумма заказа уменьшилась, я из $cart удаляю подарок, но страницу с корзиной не могу обновить.
Как обновить страницу с корзиной?
Алексей Хребтов
28 марта 2017, 15:24
modx.pro
4
2 344
+1

Проблема с msGallery

При выводе каталога товаров в minishop2 возникла проблема с msGallery.
Товары на страницу выводятся сниппетом msProducts,
но в каталоге нужно выводить не одно картинку товара, а первые две из галереи.
Поэтому в шаблоне вывода товара есть вызов сниппета msGallery и выводятся первые две картинки
Вывод каталога:
[[!msProducts?
  &parents=`10`
  &depth=`1`
  &limit=`10`
  &tpl=`tpl.msProducts.row`
]]
шаблон товара tpl.msProducts.row:
<li>
	<div class="item">
		<a href="" class="img_wrap">
            [[!msGallery? &product=`[[+id]]` &tpl=`tpl.msProductImages`]]
		</a>
	</div>
</li>
tpl.msProductImages:
<img src="{$files[0]['235x390']}" alt="" title="">
<img src="{$files[1]['235x390']}" alt="" title="">
однако как только добавляю в шаблон товара сниппет msGallery все ломается и в каталог выводится только одна строка с товаром, а дальше вместо каждого товара вот такой код
<img src="" alt="" title="">
<img src="" alt="" title="">
Подскажите, пожалуйста, что делаю не так? В чем может быть ошибка?
Такое впечатление что msProducts после первой строки забывает, что его шаблон для вывода товаров это tpl.msProducts.row, и берет в качестве шаблона чанк из msGallery -> tpl.msProductImages
Greza
24 февраля 2017, 17:41
modx.pro
2
4 400
0

Как добавить слэш в конце URL?

Здравствуйте!

Не могли бы Вы подсказать, как реализовать автоматический редирект со страниц без слеша в конце URL?
К примеру, сейчас страница дублируется по адресам: site.ru/news и site.ru/news/. Хотелось бы, чтобы при заходе site.ru/news происходил автоматический редирект на site.ru/news/

Заранее благодарю за помощь!
Юрий
26 января 2017, 10:09
modx.pro
3
4 817
0

Блок доставки в завис-ти от способа доставки

Добрый день,
сделала следующую структуру в шаблоне tpl.msOrder
<div>Ваши данные</div>
<div>Выбрать способ доставки (самовывоз, доставка по Москве, доставка по РФ</div>
<div>Выбрать способ оплаты</div>
<div>Адрес доставки</div>
<div>Почтовый адрес доставки</div>
<div>Выбрать пункт самовывоза</div>
Нужно чтобы при выборе определенного способа доставки выводился определённый блок (например самовывоз — выбрать пункт самовывоза, доставка по РФ — Почтовый адрес доставки)

Подсмотрела здесь на сайте такую функцию
<script>
    function hideaddress(){
   if ($('[name="delivery"]:checked').attr('id') == 'delivery_1') {
      $("#address_block").hide();
   } else {
      $("#address_block").show();
      return false;
   }
}

window.onload = function () {
   hideaddress();
};

$(document).on('change', '[name="delivery"]', function() {
   hideaddress();
})
</script>
Вставила этот блок в конце в чанке tpl.msOrder (просто чтобы понять работает или нет). Ничего не работает(( Выбираю самовывоз (id 1), все блоки остаются на месте.
Пожалуйста, подскажите, что неправильно делаю
Natalia
15 января 2017, 15:15
modx.pro
1
1 061
0

Сортировка значений опций товара

Добрый день.
Ситуация такая — создал опции для товара:
Лента 1250х50 мм
Лента 1250х75 мм
Лента 1250х100 мм
Но после сохранения товара они изменили порядок и стало так
Лента 1250х75 мм
Лента 1250х50 мм
Лента 1250х100 мм
А это не правильно с той точки зрения, что опции нужно выводить в порядке возрастания их цены. Есть конечно вариант сделать только цифры, например 50, 75, 100, но так не всем покупателям понятно и лучше выводить полное название.
Подскажите, как можно отсортировать опции в нужном порядке.
Пользователь Володя подсказал вариант с
github.com/vgrish/miniShop2/blob/7d60279388e7301b31fd9ad5f9862881d7ec7721/core/components/minishop2/elements/snippets/snippet.ms_options.php
и с github.com/bezumkin/miniShop2/pull/248#issuecomment-252066243
Но смешанные данные у меня не отсортировались — там где и строка и числа…
Андрей
11 декабря 2016, 16:01
modx.pro
7
7 271
0

Массовый импорт модификации продуктов [miniShop2]

В поддержке задали вопрос как можно массово добавлять модификации для продуктов (разные цены для разных размеров, артикулы уникальны для каждого размера).

Ниже привожу пример…
Володя
27 октября 2016, 09:54
modx.pro
20
4 902
+5

Загрузка заказов ms2, Tikets на стартовой странице

При сравнении «специализированных» cms для интернет магазинов и minishop заметил общую тенденцию у первых выводить при входе в админку список заказов. После недолгой переписки с замечательным исполнителем Павлом Гвоздем возникло такое замечательное и гениальное по простоте решение:
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
Здоров Александр
11 октября 2016, 20:28
modx.pro
66
5 867
+27

Добавление своих полей в форму заказа [обновлено]

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

Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей

Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.

Более подробно далее
Дмитрий Меркурьев
11 октября 2016, 16:38
modx.pro
97
19 917
+11