Установка переменных в блоках Magento - PullRequest
0 голосов
/ 02 февраля 2012

В моем файле шаблона есть следующий код:

<?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

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

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

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

EDIT

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

1 Ответ

0 голосов
/ 02 февраля 2012

У меня были похожие проблемы, сначала попробуйте заменить все двойные одинарные кавычки в макете 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/

...