Magento - Как отобразить несколько настраиваемых продуктов на странице категории - Ниспадающие значения не отображаются

Я пытаюсь добавить несколько настраиваемых продуктов на страницу списка категорий в Magento 1.7.2. Я использую расширение Organic Internet SCP вместе с EM Gala Colorswatches, что делает это немного сложнее, чем обычно. Я следовал учебным пособиям с этих сайтов... они в значительной степени похожи друг на друга...

http://inchoo.net/ecommerce/magento/display-multiple-configurable-products-with-options-on-one-page-in-magento/

http://www.catgento.com/adding-configurable-product-options-to-category-list-in-magento/

Раскрывающиеся списки и образцы цветов хорошо отображаются на странице продукта, однако на странице категории раскрывающиеся списки, метки и цена отображаются, а значения продукта не отображаются при выборе раскрывающегося списка. Я включил все те же файлы.js со страницы продукта, где он работает. Единственное отличие, которое я вижу, это то, что в консоли я получаю следующие ошибки от prototype.js

TypeError: document.getElementById(...) is null
element.attachEvent("ondataavailable", responder);
prototype.js (line 5644)

TypeError: element.attachEvent is not a function    
element.attachEvent("ondataavailable", responder);
prototype.js (line 5644)

TypeError: element.attachEvent is not a function
element.attachEvent("on" + actualEventName, responder);

TypeError: element.dispatchEvent is not a function  
element.dispatchEvent(event);

Третья ошибка появляется только тогда, когда у меня есть настраиваемый блок продукта без комментариев на странице. Функция, на которую она ссылается, находится в prototype.js и выглядит следующим образом:

function observe(element, eventName, handler) {
element = $(element);
var responder = _createResponder(element, eventName, handler);
if (!responder) return element;
if (eventName.include(':')) {
if (element.addEventListener)
element.addEventListener("dataavailable", responder, false);
else {
element.attachEvent("ondataavailable", responder);
element.attachEvent("onlosecapture", responder);
}
} else {
var actualEventName = _getDOMEventName(eventName);
if (element.addEventListener)
element.addEventListener(actualEventName, responder, false);
else
element.attachEvent("on" + actualEventName, responder);
}
return element;
} 

когда я просматриваю источник, я вижу, что объект JSON присутствует и данные доступны, но по какой-то причине он не добавляется в поля выбора в качестве параметров, как на странице продукта.... Любая помощь будет принята с благодарностью.

Вот код из приложения / design / frontend / default / mytheme / catalog / product / list.phtml

    <?php if ($_product->getData('type_id') == "configurable"){  
                 Mage::unregister('product');
                    Mage::register('product', $_product);
                    $block = $this->getLayout()->createBlock(
                        'OrganicInternet_SimpleConfigurableProducts_Catalog_Block_Product_View_Type_Configurable',
                        'options_configurable',
                        array('template' => 'catalog/product/view/type/options/configurable.phtml')
                        );
                    echo $block->toHtml(); 

                   $priceBlock = $this->getLayout()->createBlock(
                        'OrganicInternet_SimpleConfigurableProducts_Catalog_Block_Product_Price',
                        $_product->getFinalPrice(),
                        array('template' => 'catalog/product/price.phtml')
                        );
                    echo $priceBlock->toHtml(); 
    }   
 ?>

Вот код, который вызывает этот блок по адресу /app/design/frontend/default/mytheme/template/catalog/product/view/type/options/configurable.phtml

<?php
$_product    = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes());
?>
<?php if ($_product->isSaleable() && count($_attributes)):?>

    <dl>
    <?php foreach($_attributes as $_attribute): ?>
      <dt><label class="required"><!--  <em>*</em>--><?php echo $_attribute->getLabel() ?></label></dt>
        <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>>
            <div class="input-box">
                <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select_<?php echo $_product->getId()?>">
                    <option><?php echo $this->__('Choose an Option...') ?></option>
                </select>
              </div>
        </dd>
    <?php endforeach; ?>
    </dl>

    <script type="text/javascript">
        var spConfig_<?php echo $_product->getId()?> = new Inchoo_Product.Config(<?php echo $this->getJsonConfig() ?>);
    </script>
<?php endif;?>

Спасибо заранее, дайте мне знать, если вам нужна дополнительная информация...

1 ответ

Я думаю, что это может произойти, потому что magento использует разные скрипты на этих страницах:

  • configurable.js должен быть включен на странице просмотра продукта
  • configurableList.js должен быть включен на странице просмотра каталога

Оба сценария имеют несколько методов с одинаковыми именами. Поэтому, если вы включите оба сценария на странице просмотра каталога или включите configurable.js только на странице просмотра каталога, вы ничего не получите в выпадающих списках выбора, потому что методы названы одинаково, а логика отличается.

Другие вопросы по тегам