2014-01-30 4 views
0

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

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/

The выпадающие и образцы цветов отображаются нормально на странице продукта, однако на на странице категории выпадающие списки, метки и отображение цены, но значения продукта не отображаются, когда выпадающий список выбран. Я включил все те же файлы .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 есть и данные доступны, но по какой-то причине не добавляться в поля выбора в качестве параметров, например, на странице продукта .... Любая помощь будет оценена по достоинству.

Вот код из приложения/дизайн/интерфейс/по умолчанию/MyTheme/каталог/продукта/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(); 
    } 
?> 

Вот код, который этот блок звонки в/приложение/дизайн/интерфейс/по умолчанию /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;?> 

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

ответ

0

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

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

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

Смежные вопросы