Таблица комбинации в админ панели товары

Автор sus, 20 ноября 2015, 12:01:54

« назад - далее »

sus

Всем доброго дня!
В админ панели товары, есть комбинации товара.
При открытии выводиться таблица созданых комбинаций.
Вопрос.. Где формируется в админке данная таблица.
Где искать SQL запрос для выбора  данных для этой таблици.
Или как можно выбрать все комбинации для данного товара по $product->id с фильтром $product->quantity.
То есть SQL запрос  SELECT..FROM.. и тд.
Спасибо!

mAgency

SELECT p.id_product, pl.name, GROUP_CONCAT(DISTINCT(pal.name) SEPARATOR ", ") as combination, p.price, pq.quantity
FROM ps_product p
LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product)
LEFT JOIN ps_stock_available pq ON (p.id_product = pq.id_product AND pa.id_product_attribute = pq.id_product_attribute)
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_product_attribute_combination pac ON (pa.id_product_attribute = pac.id_product_attribute)
LEFT JOIN ps_attribute_lang pal ON (pac.id_attribute = pal.id_attribute)
WHERE pl.id_lang = 'id языка' AND pal.id_lang = 'id языка' AND pq.quantity ='количество'
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

sus

Спасибо!! Благодарю.. Буду пробовать.

sus

#3
Поставил выше указанное в продукт контроллер, и передал в карточку товара.
$sql = '

SELECT p.`id_product`, pl.`name`, GROUP_CONCAT(DISTINCT(pal.`name`) SEPARATOR ", ") as `combination`, p.`price`, pq.`quantity`
FROM '._DB_PREFIX_.'product p
LEFT JOIN `ps_product_attribute` pa ON (p.`id_product` = pa.`id_product`)
LEFT JOIN `ps_stock_available` pq ON (p.`id_product` = pq.`id_product` AND pa.`id_product_attribute` = pq.`id_product_attribute`)
LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product`)
LEFT JOIN `ps_product_attribute_combination` pac ON (pa.`id_product_attribute` = pac.`id_product_attribute`)
LEFT JOIN `ps_attribute_lang` pal ON (pac.`id_attribute` = pal.`id_attribute`)
WHERE  AND pq.`quantity` > 0 ';

$result = Db::getInstance()->getRow($sql);

this->context->smarty->assign('atribOPT', $result);


Прошу подсказать, как теперь перебрать значения в карточке товара из массива $atribOPT.
Массив я получу а как дальше, через foreach?
Спасибо!!


DarinSr


sus

Спасибо!! Длагодарен! Всем всего доброго!

sus

Подскажите почему выдает ошибку
{
$sql = '

SELECT p.`id_product`, pl.`name`, GROUP_CONCAT(DISTINCT(pal.`name`) SEPARATOR ", ") as `combination`, p.`price`, pq.`quantity`
FROM `ps_product` p
LEFT JOIN `ps_product_attribute` pa ON (p.`id_product` = pa.`id_product`)
LEFT JOIN `ps_stock_available` pq ON (p.`id_product` = pq.`id_product` AND pa.`id_product_attribute` = pq.`id_product_attribute`)
LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product`)
LEFT JOIN `ps_product_attribute_combination` pac ON (pa.`id_product_attribute` = pac.`id_product_attribute`)
LEFT JOIN `ps_attribute_lang` pal ON (pac.`id_attribute` = pal.`id_attribute`)
WHERE  AND pq.`quantity` > 0 ';

$result = Db::getInstance()->getRow($sql);

this->context->smarty->assign('atribOPT', $result);
}
Ошибка
Parse error: syntax error, unexpected T_OBJECT_OPERATOR in
Спасибо!

Adik


sus


sus

Всем доброго дня или ночи!!
Пришлось вернуться к данной теме.
Дело вот в чем..
В админке в Доступное количество для продажи таблица в части правой, выводиться такая..
144-744-12 - Полнота - N, Размер - 92, Цвет - Стальной
144-744-12 - Полнота - W, Размер - 92, Цвет - Стальной
144-744-12 - Полнота - EW, Размер - 92, Цвет - Стальной
144-744-12 - Полнота - S, Размер - 98, Цвет - Стальной
144-744-12 - Полнота - N, Размер - 98, Цвет - Стальной
ну и т.д
То-есть, полнота,размер,цвет.
По тому как выше было сделано...

$result = Db::getInstance()->executeS('
         SELECT p.id_product, pl.name, pal.name, GROUP_CONCAT(DISTINCT(pal.`name`) SEPARATOR ", ") as combination, p.`price`, pq.`quantity`
FROM `'._DB_PREFIX_.'product` p
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product`)
LEFT JOIN `'._DB_PREFIX_.'stock_available` pq ON (p.`id_product` = pq.`id_product` AND pa.`id_product_attribute` = pq.`id_product_attribute`)
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`)
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pa.`id_product_attribute` = pac.`id_product_attribute`)
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` pal ON (pac.`id_attribute` = pal.`id_attribute`)
WHERE pq.quantity = 0 AND p.id_product = '.$this->product->id.'
      ');
$this->context->smarty->assign('atribOPT', $result);

То-есть, выборка комбинаций по product->id с количеством 0.
Это все хорошо, но при выводе..

{foreach from=$atribOPT item=atrib}
    {$atrib.combination}
{/foreach}

Я получаю такую строку
EW, Стальной, 92, S, 116, W, 146, 164, N, Темно-серый, 98, 140
Понятно, в одну строку с разделителем запятая. Ну это как-то корявенько.
Подскажите как можно выбрать по такому виду
144-744-12 - Полнота - N, Размер - 92, Цвет - Стальной
144-744-12 - Полнота - W, Размер - 92, Цвет - Стальной
144-744-12 - Полнота - EW, Размер - 92, Цвет - Стальной
144-744-12 - Полнота - S, Размер - 98, Цвет - Стальной
144-744-12 - Полнота - N, Размер - 98, Цвет - Стальной
ну и т.д

Спасибо!

PrestaMan

{foreach from=$atribOPT item=atrib}
    {$atrib|var_dump}
{/foreach}

Покажет ассоциированный массив. Смотрите, берете название  элемента массива и выводите в нужном месте.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

sus

Спасибо вам! Но вы наверное не так поняли.
Массив надо сформировать по выше примеру, тоесть запрос SQL базы.
А дамп
array(5) { ["id_product"]=> string(2) "72" ["name"]=> string(2) "EW" ["combination"]=> string(80) "EW, Стальной, 92, S, 116, W, 146, 164, N, Темно-серый, 98, 140" ["price"]=> string(8) "0.000000" ["quantity"]=> string(1) "0" }
Получается одинарный массив, combination - выводит всю информацию не по комбинациям а  в одну строку.
Должно быть
EW- 92- Стальной
S - 116- Стальной
W- 146- Стальной
S- 164- Стальной
N- 98- Темно-серый
S- 140- Темно-серый

Спасибо!


Миколас

Чтоб так собрать, нужно по каждому товару отбирать комбинации в цикле, потом сохранять в массив.

Adik

Замените
GROUP_CONCAT(DISTINCT(pal.`name`) SEPARATOR ", ") as `combination`
на
pal.`name`
так сможете выбрать каждую комбинацию отдельно. Потом группируя по id_product можете выводить комбинации каждого товара.

sus

Спасибо Nikola , Adik и всем кто ответил! Удачки вам. Буду пробовать..
Ну тогда резонный вопрос, при выводе в админе Доступное количество  выводиться уже такая информация, в таком порядке.
Подскажите  где этот выбор идет, естественно там идет по выбору ид продукта все комдинации..,тогда можно уже переделать..
Хотя ваш совет то-же сейчас задействую.
Еще раз спасибо!