Ответить Новая тема Новый опрос 
 Атрибут "цвет" на странице категорий
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


12-08-2014 05:12
Подскажите, пожалуйста, как добавить цвета товара на странице категорий, т.е. под фотографией товара полоска с доступными цветами этого товара. Пробовал вставлять код из страницы с товаром, но на странице категорий это не работает. Заранее спасибо!
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


12-08-2014 12:12
Если необходимы только названия цветов:
Откройте /themes/ваша-тема/product-list.tpl
после:
Код:
{foreach from=$products item=product name=products}

добавьте:
Код:
{assign var="attr" value=Product::getAttributesInformationsByProduct($product.id_product)}

и ниже:
Код:
{if $attr}
        {foreach $attr as $at}
            {if $at.id_attribute_group == 2}
            {$at.attribute}
            {/if}
        {/foreach}
        {/if}

Код:
2
- измените на соотв. глобальный ID группы содержащий цвет.


Если необходим и код цвета:
Откройте /controllers/front/CategoryController.php
после:
Код:
if ($product['id_product_attribute'] && isset($product['product_attribute_minimal_quantity']))
                $product['minimal_quantity'] = $product['product_attribute_minimal_quantity'];


добавьте:
Код:
$_product = new Product ((int)$product['id_product']);
            $attributes_groups = $_product->getAttributesGroups($this->context->language->id);
            if (is_array($attributes_groups) && $attributes_groups)
            {
                foreach ($attributes_groups as $k => $row)
                {
                    if ((isset($row['attribute_color']) && $row['attribute_color']) || (file_exists(_PS_COL_IMG_DIR_.$row['id_attribute'].'.jpg')))
                    {
                        $colors[$row['id_attribute']]['value'] = $row['attribute_color'];
                        $colors[$row['id_attribute']]['name'] = $row['attribute_name'];
                        if (!isset($colors[$row['id_attribute']]['attributes_quantity']))
                            $colors[$row['id_attribute']]['attributes_quantity'] = 0;
                        $colors[$row['id_attribute']]['attributes_quantity'] += (int)$row['quantity'];
                    }
                }
                $product['colors'] = (count($colors)) ? $colors : false;
            }


В шаблоне /themes/ваша-тема/product-list.tpl используйте:
Код:
{if isset($product.colors) && $product.colors}
            <ul class="colors">
            {foreach from=$product.colors key='id_attribute' item='color'}
                <li><span style="background: {$color.value};" title="{$color.name}">{$color.name}</span></li>
            {/foreach}
            </ul>
        {/if}
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


12-08-2014 16:57
Все сделал, цвета стали выводиться, но почему то на многих товарах выводятся те цвета, которых нет в товаре. В чем может быть проблема? Проверял отдельно товары и никакой связи ненужных цветов с товаром нет.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


12-08-2014 17:08
Это при выводе вместе с цветами. А если выводить просто название цветов, то все нормально. И самое интересное, что чем дальше по товарам, тем больше появляется цветов. Т.е. у первого товара 4 правильных цвета, у следующего 5 цветов(хотя должно быть 2), у следующего 6 и постоянно остаются первые 4 цвета и добавляются новые и так далее, у поcледнего вообще все возможные цвета.


Сообщение отредактировано baton94 12-08-2014 18:18 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


12-08-2014 21:12
Все разобрался, все работает, остался только один вопрос: как сделать так чтобы где надо показывалась картинка цвета, а где не надо там просто цвет фона, ну т.е. как в самом товаре происходит?
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


13-08-2014 08:52
Цитата:( baton94 @ 12-08-2014 22:12 Смотреть сообщение )
как сделать так чтобы где надо показывалась картинка цвета, а где не надо там просто цвет фона, ну т.е. как в самом товаре происходит?


Откройте /controllers/front/CategoryController.php и перед:
Код:
$this->context->smarty->assign('nb_products', $this->nbProducts);

добавьте:
Код:
$this->context->smarty->assign('col_img_dir', _PS_COL_IMG_DIR_);


В шаблоне /themes/ваша-тема/product-list.tpl используйте:
Код:
{if isset($product.colors) && $product.colors}
            <ul class="colors">
            {foreach from=$product.colors key='id_attribute' item='color'}
                <li><span style="background: {$color.value};" title="{$color.name}">{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />{else}{$color.name}{/if}</span></li>
            {/foreach}
            </ul>
        {/if}
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


13-08-2014 20:24
Картинки появились, но цвета снова начали плодиться. Вообще не знаю в чем прикол(
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


14-08-2014 14:27
Цитата:( baton94 @ 13-08-2014 21:24 Смотреть сообщение )
Картинки появились, но цвета снова начали плодиться.


Откройте /controllers/front/CategoryController.php и до:
Код:
$_product = new Product ((int)$product['id_product']);

добавьте:
Код:
$colors = NULL;
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


14-08-2014 18:20
Да, все получилось. Огромное вам спасибо!
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос