Вид списка товаров таблицей
        Поздравляю всех мужчин с праздником!
Есть три вида списка товаров: списком, сеткой, таблицей.
С первыми двумя проблем не возникло, для третьего вида необходимо было скрывать правый столбец с информацией, чтобы таблице больше места было. С этим тоже всё достаточно легко:
    
    
                                                                                
            Есть три вида списка товаров: списком, сеткой, таблицей.
С первыми двумя проблем не возникло, для третьего вида необходимо было скрывать правый столбец с информацией, чтобы таблице больше места было. С этим тоже всё достаточно легко:
$('a.three').click(function() {
	  $('.span9').removeClass('col-xs-9').addClass('col-xs-12');
	  $('.rightBlock').addClass('hidden');Но вот результаты обернуть в код таблицы, так и не получилось, пытался так: $("#mse2_results").wrapInner("<table class='table table-bordered'><thead><tr class='gray'><th class='text-center'>Артикул</th><th class='text-center'>Наименование</th><th class='text-center'>Цена</th><th class='text-center'>Количество</th><th class='text-center'>В корзину</th></tr></thead><tbody>")Но как-то тихо всё. Буду рад любой подсказке!    Комментарии: 23
                Именно из-за подобного все давно перешли на вёрстку блоками.            
                    
                Василий, то есть с помощью стилей оформить? И внешне будет выглядеть, как таблица, правильно понимаю? А как шапку этой самой таблицы в таком случае сделать? Также скриптом добавлять?            
                    
                Шапку можно вывести сразу, скрытой.
А потом показать.
                    А потом показать.
                Спасибо большое, Василий! Переделал, как вы подсказали – всё отлично работает!            
                    
                Василий, при добавлении товара в корзину кнопку меняю скриптом таким образом:
Как можно закрепить этот эффект? То есть, если товар в корзине, то кнопка другая. Искал решение, но не додумался, как это реализовать. Подскажи, пожалуйста.
                    if (typeof(miniShop2) != 'undefined') {
    // кнопки В корзину/Оформить
    miniShop2.Callbacks.Cart.add.response.success = function(response) {
        miniShop2.Order.getcost();
        miniShop2.sendData.$form.find('.btn-cart').addClass('hidden');
        miniShop2.sendData.$form.find('.btn-checkout').removeClass('hidden');
    };
    miniShop2.Callbacks.Cart.remove.response.success = function() {
        miniShop2.sendData.$form.find('.btn-cart').removeClass('hidden');
        miniShop2.sendData.$form.find('.btn-checkout').addClass('hidden');
    };
}И всё классно, но после обновления страницы, естественно, весь эффект пропадает. Как можно закрепить этот эффект? То есть, если товар в корзине, то кнопка другая. Искал решение, но не додумался, как это реализовать. Подскажи, пожалуйста.
                Нужен сниппет на php, который будет проверять наличие товара в корзине и выводить кнопки с нужными классами.            
                    
                Спасибо!            
                    
                Собрал такой сниппет: 
                    <?php
$miniShop2 = $modx->getService('minishop2','miniShop2',
	MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
if (!($miniShop2 instanceof miniShop2)) return '';
$miniShop2->initialize($modx->context->key, $scriptProperties);
$idd = $modx->resource->get('id');
$cart = $miniShop2->cart->get();
$kolvo = 0;
foreach($cart as $value)
	{if ($value['id'] == $idd)
		{$kolvo += $value['count'];}}
print_r($kolvo);Отлично работает на странице товара, а в галерее и в категориях(mFilter2) – нет, товар в корзине, выводит 0. Что не так делаю, подскажи, пожалуйста:)            
                Потому что галереи и категории нет в корзине. Ты же берешь id текущего ресурса:
                    $idd = $modx->resource->get('id');            
                И тут я застрял… Как же получить id непосредственно товара?            
                    
                Наверное, как-то его передать в вызов сниппета?
Как обычно в сниппеты передаются параметры, подумай.
                    Как обычно в сниппеты передаются параметры, подумай.
                Спасибо, Василий за подсказки! Чем давать рыбу, лучше удочку)) 
Но почему-то не всегда сниппет работает как нужно. Где что не так делаю?
                    <?php
$miniShop2 = $modx->getService('minishop2','miniShop2',
	MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
if (!($miniShop2 instanceof miniShop2)) return '';
$miniShop2->initialize($modx->context->key, $scriptProperties);
if (empty($idd)) {$idd = $modx->resource->id;}
$cart = $miniShop2->cart->get();
$kolvo = 0;
foreach($cart as $value)
	{if ($value['id'] == $idd)
		{$kolvo += $value['count'];}}
$modx->setPlaceholder('countP', $kolvo);
//вот этот кусок не знаю, нужен ли
$toPlaceholder = $modx->getOption('toPlaceholder',$scriptProperties,false);
if (!empty($toPlaceholder)) {
	$modx->setPlaceholder($toPlaceholder,$output);
	return '';
}
//конец "ненужного" куска
return $kolvo;Сниппет таким образом: [[!+countP? &idd=`[[+id:default=`[[*id]]`]]`]]ID передаётся правильно (может лишнее, конечно, и в сниппете проверять на пустоту ID и в вызове сниппета), думаю ещё отправлять результат сниппета в плейсхолдер [[!+countP? &idd=`[[+id:default=`[[*id]]`]]` &toPlaceholder=`countP`]] и в кнопке условие сделать – если результат >0, то одна кнопка, если =0, вторая. Но почему-то не всегда сниппет работает как нужно. Где что не так делаю?
                Не нужно никаких плейсхолдеров, просто сделай tpl1 и tpl2 и выдавай их в зависимости от того, находится ли товар в корзине.
Вызывать так:
На опечатки не проверял, принцип должен быть ясен.
                    <?php
// Параметры
$idd = $modx->getOption('idd', $scriptProperties, $modx->resource->id);
$tplIn = $modx->getOption('tplIn', $scriptProperties, '@INLINE Товар в корзине, цена = [[+price]]'); 
$tplOut = $modx->getOption('tplOut', $scriptProperties, '@INLINE Товара в корзине нет'); 
// Классы для работы
$pdo = $modx->getService('pdoTools');
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($modx->context->key, $scriptProperties);
$cart = $miniShop2->cart->get();
// Поехали
$found = false;
foreach($cart as $product) {
	if ($value['id'] == $idd) {
		$found = $product;
		break;
	}
return $found
	? $modx->getChunk($tplIn, $found)
	: $modx->getChunk($tplOut);Вызывать так:
[[!myButton?&idd=`[[+id]]`]]Можно указывать и чанки tplIn и tplOut.На опечатки не проверял, принцип должен быть ясен.
                Наконец-то добился результата) Спасибо большое, Василий, за направление на путь истинный))
Чуть доработал код и вот результат:
                    Чуть доработал код и вот результат:
<?php
// Параметры
$idd = $modx->getOption('idd', $scriptProperties, $modx->resource->id);
$tplIn = $modx->getOption('tplIn', $scriptProperties, '@INLINE Товар в корзине, цена = [[+price]]'); 
$tplOut = $modx->getOption('tplOut', $scriptProperties, '@INLINE Товара в корзине нет'); 
// Классы для работы
$pdo = $modx->getService('pdoTools');
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($modx->context->key, $scriptProperties);
$cart = $miniShop2->cart->get();
// Поехали
$found = false;
foreach($cart as $value) {
	if ($value['id'] == $idd) {
		$found = $value['id'];
		break;
	}
}
$found != false 
    ?   $result = $modx->getChunk('tplIn', 'found')
    :	$result = $modx->getChunk('tplOut');
return $result;Теперь всё работает, как надо!            
                Вот здесь ошибка
Соотвественно мне непонятно, зачем у тебя
В общем, если не хочешь в чанке использовать данные корзины, то убери вообще 'found', потому что строку вторым параметром метод pdoTools::getChunk() не ожидает — это ошибка.
Если же хочешь — то перепиши как у меня в примере, чтобы на кнопке можно было вывести «Оформить 5 этих товаров на сумму 300 руб»
                    $found != false 
    ?   $result = $modx->getChunk('tplIn', 'found')
    :	$result = $modx->getChunk('tplOut');Ты передаёшь строку 'found', а я передавал переменную $found. Это позволило бы использовать в чанке данные о товаре из корзины: количество и цену.Соотвественно мне непонятно, зачем у тебя
$found = $value['id'];когда в $found должен быть просто не false — так уж лучше в него записать true.В общем, если не хочешь в чанке использовать данные корзины, то убери вообще 'found', потому что строку вторым параметром метод pdoTools::getChunk() не ожидает — это ошибка.
Если же хочешь — то перепиши как у меня в примере, чтобы на кнопке можно было вывести «Оформить 5 этих товаров на сумму 300 руб»
                Вот твой пример, чуть подкорректирован, создал два чанка tplIn1 и tplOut1, товар в корзине, выводит, что товара нет (tplOut), что не так?
                    $found = false;
foreach($cart as $product) {
	if ($value['id'] == $idd) {
		$found = $product;
		break;
	}
}  //не было в твоём примере
return $found
	? $modx->getChunk('tplIn1', 'found') // здесь было ($tplIn, $found), ниже также
	: $modx->getChunk('tplOut1');            if ($value['id'] == $idd) {Должно бытьif ($product['id'] == $idd) {Я же говорю — не проверял на опечатки.$modx->getChunk('tplIn1', 'found')Ты разницу между переменными $tplIn $found и строками 'tplIn' и 'found' вообще не понимаешь?            
                каюсь, пока не силён в php)
А так совсем ничего не выводит…
                    А так совсем ничего не выводит…
foreach($cart as $product) {
	if ($product['id'] == $idd) {
		$found = $product;
		break;
	}
}
return $found
	? $modx->getChunk($tplIn1, $found)
	: $modx->getChunk($tplOut1);            
                А вообще, в буквах?
У тебя в начале сниппета определяются $tplIn и tplOut. Откуда ты взял $tplIn1 и $tplOut1?
Давай уже повнимательнее, тут кода на 10 строк, а вопросов на неделю.
                    У тебя в начале сниппета определяются $tplIn и tplOut. Откуда ты взял $tplIn1 и $tplOut1?
Давай уже повнимательнее, тут кода на 10 строк, а вопросов на неделю.
<?php
// Параметры
$idd = $modx->getOption('idd', $scriptProperties, $modx->resource->id);
$tplIn1 = $modx->getOption('tplIn1', $scriptProperties, '@INLINE Товар в корзине, цена = [[+price]]'); 
$tplOut1 = $modx->getOption('tplOut1', $scriptProperties, '@INLINE Товара в корзине нет'); 
// Классы для работы
$pdo = $modx->getService('pdoTools');
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($modx->context->key, $scriptProperties);
$cart = $miniShop2->cart->get();
// Поехали
$found = false;
foreach($cart as $product) {
	if ($product['id'] == $idd) {
		$found = $product;
		break;
	}
}
return $found
	? $modx->getChunk($tplIn1, $found)
	: $modx->getChunk($tplOut1);У меня предыдущий сниппет работает с tplIn и tplOut, поэтому в этом tplIn1 и tplOut1, в начале тоже добавил единицу к ним. Вообще, даже в буквах не выводит)            
                А, ну да. Для INLINE чанков нужен pdoTools, а я там забыл его использовать.
Вот так работает:
                    Вот так работает:
return $found
	? $pdo->getChunk($tplIn1, $found)
	: $pdo->getChunk($tplOut1);            
                Супер! Теперь отлично работает! И твой функционал классно можно использовать с количеством и ценой. Спасибо большое, Василий! 
Можно ещё вопрос? :)
Искал решение по пересчету цен в корзине при стоимости свыше 10.000р., видел только по определенному количеству. В моём случае нужно писать сниппет и плагин на событие, и для динамического обновления (без обновления страницы) нужен скрипт. И в итоге вместо стандартного сниппета корзины вызывать свой. Я всё правильно понял?
                    Можно ещё вопрос? :)
Искал решение по пересчету цен в корзине при стоимости свыше 10.000р., видел только по определенному количеству. В моём случае нужно писать сниппет и плагин на событие, и для динамического обновления (без обновления страницы) нужен скрипт. И в итоге вместо стандартного сниппета корзины вызывать свой. Я всё правильно понял?
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.