Кривая смена изображений при выборе опций

Тема в разделе "Общие вопросы", создана пользователем dofus, 13 мар 2023.

  1. dofus

    dofus Пользователь

    Сообщения:
    85
    Симпатии:
    1
    Ребята, всем привет!

    Прошу помочь разобраться мне в такой веселой магии

    Пример страницы https://nikaural.ru/bytovaya-khimiya/nika-super-sredstvo-dlja-mytja-posudy-koncentrat

    Стоит модуль смены изображений при выборе опций
    Код отвечающий за это в product.twig
    Код:
    {% if thumb %}
                        <div class="item d-flex justify-content-center">
                          <meta itemprop="image" content="{{ thumb }}">
                                            <a href="{{ popup }}" title="{{ heading_title }}" target="_blank" onclick="psw_show(0);return false" class="d-block position-relative">
                            <svg class="d-block img-fluid w-100" width="{{ thumb_width }}" height="{{ thumb_height }}" xmlns="http://www.w3.org/2000/svg"></svg>
                            {% if catalog_page_lazy %}
                            <picture>
                              {% if thumb2x %}
                              <source class="owl-lazy" data-srcset="{{ thumb }} 1x, {{ thumb2x }} 2x, {{ thumb3x }} 3x, {{ thumb4x }} 4x" srcset="{{ thumb_holder }}">
                              {% endif %}
                              <img src="{{ thumb_holder }}" data-src="{{ thumb }}" alt="{{ heading_title }}" class="position-absolute b-0 l-0 img-fluid d-block w-100 owl-lazy">
                            </picture>
                            <div class="d-flex justify-content-center align-items-center position-absolute t-0 b-0 r-0 l-0 w-100 h-100 lazy-spinner g-{{loop.index}}">
                              <div class="spinner-border text-gray-400"></div>
                            </div>
                            {% else %}
                            <picture>
                              {% if thumb2x %}
                              <source srcset="{{ thumb }} 1x, {{ thumb2x }} 2x, {{ thumb3x }} 3x, {{ thumb4x }} 4x">
                              {% endif %}
                              <img src="{{ thumb }}" alt="{{ heading_title }}" class="position-absolute t-0 l-0 img-fluid d-block w-100">
                            </picture>
                            {% endif %}

    JS модуля
    Код:
    function changeOptionImage(elem, setting) {
        $(elem + ' input:checked, ' + elem + ' option:selected').each(function() {
            if (typeof $(this).data('product-image-popup') != 'undefined') {
                $(setting.popup_element).prop(setting.popup_attr, $(this).data('product-image-popup'));
            }
            
            if (typeof $(this).data('product-image-thumb') != 'undefined') {
                $(setting.thumb_element).prop(setting.thumb_attr, $(this).data('product-image-thumb'));
            }
        });
    }

    Так вот в чем проблема:

    Когда мы заходим на страницу товара, показывает главное изображение продукта
    upload_2023-3-13_17-5-33.png

    При выборе иной фасовки, изображение вроде меняется, но есть две проблемы:

    1. Если мы вернемся к изначальной фасовке, то изображение не меняется на главное
    2. Если мы нажимаем на фото, то в любом случае всплывает главное, не смотря на то, какая опция выбрана и какое фото соответствует этой опции

    За реальную помощь буду очень благодарен и даже готов отблагодарить материально =)
     
  2. dofus

    dofus Пользователь

    Сообщения:
    85
    Симпатии:
    1
    Пока сообщение писал, с первой проблемой разобрался, вторая актуальна

    На всякий случай модификатор полностью
    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
        <name>Options Image</name>
        <code>options_image.ocmod</code>
        <author>http://seregin-pro.ru/</author>
        <version>1.0.0</version>
        <link>http://seregin-pro.ru/</link>
        
        <!-- 3.x -->
        
        <!-- systen -->
        
        <file path="system/library/cart/cart.php">
            <operation>
                <search index="0"><![CDATA[SELECT pov.option_value_id]]></search>
                <add position="replace"><![CDATA[SELECT pov.option_value_id, pov.product_image]]></add>
            </operation>
            <operation>
                <search index="0"><![CDATA[if ($option_value_query->num_rows]]></search>
                <add position="before"><![CDATA[
                    if ($option_value_query->row['product_image']) {
                        $product_query->row['image'] = $option_value_query->row['product_image'];
                    }
                ]]></add>
            </operation>
        </file>
        
        <!-- controller -->
        
        <file path="catalog/controller/product/product.php">
            <operation>
                <search index="0"><![CDATA[
                    public function index
                ]]></search>
                <add position="after"><![CDATA[
                    $this->load->model('extension/module/options_image');
                    
                    $this->document->addScript('catalog/view/javascript/options_image/options_image.js');
                    $data['options_image_setting'] = $this->model_extension_module_options_image->getOptionsImageSetting();
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[$product_option_value_data[] = array(]]></search>
                <add position="after"><![CDATA[
                    'product_image_popup' => $option_value['product_image'] ? $this->model_tool_image->resize($option_value['product_image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')) : '',
                    'product_image_thumb' => $option_value['product_image'] ? $this->model_tool_image->resize($option_value['product_image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')) : '',
                ]]></add>
            </operation>
        </file>
        <file path="admin/controller/catalog/product.php">
            <operation>
                <search><![CDATA[$data['product_options'] = array();]]></search>
                <add position="before"><![CDATA[
                    $this->load->model('tool/image');
                ]]></add>
            </operation>
            <operation>
                <search index="0"><![CDATA[$product_option_value_data[] = array(]]></search>
                <add position="before"><![CDATA[
                    if (is_file(DIR_IMAGE . $product_option_value['product_image'])) {
                        $product_image = $product_option_value['product_image'];
                        $product_image_thumb = $product_option_value['product_image'];
                    } else {
                        $product_image = '';
                        $product_image_thumb = 'no_image.png';
                    }
                ]]></add>
            </operation>
            <operation>
                <search index="0"><![CDATA[$product_option_value_data[] = array(]]></search>
                <add position="after"><![CDATA[
                    'product_image'       => $product_image,
                    'product_image_thumb' => $this->model_tool_image->resize($product_image_thumb, 100, 100),
                ]]></add>
            </operation>
        </file>
        
        <!-- view -->
        
        <file path="catalog/view/theme/*/template/product/product.twig">
            <operation>
                <search><![CDATA[type="radio" name="option[{{ option.product_option_id }}]"]]></search>
                <add position="replace"><![CDATA[{% if option_value.product_image_thumb %} data-product-image-thumb="{{ option_value.product_image_thumb }}"{% endif %}{% if option_value.product_image_popup %} data-product-image-popup="{{ option_value.product_image_popup }}"{% endif %}type="radio" name="option[{{ option.product_option_id }}]"]]></add>
            </operation>
            <operation>
                <search><![CDATA[<option value="{{ option_value.product_option_value_id }}"]]></search>
                <add position="replace"><![CDATA[<option{% if option_value.product_image_thumb %} data-product-image-thumb="{{ option_value.product_image_thumb }}"{% endif %}{% if option_value.product_image_popup %} data-product-image-popup="{{ option_value.product_image_popup }}"{% endif %} value="{{ option_value.product_option_value_id }}"]]></add>
            </operation>
            <operation>
                <search index="0"><![CDATA[name="quantity"]]></search>
                <add position="before"><![CDATA[
                    {% if options %}
                    <script type="text/javascript"><!--
                    $(document).ready(function() {
                        options_image_setting = {};
                        
                        options_image_setting.popup_element = "{{ options_image_setting.product_popup_element }}";
                        options_image_setting.popup_attr    = "{{ options_image_setting.product_popup_attr }}";
                        options_image_setting.thumb_element = "{{ options_image_setting.product_thumb_element }}";
                        options_image_setting.thumb_attr    = "{{ options_image_setting.product_thumb_attr }}";
                        
                        $('#product input[type=\'radio\'], #product input[type=\'checkbox\'], #product select').on('change', function() {
                            changeOptionImage('#product', options_image_setting);
                        });
                    });
                    //--></script>
                    {% endif %}
                ]]></add>
            </operation>
        </file>
        <file path="admin/view/template/catalog/product_form.twig">
            <operation>
                <search index="0,2"><![CDATA[<td class="text-right">{{ entry_quantity }}</td>]]></search>
                <add position="replace"><![CDATA[<td class="text-center">{{ entry_image }}</td><td class="text-right">{{ entry_quantity }}</td>]]></add>
            </operation>
            <operation>
                <search><![CDATA[<td class="text-right"><input type="text" name="product_option[{{ option_row }}][product_option_value][{{ option_value_row }}][quantity]"]]></search>
                <add position="before"><![CDATA[
                    <td class="text-center">
                      <a href="" id="product-option-thumb-image{{ option_row }}{{ option_value_row }}" data-toggle="image" class="img-thumbnail"><img src="{{ product_option_value.product_image_thumb }}" alt="" title="" data-placeholder="{{ placeholder }}" /></a>
                      <input type="hidden" name="product_option[{{ option_row }}][product_option_value][{{ option_value_row }}][product_image]" value="{{ product_option_value.product_image }}" id="input-product-option-image{{ option_row }}{{ option_value_row }}" />
                    </td>
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[html += '  <td class="text-right"><input type="text" name="product_option[' + option_row + '][product_option_value][' + option_value_row + '][quantity]"]]></search>
                <add position="before"><![CDATA[
                    html += '<td class="text-center"><a href="" id="product-option-thumb-image' + option_row + option_value_row + '" data-toggle="image" class="img-thumbnail"><img src="{{ placeholder }}" alt="" title="" data-placeholder="{{ placeholder }}" /></a><input type="hidden" name="product_option[' + option_row + '][product_option_value][' + option_value_row + '][product_image]" value="" id="input-product-option-image'+ option_row + option_value_row + '" /></td>';
                ]]></add>
            </operation>
            <operation error="skip">
                <search index="0,2"><![CDATA[<td colspan="6"></td>]]></search>
                <add position="replace"><![CDATA[<td colspan="7"></td>]]></add>
            </operation>
        </file>
        
        <!-- model -->
        
        <file path="catalog/model/catalog/product.php">
            <operation>
                <search><![CDATA[
                    $product_option_value['quantity'],
                ]]></search>
                <add position="after"><![CDATA[
                    'product_image' => $product_option_value['product_image'],
                ]]></add>
            </operation>
        </file>
        <file path="admin/model/catalog/product.php">
            <operation>
                <search><![CDATA[
                    $product_option_value['quantity'],
                ]]></search>
                <add position="after"><![CDATA[
                    'product_image' => $product_option_value['product_image'],
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[pov.quantity,]]></search>
                <add position="replace"><![CDATA[pov.product_image, pov.quantity,]]></add>
            </operation>
            <operation>
                <search><![CDATA[quantity = '" . (int)$product_option_value['quantity'] . "']]></search>
                <add position="replace"><![CDATA[product_image = '" . $this->db->escape($product_option_value['product_image']) . "', quantity = '" . (int)$product_option_value['quantity'] . "']]></add>
            </operation>
        </file>
        
    </modification>
     
  3. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    833
    Симпатии:
    94
    у вас при смене изображения не изменяется картинка для всплывающего окна https://skr.sh/sIpfQNYpbzD
     
    dofus нравится это.
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.876
    Симпатии:
    1.064
    У Вас просто модуль не донастроен (не указан селектор). Напишите автору, за вознаграждение точно донастроит как надо.

    И еще, откажитесь от кириллических имен в названии изображений.
     
    dofus нравится это.
  5. dofus

    dofus Пользователь

    Сообщения:
    85
    Симпатии:
    1
    Да я бы рад, но автор не выходит на связь (
    Может Вы поможете??)

    В части кириллицы абсолютно согласен, но не я решаю