Magento - Как отобразить несколько настраиваемых продуктов на странице категории - Ниспадающие значения не отображаются
Я пытаюсь добавить несколько настраиваемых продуктов на страницу списка категорий в Magento 1.7.2. Я использую расширение Organic Internet SCP вместе с EM Gala Colorswatches, что делает это немного сложнее, чем обычно. Я следовал учебным пособиям с этих сайтов... они в значительной степени похожи друг на друга...
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 только на странице просмотра каталога, вы ничего не получите в выпадающих списках выбора, потому что методы названы одинаково, а логика отличается.