Олег Щавелев

Олег Щавелев

С нами с 20 января 2017; Место в рейтинге пользователей: #28
Артем
31 января 2020, 15:04
2
+1
{foreach $rows as $row}
    {$row@index + 1}
{/foreach}
или

{foreach $rows as $row index=$index}
    {$index + 1}
{/foreach}
mngatoff
02 декабря 2019, 02:23
6
+7
достаточно триггернуть событие change на input:count, и запрос отправится стандартными средствами минишопа.

я вот так делаю (немного вырвано из контекста, но принцип ясен):
<script>
$(document)
    .on('click touchend', countButton, function (e) { // где countButton - кнопки плюс и минус
        e.preventDefault();
        var $container = $(this).closest('.ms2_form'),
        $count = $container.find('[name="count"]'),
        num = $count.val();
        if (isNaN(num) === false) { // страховочка от, например, пустого поля
            num = parseInt(num, 10);
            switch ($(this).data('ms2-count')) { // соответственно, у кнопок должен быть атрибут data-ms2-count="plus или minus"
                case 'plus':
                    num = num + 1;
                    $count.val(num);
                    break;
                case 'minus':
                    if (num <= 1) return;
                    num = num - 1;
                    $count.val(num);
                    break;
            }
        } else {
            return false;
        }
        $count.trigger('change'); // инициализируем отправку на сервер.
    })
    .on('change keypress keyup', '.ms2_form [name="count"]', function() {
        if ($(this).val().match(/\D/)) {
            this.value = $(this).val().replace(/\D/g,''); // следим на лету, чтобы в поле были только цифры
        }
        if (parseInt($(this).val(), 10) < 1) {
            this.value = 1; // следим на лету, чтобы в поле было не меньше единицы
        }
    });
</script>
Олег Щавелев
26 ноября 2019, 13:10
1
0
1 Вариант PDOTools Fenom

{$_modx->regClientScript(«assets/js/ms2.js»)} вызываем в шаблоне или в чанке. Скрипт у меня рендирится кстати самым последнем.
Антон Тарасов
26 ноября 2019, 12:44
1
+1
Можно удалить по шаблону… или просто все товары без разбора. Например, вот — по шаблону:
$template = 1; 
$resources = $modx->getCollection('modResource', array('template'=>$template));
foreach($resources as $resource) {  
    $resource->remove();
}
Это если подчистую удалять.
Баха Волков
19 февраля 2019, 15:13
1
+1
Можно и массивом передавать:

'where' => [
    'parent:=' => 0,
    'AND:hidemenu:=' => 0,
    'OR:isfolder:=' => 1,
    'AND:hidemenu:=' => 0
],
Андрей
09 января 2019, 10:07
2
+1
Передавайте значение этого плейсхолдера в вызов mFilter2.

У mfilter есть параметр prepareSnippet, в нем указывается сниппет который будет обрабатывать результаты выборки.

код сниппета
$item = array_merge(
  (array) $row,
  array(
    'customData' => $modx->getOption('customData', $scriptProperties, '')
  )
);

return json_encode($item);

Теперь в вызове mfilter добавьте данные из плейсхолдера
'prepareSnippet' => 'название_сниппета',
'customData' => [
    'example' => $_modx->getPlaceholder('example')
]

Теперь в чанке c товаром будет доступен плейсхолдер {$customData.example}
Владимир
05 декабря 2018, 14:31
1
0
Решил проблему, может кому пригодится. Все это работает под extends modObjectGetListProcessor, в методе prepareQueryBeforeCount

$c->leftJoin('ordersClientSender', 'Client');
$c->leftJoin('ordersSender', 'Sender', '`Client`.`sender` = `Sender`.`id`');
$c->select($this->modx->getSelectColumns($this->classKey, $this->classKey));;
$c->select(array(
    'senders' => 'GROUP_CONCAT(Sender.name)'
));
$c->groupby($this->classKey.'.name');
Александр
20 сентября 2018, 09:00
1
0
Для решения помог плагин:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart':
        $tmp = $cart->get();
        $tmp[$key]['count'] = 1;
        $cart->set($tmp);
        break;
}
Вопрос, есть ли отличия в реализации: с помощью расширения обработчика корзины и плагина?
Вячеслав Варов
28 января 2018, 19:20
3
0
Вот рабочий пример
<div id="pdopage" class="catalog-line-core">
			{$_modx->runSnippet('!mSearch2', [
    				'returnIds' => 1, 
 				'limit' => 0,
    				'toPlaceholder' => 'result'
			])}
			{if $_modx->getPlaceholder('result')==''}
				По данному запросу ничего не найдено, попробуйте исправить запрос.
			{else}
				[[!pdoPage?
  					  &element=`msProducts`
  					  &parents=`0`
       					  &resources=`[[+result]]`
					  &limit=`9`
				]]
          </div>
			[[!+page.nav]]
{/if}
Александр
24 января 2018, 17:38
1
0
Разобрался. Забыл, что надо вызывать в mFilter не ms, а msoption.
Так работает:
[[!mFilter2?
	&parents=`1`
	&filters=`msoption|capacity`
]]