Автор Тема: Таблица комбинации в админ панели товары  (Прочитано 459 раз)

20 Ноября 2015, 12:01:54
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем доброго дня!
В админ панели товары, есть комбинации товара.
При открытии выводиться таблица созданых комбинаций.
Вопрос.. Где формируется в админке данная таблица.
Где искать SQL запрос для выбора  данных для этой таблици.
Или как можно выбрать все комбинации для данного товара по $product->id с фильтром $product->quantity.
То есть SQL запрос  SELECT..FROM.. и тд.
Спасибо!
20 Ноября 2015, 12:33:53
Ответ #1
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22094
  • Репутация: +17108/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
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 ?
Решение всех Ваших вопросов в создании Интернет-магазина.
20 Ноября 2015, 15:43:29
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо!! Благодарю.. Буду пробовать.
20 Ноября 2015, 17:32:48
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Поставил выше указанное в продукт контроллер, и передал в карточку товара.
$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?
Спасибо!!

20 Ноября 2015, 20:51:01
Ответ #4
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85945
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
{foreach from=$atribOPT item=atrib}
    {$atrib.name}
{/foreach}
22 Ноября 2015, 10:35:45
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо!! Длагодарен! Всем всего доброго!
22 Ноября 2015, 12:07:32
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите почему выдает ошибку
{
 $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
Спасибо!
22 Ноября 2015, 13:57:43
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 13126
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
WHERE  AND pq.`quantity` > 0 ';неправильно, AND не нужен.
22 Ноября 2015, 13:58:13
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
24 Ноября 2015, 16:29:35
Ответ #9
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем доброго дня или ночи!!
Пришлось вернуться к данной теме.
Дело вот в чем..
В админке в Доступное количество для продажи таблица в части правой, выводиться такая..
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, Цвет - Стальной
ну и т.д

Спасибо!
24 Ноября 2015, 16:55:16
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 20837
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
{foreach from=$atribOPT item=atrib}
    {$atrib|var_dump}
{/foreach}
Покажет ассоциированный массив. Смотрите, берете название  элемента массива и выводите в нужном месте.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
24 Ноября 2015, 17:43:38
Ответ #11
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо вам! Но вы наверное не так поняли.
Массив надо сформировать по выше примеру, тоесть запрос 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- Темно-серый

Спасибо!

24 Ноября 2015, 18:51:30
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 2158
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Чтоб так собрать, нужно по каждому товару отбирать комбинации в цикле, потом сохранять в массив.
24 Ноября 2015, 18:55:53
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 13126
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Замените
GROUP_CONCAT(DISTINCT(pal.`name`) SEPARATOR ", ") as `combination`на
pal.`name`так сможете выбрать каждую комбинацию отдельно. Потом группируя по id_product можете выводить комбинации каждого товара.
24 Ноября 2015, 20:28:03
Ответ #14
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо Nikola , Adik и всем кто ответил! Удачки вам. Буду пробовать..
Ну тогда резонный вопрос, при выводе в админе Доступное количество  выводиться уже такая информация, в таком порядке.
Подскажите  где этот выбор идет, естественно там идет по выбору ид продукта все комдинации..,тогда можно уже переделать..
Хотя ваш совет то-же сейчас задействую.
Еще раз спасибо!