Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #68
Сергей
Сергей
01 сентября 2017, 00:14
9
0
Тщательно пережевав это modx.pro/help/7693/#comment-53831, решил свой вопрос — Как вывести два фото к каждому товару на странице категории:
в шаблоне категории вызываю список товаров так:
[[!pdoPage?
	&element=`msProducts`
	&loadModels=`gallery`
	&leftJoin=`{
		"360x270": {"class":"msProductFile","alias":"360x270", "on": "360x270.product_id = msProduct.id AND 360x270.path LIKE '%/360x270/' AND 360x270.rank=0"}
		,"360x270x1": {"class":"msProductFile","alias":"360x270x1", "on": "360x270x1.product_id = msProduct.id AND 360x270x1.path LIKE '%/360x270/' AND 360x270x1.rank=1"}
	}`
	&select=`{
		"msProduct":"*"
		,"360x270":"360x270.url as 360x270"
		,"360x270x1":"360x270x1.url as 360x270x1"
	}`
]]
и в чанке tpl.msProducts.row.php вывожу ДВА фото товара так:
<img src="[[+360x270:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]">
<img src="[[+360x270x1:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]">
Количество запросов снизилось вдвое, время загрузки страницы упало в полтора раза.
Извините, если кому наступил на мозоль, разжевав досконально, я знаю, что тут это не приветствуется...)))
Konstantin
25 августа 2017, 17:48
1
0
Была похожая задача… Решил с помощью CitySelect, за что Володе спасибо.
Зачем создавать дополнительные TV, достаточно стандартного поля «Цена», там же наверняка какой-то процент добавляется или убирается в зависимости от города? А дальше
[[!citySelect.Settlement]]
    {set $voronej = $_modx->resource.price + $_modx->resource.price/100*5}
    {set $rostov = $_modx->resource.price + $_modx->resource.price/100*7}

    {if $.settlement.name == 'Москва'}
    {$_modx->resource.price}
    {/if}
     
    {if $.settlement.name == 'Воронеж'}
    {$voronej} 
    {/if}
    
    {if $.settlement.name == 'Ростов'}
    {$rostov} 
    {/if}
Хотя уверен, что есть варианты проще этого.
Павел Гвоздь
24 августа 2017, 19:11
4
0
Так а чего там решать, все просто до ужаса:
if ($modx->event->name == 'OnDocFormSave' && $mode == 'new' && is_object($resource) && $resource->get('class_key') == 'msProduct') {
    $resource->set('alias', ($resource->get('alias') . '-' . $id));
    $resource->save();
}
Василий Наумкин
13 июля 2017, 11:46
6
+5
Гораздо проще и лучше просто вызвать свой скрипт после default.js от ms2 и перезаписать там объект miniShop2.Message:
miniShop2.Message = {
	success: function() {},
	error: function() {},
	info: function() {},
};

В modstore.pro, например, сделано вообще вот так:
miniShop2.Message = App.utils.Message;
Поэтому все уведомления от ms2 работают через общую систему уведомлений сайта.
Гриборий
01 июля 2017, 18:26
2
+1
$resources = $modx->getCollection('modResource', [
    'class_key' => 'msProduct'
    ]);
foreach ($resources as $res) {
    $res->save();
}
Проще, конечно, через «консоль» запускать.
Андрей
16 июня 2017, 07:51
2
+1
Там стандартные опции color, size задаются так
$product->set('color', array('черный', 'белый'));

А те опции которые создаешь сам так
$options = array(
	'option1' => array('value1', 'value2'),
	'option2' => array('value1', 'value2')
);

$product->set('options', $options);
Александр
29 мая 2017, 12:44
1
+1
Привет, да тут на самом деле то и делиться нечем, AjaxForm по сути представляет из себя обертку в которой можно вызвать почти любой снипет — я так и сделал вместо Formit пишешь в параметрах Sendex и все параметры относящиеся к нему:
[[!AjaxForm?
    &snippet=`Sendex`
    &id=``
    &tplActivate=``
    и так далее (все параметры что тебе нужны)
]]
Семён Кудрявцев
01 мая 2017, 06:20
3
+4
У miniShop2 есть системная настройка — ms2_cart_max_count (точнее её по-умолчанию нет, но логика её работы предусмотрена) — так вот она делает всё, что Вам нужно. Просто создайте её и укажите значение 1, после этого добавить в корзину можно будет только один товар.
Николай Каленников
01 мая 2017, 05:06
1
0
Или вот так можно — плагин на событие перед добавлением в корзину msOnBeforeAddToCart
//перед добавлением в Корзину
if ($modx->event->name != 'msOnBeforeAddToCart') {
    return;
}
if ($product->get('id') != "id товара") {
   return;  
}
$tmp = $cart->get();
foreach ($tmp as $tm)  {
	 if ($tm['id'] == "id товара") {   
          $modx->event->output('...........Сообщение об ошибке...........'); //прерывает добавление   
           return;
       }
}
И в корзине блокируем изменение элемента с количеством товара — в чанке tpl.msCart 43 строка
<input type="number" name="count" value="{$product.count}"
class="input-sm form-control" {$product.id == 'id товара' ? 'readonly' :''}/>
Чанк лучше переподключить свой, чтобы при обновлении изменения не затерлись.