Денис Усачев
С нами с 26 июля 2016; Место в рейтинге пользователей: #823Тест вложенности ресурса в контейнер [с блекджеком и плюхами]
Проверить, есть ли контейнер в списке родителей ресурса, можно разными способами:
- Можно сделать это используя карту ресурсов, которую MODX создаёт для каждого контекста после обновления кеша. Для этого необходимо воспользоваться методом $modx->getParentIds. Таким образом нагрузка и время затрачиваемое на проверку будет минимальным.
- Не заморачиваться и сделать всё исключительно на Fenom, без модификаторов. Тут мы тоже можем воспользоваться методом $_modx->getParentIds, который Василий услужливо вынес в список доступных в Fenom.
- Можно даже извратиться до того, что на каждую такую проверку получать объект через getObject('modResource') + получать объекты его родителей через getOne('Parent'). К слову, что будет в случае, если нам, к примеру, надо проверить 50 товаров на странице на вложенность в определённую категорию?
Ради интереса, я воспроизвёл подобную ситуацию на тестовом сайте Modhost:
- Без каких-либо проверок 50 товаров в списке категории выводятся за 0,0282 сек.
- С подобной проверкой, за 0.1304 сек.
- С проверкой, которую мы рассматриваем в этом посте, за 0.0307 сек.
А потом заказчики сходят с ума, почему их сайт так долго открывается...
Как изменить цену в корзине исходя из веса?
В корзине особенная логика формирования цены должна быть, и она зависит от веса (weight), а не от количества.
Если в коротко, то при достижении веса например в 400 грамм суммарно для всех товаров в корзине должна применяться для всех них скидка в 20% например.
Это нестандартная задача, обычно оптовые цены зависят от количества, а не от веса.
Я вижу решение проблемы из двух этапов:
Если в коротко, то при достижении веса например в 400 грамм суммарно для всех товаров в корзине должна применяться для всех них скидка в 20% например.
Это нестандартная задача, обычно оптовые цены зависят от количества, а не от веса.
Я вижу решение проблемы из двух этапов:
- бэкэнд из плагина
- фронтэнд на js-кэллбэке
Обновление корзины или рефреш страницы
Добрый день!
Сделал плагин для добавления подарка при достижении определенной суммы. Код стандартен
Как обновить страницу с корзиной?
Сделал плагин для добавления подарка при достижении определенной суммы. Код стандартен
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 удаляю подарок, но страницу с корзиной не могу обновить. Как обновить страницу с корзиной?
Проблема с msGallery
При выводе каталога товаров в minishop2 возникла проблема с msGallery.
Товары на страницу выводятся сниппетом msProducts,
но в каталоге нужно выводить не одно картинку товара, а первые две из галереи.
Поэтому в шаблоне вывода товара есть вызов сниппета msGallery и выводятся первые две картинки
Вывод каталога:
Такое впечатление что msProducts после первой строки забывает, что его шаблон для вывода товаров это tpl.msProducts.row, и берет в качестве шаблона чанк из msGallery -> tpl.msProductImages
Товары на страницу выводятся сниппетом 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
Как добавить слэш в конце URL?
Здравствуйте!
Не могли бы Вы подсказать, как реализовать автоматический редирект со страниц без слеша в конце URL?
К примеру, сейчас страница дублируется по адресам: site.ru/news и site.ru/news/. Хотелось бы, чтобы при заходе site.ru/news происходил автоматический редирект на site.ru/news/
Заранее благодарю за помощь!
Не могли бы Вы подсказать, как реализовать автоматический редирект со страниц без слеша в конце URL?
К примеру, сейчас страница дублируется по адресам: site.ru/news и site.ru/news/. Хотелось бы, чтобы при заходе site.ru/news происходил автоматический редирект на site.ru/news/
Заранее благодарю за помощь!
Блок доставки в завис-ти от способа доставки
Добрый день,
сделала следующую структуру в шаблоне tpl.msOrder
Подсмотрела здесь на сайте такую функцию
Пожалуйста, подскажите, что неправильно делаю
сделала следующую структуру в шаблоне 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), все блоки остаются на месте.Пожалуйста, подскажите, что неправильно делаю
Сортировка значений опций товара
Добрый день.
Ситуация такая — создал опции для товара:
Подскажите, как можно отсортировать опции в нужном порядке.
Пользователь Володя подсказал вариант с
github.com/vgrish/miniShop2/blob/7d60279388e7301b31fd9ad5f9862881d7ec7721/core/components/minishop2/elements/snippets/snippet.ms_options.php
и с github.com/bezumkin/miniShop2/pull/248#issuecomment-252066243
Но смешанные данные у меня не отсортировались — там где и строка и числа…
Ситуация такая — создал опции для товара:
Лента 1250х50 ммНо после сохранения товара они изменили порядок и стало так
Лента 1250х75 мм
Лента 1250х100 мм
Лента 1250х75 ммА это не правильно с той точки зрения, что опции нужно выводить в порядке возрастания их цены. Есть конечно вариант сделать только цифры, например 50, 75, 100, но так не всем покупателям понятно и лучше выводить полное название.
Лента 1250х50 мм
Лента 1250х100 мм
Подскажите, как можно отсортировать опции в нужном порядке.
Пользователь Володя подсказал вариант с
github.com/vgrish/miniShop2/blob/7d60279388e7301b31fd9ad5f9862881d7ec7721/core/components/minishop2/elements/snippets/snippet.ms_options.php
и с github.com/bezumkin/miniShop2/pull/248#issuecomment-252066243
Но смешанные данные у меня не отсортировались — там где и строка и числа…
Массовый импорт модификации продуктов [miniShop2]
В поддержке задали вопрос как можно массово добавлять модификации для продуктов (разные цены для разных размеров, артикулы уникальны для каждого размера).
Ниже привожу пример…
Ниже привожу пример…
Загрузка заказов ms2, Tikets на стартовой странице
При сравнении «специализированных» cms для интернет магазинов и minishop заметил общую тенденцию у первых выводить при входе в админку список заказов. После недолгой переписки с замечательным исполнителем Павлом Гвоздем возникло такое замечательное и гениальное по простоте решение:
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
Добавление своих полей в форму заказа [обновлено]
При разработке нескольких проектов, возникала необходимость в получении дополнительных данных от покупателей, а полей в miniShop2 ограниченное количество. Поиск готового решения результата не дал, поэтому предлагаю свой вариант.
Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей
Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.
Более подробно далее
Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей
Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.
Более подробно далее