2012-02-01 1 views
0

Я следующий код в моем файле шаблона:Установка переменных в Magento блоков

<?php foreach($collection as $product): ?> 
     <?php Mage::unregister('product'); ?> 
     <?php Mage::register('product', $product); ?> 
     <?php $_product = $this->getProduct(); ?> 
     <div class="product-view"> 
      <div class="product-essential"> 
       <form action="<?php echo $this->getSubmitUrl($_product); ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>> 
        <div class="no-display"> 
         <input type="hidden" name="product" value="<?php echo $product->getId() ?>" /> 
         <input type="hidden" name="related_product" id="related-products-field" value="" /> 
        </div> 
        <div class="product-shop"> 
         <div class="product-name"> 
          <h1><?php echo $_product->getName(); ?></h1> 
         </div> 
         <?php echo $this->getChildHtml('alert_urls') ?> 
         <?php echo $this->getChildHtml('product_type_data') ?> 
         <?php echo $this->getTierPriceHtml() ?> 
         <?php echo $this->getChildHtml('extrahint') ?> 
         <?php if (!$this->hasOptions()):?> 
          <div class="add-to-box"> 
           <?php if($_product->isSaleable()): ?> 
            <?php echo $this->getChildHtml('addtocart') ?> 
            <?php if($this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?> 
             <span class="or"><?php echo $this->__('OR') ?></span> 
            <?php endif; ?> 
           <?php endif; ?> 
           <?php echo $this->getChildHtml('addto') ?> 
          </div> 
          <?php echo $this->getChildHtml('extra_buttons') ?> 
         <?php endif; ?> 
         <?php if ($_product->getShortDescription()):?> 
          <div class="short-description"> 
           <h2><?php echo $this->__('Quick Overview') ?></h2> 
           <div class="std"><?php echo $_helper->productAttribute($_product, nl2br($_product->getShortDescription()), 'short_description') ?></div> 
          </div> 
         <?php endif;?> 
         <?php echo $this->getChildHtml('other');?> 
         <?php if ($_product->isSaleable() && $this->hasOptions()):?> 
          <?php echo $this->getChildChildHtml('container1', '', true, true) ?> 
         <?php endif;?> 
        </div> 
        <div class="product-img-box"> 
         <?php echo $this->getChildHtml('media') ?> 
        </div> 
        <div class="clearer"></div> 
        <?php if ($_product->isSaleable() && $this->hasOptions()):?> 
         <?php echo $this->getChildChildHtml('container2', '', true, true) ?> 
        <?php endif;?> 
       </form>     
      </div> 
     </div> 
    <?php endforeach; ?> 

В моем макета XML у меня есть:

<reference name="root"> 
     <block type="catalog/product_view" name="test" template="path/to/products.phtml"/> 
    </reference> 

Я знаю, что это называется успешно, как я имею выход статический контент из него. Однако представляется, что

$product 

не распознается блоком, хотя это действительный экземпляр продукта.

Код снят прямо по умолчанию/template/catalog/product/view.phtml, где он работает нормально. Весь мой код делает/пытается сделать, это изменить продукт. Это первый раз, когда я работал с блоками и был бы благодарен за любую помощь/советы/указатели относительно того, где я ошибся.

Заранее спасибо :-).

EDIT

Оказывается, мое понимание блоков/Magento неверен. Ответ заключается в чтении учебников AlanStorm.

+0

используется как '$ product' и' $ _product', который сбивает с толку, дать им осмысленные имена, если они несоизмеримы. Кроме того, какова точка регистрации объекта в верхней части цикла, когда вы его не используете? – clockworkgeek

+0

catalog/product_view ищет переменную $ product (в getProduct() он ищет для него реестр Mage). Поэтому он используется. И соглашения об именах поступают прямо из основного кода Magento. – james

ответ

0

У меня были подобные проблемы, сначала попробуйте заменить все двойные одиночные кавычки в макете xml.
Надеюсь, вы просто фиктивный код template="path/to/products.phtml" для презентации здесь и использовали настоящий путь Magento в вашем коде.
Не могу сказать больше, потому что я тоже начинаю в Magento. Просто несколько полезных ссылок:
http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-1-introduction-to-magento
http://inchoo.net/category/ecommerce/magento/

+0

Замена двойного одинарного кавычка недопустима. XML. Да, я использую правильный путь в своем коде. Я много раз просматривал оба сайта за помощью и до сих пор не нашел ответа. Я буду продолжать смотреть. – james