Вид списка товаров таблицей
Поздравляю всех мужчин с праздником!
Есть три вида списка товаров: списком, сеткой, таблицей.
С первыми двумя проблем не возникло, для третьего вида необходимо было скрывать правый столбец с информацией, чтобы таблице больше места было. С этим тоже всё достаточно легко:
Есть три вида списка товаров: списком, сеткой, таблицей.
С первыми двумя проблем не возникло, для третьего вида необходимо было скрывать правый столбец с информацией, чтобы таблице больше места было. С этим тоже всё достаточно легко:
$('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р., видел только по определенному количеству. В моём случае нужно писать сниппет и плагин на событие, и для динамического обновления (без обновления страницы) нужен скрипт. И в итоге вместо стандартного сниппета корзины вызывать свой. Я всё правильно понял?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.