Переменные страницы продукта Magento

Я использую Magento CE 1.9 и у меня есть фрагмент кода, который отображает пометку на странице продукта:
шаблон> каталог> продукт> view.phtml

код php:
< ? php echo $ this-> getProduct () -> getSku ()?>

это прекрасно работает, но если я пытаюсь добавить sku где-то еще на странице … например, для фрагмента кода для PowerReviews, где требуется динамический вставку SKU для отслеживания … если я добавлю тот же код php чтобы получить пометку, он ломает страницу прямо там. Я не уверен, почему я могу отобразить sku в view.phtml, но не на вкладке страницы продукта, например …

в этом примере он мне нужен в пользовательской вкладке, которую я сделал … так что это будет: frontend / rwd / default / template / so / reviews.phtml

0

Решение

Я думаю, что ваша проблема заключается в понимании того, как определяются блоки Magento. Шаблоны, как app/design/frontend/[DESIGN PACKAGE]/[THEME]/template/catalog/product/view.phtml, иметь соответствующее определение блока PHP. Этот конкретный шаблон, например, имеет свой блок, определенный в app/code/core/Mage/Catalog/Block/Product/View.php— и вы даже должны увидеть, что это прокомментировано в верхней части основного файла шаблона для блока представления продукта:

/**
* Product view template
*
* @see Mage_Catalog_Block_Product_View
* @see Mage_Review_Block_Product_View
*/

Внутри определения блока вы должны найти метод getProduct вот почему вы можете получить доступ к этому методу из view.phtml блок. $this переменная ссылается на экземпляр объекта определения блока, поэтому экземпляр Mage_Catalog_Block_Product_View, другими словами. Если другие определения блоков (в том числе из сторонних библиотек), в которых вы хотите получить доступ к продукту, не определяют такой метод, как getProduct (или наследовать от определения блока, которое это делает), тогда вы не сможете вызвать этот метод и вернуть продукт. Что ты Можно do, это определить аналогичный метод в определении блока для любого блока, который вы хотите использовать для доступа к данным продукта. Например, вы можете скопировать getProduct определение метода из определения блока представления основного продукта в определение блока для блока из вашего расширения PowerReviews.

Этот ресурс должен дать вам хороший обзор и, надеюсь, лучшее понимание концепции:

http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-4-magento-layouts-blocks-and-templates

ОБНОВИТЬ: Вот немного больше указаний и некоторые уточнения моего ответа в комментариях. Одним из способов решения этой проблемы является использование существующего определения блока для вашего блока в определении макета, например, так:

Вы можете использовать существующее определение блока для вашего файла шаблона или создать свое собственное (и, возможно, наследовать этот класс)

<block type="catalog/product_view" name="my.product.block" template="path/to/custom/template.pthml" />

Обратите внимание, что я использую ядро ​​Magento catalog/product_view тип блока, который соответствует файлу PHP, который я упоминал ранее, который определяет блок и его getProduct метод.

Или, если вам нужны какие-то пользовательские функции в вашем блоке, но вы хотите полагаться на базовую функциональность существующего блока, определите свой собственный блок и расширьте существующий, который обладает желаемой функциональностью:

class MyPackage_MyExtension_Block_Product_View extends Mage_Catalog_Block_Product_View {
// add your custom methods
}

Здесь я расширяю существующее определение блока ядра Magento, которое имеет метод, который вы хотите. Затем используйте собственное определение блока в определении макета:

<block type="mypackage_myextension/product_view" name="my.product.block" template="path/to/custom/template.pthml" />

Надеюсь, это поможет прояснить ситуацию немного подробнее.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]