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


14

Я намагаюся завантажити блок перегляду продуктів на сторінку списку категорій за допомогою AJAX за допомогою Ajaxify . Все працює добре. Єдине питання полягає в тому, що поле параметрів (довідник "контейнер1") завантажено неправильно. Тут не відображаються варіанти.

Хтось має досвід цього, можливо, спробував щось подібне? Я встановлюю активний продукт у контролері за допомогою

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

перед наданням макета.

Я думаю, що це пов'язане з тим, що параметри додаються до перегляду в іншій частині каталога.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>
[...]

але я не впевнений, в чому полягає точна проблема.

Я сподіваюся, що хтось може вказати мені в правильному напрямку.

З повагою, Сандер Мангел


1
Сандер - я швидко поглянув на розширення Ajaxify, і незрозуміло, як ви його використовуєте. Який саме javascript (або PHP + javascript) ви використовуєте для виклику Ajaxify, і який код ви додали в контролер (якщо такий є) або макет Ajaxify XML для обробки запиту? В основному, дайте нам достатньо інформації, щоб відтворити проблему в нашому кінці, і ми, ймовірно, можемо зробити вас в правильному напрямку.
Алан Шторм

Я вирішив переписати свій код, не використовуючи Ajaxify, просто щоб це було просто. Якщо проблема все ще присутня, не надрукуйте джерело розширення із запитанням. Це, мабуть, набагато простіше. Дякуємо за Ваш коментар
Sander Mangel

Ви можете використовувати каталог ajax для завантаження розширення fme magento, воно завантажить продукти на прокрутку. Ви також можете додати кнопку, натиснувши на яку ще товари буде завантажено. fmeextensions.com/magento-ajax-catalog-pro.html

Привіт @SanderMangel, ти відкрив розширення? Thx
joseantgv

Відповіді:


7

Ми мали подібні проблеми в минулому, коли намагалися ввести спливаюче огляд на сторінку списку категорій. Ось декілька питань, з якими ми стикалися: -

  • /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()
));

Сподіваємось, це може допомогти пролити трохи світла на те, куди ви йдете не так


Гей, Лука, я думаю, це може бути рішенням. Я переписую все розширення. Якщо це працює погано, позначте цю посаду як тент (і, звичайно, відкриває джерело розширення). Спасибі!
Сандер Мангел

1

Проблема полягає в тому, що параметри додаються через JavaScript, а не як HTML у каталозі / продукт / view / type / options / configigurable.html:

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

Ваш сценарій Ajax, здається, замінює HTML, але не виконує JS в ньому. Цю частину потрібно виконати вручну, але для цього є кілька способів:

  • preg_match все, що знаходиться всередині тегів сценарію, і зателефонуйте через eval
  • розділіть свій вихід на html та javascript частину, щоб ви могли отримати обидва окремо

Гей, Тобіас, дякую за теніс. Ви маєте рацію з приводу того, що javascript не виконується, але все ж повинен бути якийсь html вставлений, готуючи параметри. Div # product-options-wrapper повністю порожній.
Сандер Мангел

0

Мені вдалося дістатись лише за умови прийнятої тут відповіді. Щоб налагодити роботу з модальним завантаженням Twitter, мені потрібно було використовувати прототип для завантаження налаштованого продукту та встановлення його для запуску сценаріїв на поверненій сторінці:

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 Bootstrap Modal. Однак за допомогою наступних порад слід завантажувати ваш продукт і запускати JavaScript, що постачається разом із ним, щоб його вміст працював правильно. Не потрібно додавати product.js тощо на сторінку вашої категорії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.