Загрузка представления продукта в список категорий с помощью AJAX


Я пытаюсь загрузить блок просмотра продукта на странице списка категорий с помощью AJAX, используя Ajaxify. Все работает нормально, единственная проблема заключается в том, что поле параметров (дочерний файл "container1") загружено неправильно. Он не показывает параметры.

У кого-нибудь есть опыт в этом, может быть, пробовал что-то подобное? Я устанавливаю активный продукт в контроллере с помощью

$productId  = (int) $this->getRequest()->getParam('product_id');
Mage::helper('catalog/product')->initProduct($productId, $this);

Перед визуализацией макета.

Я думаю, что это как-то связано с тем фактом, что параметры добавляются в представление в другой части catalog.xml

[...]
<PRODUCT_TYPE_configurable translate="label" module="catalog">
   <label>Catalog Product View (Configurable)</label>
   <reference name="product.info">
      <block type="catalog/product_view_type_configurable" name="product.info.configurable" as="product_type_data" template="catalog/product/view/type/default.phtml">
         <block type="core/text_list" name="product.info.configurable.extra" as="product_type_data_extra" translate="label">
            <label>Product Extra Info</label>
         </block>
      </block>
   </reference>
   <reference name="product.info.options.wrapper">
      <block type="catalog/product_view_type_configurable" name="product.info.options.configurable" as="options_configurable" before="-" template="catalog/product/view/type/options/configurable.phtml"/>
   </reference>
</PRODUCT_TYPE_configurable>
[...]

Но я не уверен, в чем конкретно заключается проблема.

Я надеюсь, что кто-нибудь сможет указать мне правильное направление.

С уважением, Сандер Мангель

Author: Sander Mangel, 2013-04-04

3 answers

В прошлом у нас была аналогичная проблема при попытке ввести всплывающее окно быстрого просмотра на странице списка категорий. Вот несколько проблем, с которыми мы столкнулись: -

  • /js/varien/product.js & /js/varien/configurable.js по умолчанию не включены на странице списка категорий, которые необходимы для создания настраиваемых раскрывающихся списков. Встроенный JS ниже требует этого.

    <script type="text/javascript">
        var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
    </script>
    
  • Другая проблема, с которой мы столкнулись, заключалась в том, что при попытке включить более одного из них на страницу у нас возникали проблемы с дубликаты удостоверений личности, в любом случае это может не относиться к вам, но убедитесь, что у вас их несколько, вы уничтожите их при закрытии.

Мы сделали это, создав пустой файл контроллера, который позволяет нам использовать уникальный дескриптор макета, например". Который вы можете использовать в следующем формате xml.

 <custom_catalog_product_ajax_view>
        <update handle="catalog_product_view" />
        <remove name="html_calendar" />
        <reference name="root">
                <action method="setTemplate"><template>custom/catalog/ajax/product/response.phtml</template></action>
        </reference>
        <reference name="product.info">
                <action method="setTemplate"><template>custom/catalog/ajax/product/view.phtml</template></action>
                <action method="append">
                    <block>breadcrumbs</block>
                </action>
        </reference>
        <reference name="product.info.media">
                <action method="setTemplate"><template>custom/catalog/ajax/product/view/media.phtml</template></action>
        </reference>
        <reference name="product.info.options.configurable">
                <action method="setTemplate"><template>custom/catalog/ajax/product/view/type/options/configurable.phtml</template></action>
        </reference>
</custom_catalog_product_ajax_view>

Это означало, что мы могли бы включить соответствующие блоки и настроить некоторые аспекты обычной страницы продукта.

Мы также добавили это в дескриптор, чтобы включить необходимые файлы JS.

<catalog_category_default>
    <update handle="required_for_catalog_ajax_product_view" />
</catalog_category_default>

<required_for_catalog_ajax_product_view>
        <reference name="head">
                <action method="addJs"><script>varien/product.js</script></action>
                <action method="addJs"><script>varien/configurable.js</script></action>
        </reference>
</required_for_catalog_ajax_product_view> 

Наш файл response.phtml также выглядит так

<?php echo Zend_Json::encode(array(
'success' => true,
'html' => $this->getChildHtml('content'),
'optionsPrice' => $this->getOptionsPrice(),
'spConfig' => $this->getSpConfig()
));

Надеюсь, это поможет пролить некоторый свет на то, где вы ошибаетесь

 7
Author: lukefowell, 2016-03-24 15:35:33

Проблема в том, что параметры добавляются с помощью JavaScript, а не в виде HTML в catalog/product/view/type/options/configurable.html :

<script type="text/javascript">
    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>

Ваш сценарий Ajax, похоже, просто заменяет HTML, но не выполняет JS в нем. Вы должны выполнить эту часть вручную, но есть несколько способов сделать это:

  • предварительно сопоставьте все внутри тегов скрипта и вызовите это через eval
  • разделите вывод на части html и javascript, чтобы вы могли получить оба индивидуально
 1
Author: Tobias, 2013-04-07 09:13:12

Я смог продвинуться так далеко только с принятым ответом, представленным здесь. Чтобы заставить вещи работать с модальным загрузчиком Twitter, мне нужно было использовать Prototype для загрузки настраиваемого продукта и настроить его для запуска сценариев на возвращаемой странице:

new Ajax.Updater(target, product, {
    parameters: { evalJS: true},
    ...

Кроме того, когда я закрыл свой модальный, мне нужно было полностью очистить содержимое:

$(document.body).on('hidden.bs.modal', function () {

    delete spConfig;
    $('#myModal').html('<div class="modal-dialog">...</div>');
    ...

Я не предоставил здесь полного решения, так как теперь, когда я нашел, что происходит, мне нужно провести рефакторинг моего контроллера и завершить шаблон для моих продуктов, чтобы он возвращал аккуратный заголовок и т. Д. для работы с модальным загрузчиком Twitter. Однако, следуя следующим советам, вам должно быть легко загрузить свой продукт и запустить javascript, который поставляется с ним, чтобы его содержимое работало правильно. Нет необходимости добавлять product.js и т.д. на страницу вашей категории.

 0
Author: Theodores, 2014-04-24 08:58:12