вариант использования для getProductAdditionalInformationBlock в magento - PullRequest
3 голосов
/ 23 сентября 2011

Я хотел бы добавить дополнительную информацию под каждым товаром в корзине. Я уже сохранил эту информацию в таблице "sales_flat_quote_item" в поле "extra_info". Поэтому вопрос заключается только в том, как показать его глобально во всех местах, где показаны предметы.

Я видел в нескольких местах под названием предмета такую ​​структуру:

<?php if ($addtInfoBlock = $this->getProductAdditionalInformationBlock()):?>
 <?php echo $addtInfoBlock->setItem($_item)->toHtml() ?>
<?php endif;?>

Например, в следующих файлах: /app/design/frontend/base/default/template/checkout/cart/item/default.phtml /app/design/frontend/base/default/template/checkout/onepage/review/item.phtml

Итак, я полагаю, это место, которое я должен использовать для такой задачи.

Я понял, что: Я должен добавить свое собственное определение блока, например:

<checkout_cart_index>
  <block type="core/text_list" name="additional.product.info" translate="label">
  <label>Additional Product Info</label>
  <block type="various/itemrendererdefault" name="glass.additional" as="glass"    template="checkout/cart/glass_additional.phtml"/>
  </block>
</checkout_cart_index>

Пока это не проблема. Мой класс загружен

class Site1_Various_Block_Itemrendererdefault extends Mage_Core_Block_Template {

public function setItem(Varien_Object $item) {
    $this->setData('item', $item);
    return $this;
}

public function getItem() {
    return $this->_getData('item');
}

}

и вызывается шаблон checkout / cart / glass_additional.phtml.

Но внутри шаблона я понятия не имею, как получить информацию о том, что $ item я должен обработать. Я попробовал:

$_item = $this->getItem();
print_r($_item);
$_item = $this->getData();
print_r($_item);

но ничего не возвращает.

Итак, мой вопрос: как получить данные $ item внутри моего шаблона. Могу ли я получить доступ к данным, установленным в?

...
$addtInfoBlock->setItem($_item)->toHtml();
...

Ответы [ 3 ]

0 голосов
/ 19 июня 2014

Я думаю, чтобы получить экземпляр предмета, вы должны попробовать это:

class Site1_Various_Block_Itemrendererdefault extends Mage_Core_Block_Template {

public function setItem(Varien_Object $item) {
    $this->setData('item', $item);
    return $this;
}

public function getItem() {
    $parent = $this->getParentBlock();
    if ($parent) {
        $item = $parent->getItem();
    }       
}

}

Спасибо!

0 голосов
/ 23 июня 2016

У меня тоже были проблемы с этим, пока я не использовал тип блока core / template и вызов getParentBlock() в моем файле пользовательского шаблона.Это может работать для любого пользовательского типа блока, но я не тестировал.

В вашем layout / local.xml файле:

<checkout_cart_index>
    <reference name="additional.product.info">
        <block type="core/template" name="additional.product.info.your_template" as="your_template" template="checkout/cart/item/your-template.phtml"/>
    </reference>
</checkout_cart_index>

$addtInfoBlock->setItem($_item)вызывается для блока extra.product.info , который будет родительским для всех блоков, которые вы добавляете под ним.По этой причине вы можете вызвать $this->getParentBlock() в своем шаблоне, чтобы получить доступ к его данным.

Итак, теперь в вашей checkout / cart / item / your-template.phtml :

$_item = $this->getParentBlock()->getItem();
/* get access to all product attributes, with a performance hit. */
$_product = $_item->getProduct()->load();

/* Some product attributes */
echo $_product->getName();
echo $_product->getSku();
0 голосов
/ 24 сентября 2011

Кристиан , ОП уже ответил на свой вопрос самостоятельно.

Цитата:

Я просто решил проблему, установив свой блокas "extra.product.info"

<checkout_cart_index>
    <block type="various/itemrendererdefault" name="additional.product.info" translate="label" template="checkout/cart/glass_additional.phtml"></block>
</checkout_cart_index>

Примечание: Абсолютно нормально ответить на ваш собственный вопрос.Пожалуйста, оставьте это как реальный ответ, но не в вопросе или комментарии.Публикация в виде реального ответа помогает сохранить список «без ответа» более понятным (избегая того, чтобы другие люди тратили свое время).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...