2014-02-12 5 views
0

Хорошо, если этот вопрос уже был дан, прошу прощения, я искал и не нашел удовлетворительного ответа, который соответствует моей ситуации.Magento не распознает пользовательскую функцию javascript

Вот ситуация:

У меня есть пользовательский файл шаблона для отображения продуктов в категории, часть из этого списка является возможность добавления товаров непосредственно в корзину с определенным количеством из категории страницы. Для этого я написал функцию, которая переписывает целевую строку кнопки «Добавить в корзину», отправляет запрос, а затем снова перезаписывает кнопку обратно в исходную версию (см. Код ниже). Проблема, с которой я столкнулся, заключается в том, что каждый раз, когда нажимается кнопка, я получаю сообщение об ошибке в панели отладки, в которой указано, что customAddToCart is not defined. Но если вы посмотрите на код для шаблона списка продуктов ниже, вы увидите, что функция определена еще до создания списка (кстати, у меня она была внизу страницы и получала ту же ошибку).

Если кто-то может пролить свет на то, почему функция javascript будет не определена, когда она будет включена на ту же страницу, что и список ... Я мог бы с уверенностью воспользоваться некоторой помощью.

<?php 
/** 
* Product list template 
* 
* @see Mage_Catalog_Block_Product_List 
*/ 
?> 
<?php 
    $_productCollection=$this->getLoadedProductCollection(); 
    $_helper = $this->helper('catalog/output'); 
?> 
<script type="text/javascript"> 
    function customAddToCart(product_id, url){ 
     var qty = document.getElementById('qty_input_'+product_id).value; 
     document.getElementById('addtocartbutton_'+product_id).setAttribute('onclick', "setLocation(" + url + "/qty/" + qty ")"); 
     document.getElementById('addtocartbutton_'+product_id).click(); return false; 
     document.getElementById('addtocartbutton_'+product_id).setAttribute('onclick', "customAddToCart(" + product_id + ", " + url + ")"); 
    } 
</script> 
<?php if(!$_productCollection->count()): ?> 
<p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p> 
<?php else: ?> 
<div class="category-products"> 
    <?php // List mode ?> 
    <?php if($this->getMode()!='grid'): ?> 
    <ol class="products-list" id="products-list"> 
    <?php foreach ($_productCollection as $_product): ?> 
     <li class="item"> 
      <?php // Product Image ?> 
      <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->constrainOnly(TRUE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize(230, null); ?>" width="230" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a> 
      <?php // Product description ?> 
      <div class="product-shop"> 
       <div class="f-fix"> 
        <?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?> 
        <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"><?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?></a></h2> 
        <?php if($_product->getRatingSummary()): ?> 
        <?php echo $this->getReviewsSummaryHtml($_product) ?> 
        <?php endif; ?> 
        <?php echo $this->getPriceHtml($_product, true) ?>      
        <div class="desc std"> 
         <?php echo $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') ?> 
         <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped ?>" class="link-learn"><?php echo $this->__('Learn More') ?></a> 
        </div> 
        <ul class="add-to-links"> 
         <?php if ($this->helper('wishlist')->isAllow()) : ?> 
          <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li> 
         <?php endif; ?> 
         <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> 
          <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li> 
         <?php endif; ?> 
        </ul> 
        <div class="add-to-cart-options"> 
        <?php if($_product->isSaleable()): ?> 
        <?php if(!($_product->getTypeInstance(true)->hasRequiredOptions($_product) || $_product->isGrouped())){ ?> 
         <label for="qty_input">Quantity: </label> 
         <input type="text" class="spinner qty-input" name="qty_input" id="qty_input_<?php echo $_product->getId(); ?>" /> 
         <?php /*<p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p> */ ?> 
         <button type="button" class="button" onclick="javascript:customAddToCart(<?php echo $_product->getId(); ?>, '<?php echo $this->getAddToCartUrl($_product); ?>')"><span><span><?php echo $this->__('Add to Cart'); ?></span></span></button> 
        <?php } else { ?> 
         <button type="button" class="button" id="addtocartbutton_<?php echo $_product->getId(); ?>" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart'); ?></span></span></button> 
        <?php } ?> 
        <?php else: ?> 
        <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> 
       <?php endif; ?> 
       </div> 
      </div> 
     </div> 
    </li> 
<?php endforeach; ?> 
</ol>  
<script type="text/javascript">decorateList('products-list', 'none-recursive')</script> 

<?php else: ?> 

Как вы можете видеть, функция четко определена в верхней части страницы, так почему эта кнопка

<button type="button" class="button" onclick="javascript:customAddToCart(<?php echo $_product->getId(); ?>, '<?php echo $this->getAddToCartUrl($_product); ?>')"><span><span><?php echo $this->__('Add to Cart'); ?></span></span></button> 

приводит сообщение в консоли говорят, что customAddToCart is not defined я не уверен, ,

+1

Попробуйте просмотреть javascript в 'CDATA' .., если вы не знаете, что я имею в виду, тогда ссылайтесь на файлы base/default/template, где сценарий будет связан с комментариями CDATA. –

+0

Спасибо за этот совет, я думаю, что это была комбинация того, что вы рекомендовали, и wbaaron предложил ниже, но я смог заставить его работать. – Chris

ответ

2

Есть ошибки в теме "Неожиданная строка"? В конкатенации во второй строке вашей функции отсутствует свой последний знак плюса.

Update

"/qty/" + qty ")" 

в

"/qty/" + qty + ")" 

и обновить.

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