[Помогите] Вывод опции "изображение" на странице категории

Тема в разделе "OpenCart", создана пользователем Vivec, 9 авг 2015.

  1. Vivec

    Vivec

    Регистрация:
    24 ноя 2014
    Сообщения:
    105
    Симпатии:
    15
    Нужно вывести кубики изображений цветов товаров, как на скрине, для 1.5. Направьте пожалуйста, как сделать? Решения, которые встречал для старых версий не работают. Модуль такой не нахожу.
    Важно то, что нужно вывести дефолтную опцию "изображения", т.к. есть модули которые создают новый тип опции с указанием цветов виде кода #fffccc. Такое не подходит, т.к. там картинки с текступами.
    [​IMG]
     
  2. Bnopen

    Bnopen Команда форума

    Регистрация:
    3 мар 2013
    Сообщения:
    1.155
    Симпатии:
    514
  3. Vivec

    Vivec

    Регистрация:
    24 ноя 2014
    Сообщения:
    105
    Симпатии:
    15
    Этот модуль добавляет неуместный функционал, что-то вроде взаимозависимых опций, с настройками. У меня куда более банальная потребность - просто продублировать опцию в категорию)
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.051
    Симпатии:
    778
    Использовать для такой задачи модули - это перебор.
    В /catalog/controller/product/category.php находите строку
    PHP:
    $this->data['products'][] = array(
    Перед ней добавляете:
    PHP:
    $product_options $this->model_catalog_product->getProductOptions($result['product_id']);
    И получаете все опции товара, если они у него есть, которые дальше можно подставить в массив $this->data['products'] для вывода в шаблон.

    Только это существенно добавит нагрузку.
     
    Vivec нравится это.
  5. Vivec

    Vivec

    Регистрация:
    24 ноя 2014
    Сообщения:
    105
    Симпатии:
    15
    Dotrox, пробую таким образом:
    Вставил
    PHP:
     $product_options $this->model_catalog_product->getProductOptions($result['product_id']); 
    Далее к $this->data['products'][] = array( добавил
    PHP:
    'options'   => $product_options,
    Потом в шаблоне категории, как обсуждалось в похожей теме, добавил:
    PHP:
    <?php if ($product['options']) { ?>
        <div class="options">
            <?php foreach ($product['options'] as $option) { ?>
            <?php if ($option['type'] == 'image') { ?>
            <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
              <?php if ($option['required']) { ?>
              <?php ?>
              <b><?php echo $option['name']; ?>:</b><br />
                <div class="option-image">
                    <?php foreach ($option['option_value'] as $option_value) { ?>              
                        <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name']  ?>" /></label>
                    <?php ?>
                </div>
            </div>
            <?php ?>      
            <?php ?>
        </div>
    <?php ?>
    Но, ни опций, ни ошибок не вывелось. Могли бы подсказать ошибку?
    (по php пока в первом класе)
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.051
    Симпатии:
    778
    Если задача только вывести доступные цвета, а не делать их выбор прямо в категории, то большая часть этого кода не нужна, а если нужен выбор, то нужно намного больше.
    Сделайте в контроллере так:
    PHP:
    $option_images = array();
    foreach(
    $product_options as $option){
        if (
    $option['type'] == 'image') {
            
    $option_images[] = $this->model_tool_image->resize($option['image'], 2525);
        }
    }

    Потом массив $option_images передаёте в шаблон, как вы это сделали с $product_options, и простым циклом там выводите из него изображения.
    PHP:
    <?php foreach ($product['options'] as $option_img) { ?>
        <img src="<?php echo $option_img?> />
    <?php ?>
    Только для начала проверьте, что у вас в $product_options выгружается.
     
    Vivec нравится это.
  7. Vivec

    Vivec

    Регистрация:
    24 ноя 2014
    Сообщения:
    105
    Симпатии:
    15
    Спасибо, что относитесь со вниманием к моему вопросу! Да, только вывести доступные цвета.
    Итак, внёс в контроллере:
    PHP:
     $option_images = array();
    foreach(
    $product_options as $option){
        if (
    $option['type'] == 'image') {
            
    $option_images[] = $this->model_tool_image->resize($option['image'], 2525);
        }
    }
    перед
    PHP:
     $this->data['products'][] = array( 
    Добавил послу к списку:
    PHP:
    'options'     => $option_images,    
    В шаблоне вставил
    PHP:
    <?php foreach ($product['options'] as $option_img) { ?>
        <img src="<?php echo $option_img?> />
    <?php ?>
    Ничего не вывелось, но выбило с полсотни ошибок:
    Код:
    Invalid argument supplied for foreach() in Z:\home\localhost\www\site\vqmod\vqcache\vq2-catalog_controller_product_category.php on line 361 
    Смотрю, этом месте этот же код:
    PHP:
    $option_images = array();
    foreach(
    $product_options as $option){
        if (
    $option['type'] == 'image') {
            
    $option_images[] = $this->model_tool_image->resize($option['image'], 2525);
        }
    }
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.051
    Симпатии:
    778
    Эм, ну я думал, проверку на то, что $product_options не пустой вы и сами додумаетесь добавить.

    Полный код выглядит так:

    PHP:
    $product_options $this->model_catalog_product->getProductOptions($result['product_id']);
    $option_images = array();
    if(!empty(
    $product_options)){
        foreach(
    $product_options as $option){
            if (
    $option['type'] == 'image') {
                
    $option_images[] = $this->model_tool_image->resize($option['image'], 2525);
            }
        }
    }
    И сделайте всё же дамп $product_options ($this->log->write($product_options)), потому что та название индексов или степень вложенности может отличаться и код всё равно работать не будет пока не подогнать его под содержимое $product_options.