Magento Изменить названия страниц продуктов для включения атрибутов

У меня есть два пользовательских атрибута, которые я хотел бы добавить в теги <title> на страницах продукта. Это «бренд» и «субтитры».

Название моей страницы закончится примерно так:

$ brand. "". $ productname. "". $ subtitle;

Как я могу это достичь?

Помощь очень ценится.

Solutions Collecting From Web of "Magento Изменить названия страниц продуктов для включения атрибутов"

Из вашего вопроса, я полагаю, вы имеете в виду изменение мета-названия для продуктов.

Доступны 3 варианта:

  1. Просматривайте каждый продукт и вручную обновляйте (или используйте электронную таблицу и импортируйте) каждый отдельный метатег продукта. Эти значения доступны в области администрирования при редактировании продукта.
  2. Перепишите Mage_Catalog_Block_Product_View и переопределите метод _prepareLayout (), в котором создается этот тег.
  3. Используйте наблюдателя и подключайтесь к событию catalog_controller_product_view.

Ваше решение действительно между вариантами 2 и 3 (оба из которых потребуют от вас создания настраиваемого модуля для достижения).

Я всегда стараюсь быть настолько ненавязчивым, насколько это возможно при расширении функциональности ядра Magento, поэтому я бы выбрал вариант 3 здесь. Пожалуйста, см. Ниже код для полного примера:

приложение / и т.д. / модули / Yourcompany_Yourmodule.xml

 <?xml version="1.0"?> <config> <modules> <Yourcompany_Yourmodule> <active>true</active> <codePool>local</codePool> </Yourcompany_Yourmodule> </modules> </config> 

Приложение / код / ​​местные / Yourcompany / Yourmodule / и т.д. / config.xml

 <?xml version="1.0"?> <config> <modules> <Yourcompany_Yourmodule> <version>1.0.0</version> </Yourcompany_Yourmodule> </modules> <global> <models> <yourmodule> <class>Yourcompany_Yourmodule_Model</class> </yourmodule> </models> </global> <frontend> <events> <catalog_controller_product_view> <observers> <yourmodule> <class>Yourcompany_Yourmodule_Model_Observer</class> <method>catalog_controller_product_view</method> </yourmodule> </observers> </catalog_controller_product_view> </events> </frontend> </config> 

Приложение / код / ​​местные / Yourcompany / Yourmodule / Модель / Observer.php

 <?php class Yourcompany_Yourmodule_Model_Observer { /** * Change product meta title on product view * * @pram Varien_Event_Observer $observer * @return Yourcompany_Yourmodule_Model_Observer */ public function catalog_controller_product_view(Varien_Event_Observer $observer) { if ($product = $observer->getEvent()->getProduct()) { $title = $product->getData('brand') . ' ' . $product->getData('name') . ' ' . $product->getData('sub_title'); $product->setMetaTitle($title); } return $this; } } 

Вот простейший и лучший способ переопределить логику META для страницы продукта в magento

копировать /app/code/core/Mage/Catalog/Block/Product/View.php в / app / code / local / Mage / Catalog / Block / Product

и переопределить функцию _prepareLayout () , мой пример приведен ниже

 protected function _prepareLayout() { $this->getLayout()->createBlock('catalog/breadcrumbs'); $headBlock = $this->getLayout()->getBlock('head'); if ($headBlock) { $product = $this->getProduct(); $title = $product->getMetaTitle(); // SEO values start $categoryCollection = $product->getCategoryCollection(); foreach ($categoryCollection as $k) { $topCategory = Mage::getModel('catalog/category')->load($k->getId()); break; } $brand = $product->getResource()->getAttribute('brand')->getFrontend()->getValue($product); $shortDescription = $product->getShortDescription(); $suffix = Mage::getStoreConfig('design/head/title_suffix'); // SEO values end if (!$title) { $title = $product->getName() .' '.$brand. ' - '. $topCategory->getName() . $suffix; } $headBlock->setTitle($title); $keyword = $product->getMetaKeyword(); $currentCategory = Mage::registry('current_category'); if ($keyword) { $headBlock->setKeywords($keyword); } elseif($currentCategory) { $headBlock->setKeywords($product->getName()); } $description = $product->getMetaDescription(); if (!$description) { $description = $brand. ' '. $topCategory->getName() .'. '. $shortDescription; } $headBlock->setDescription( ($description) ); // var_dump($title); // var_dump($description); if ($this->helper('catalog/product')->canUseCanonicalTag()) { $params = array('_ignore_category'=>true); $headBlock->addLinkRel('canonical', $product->getUrlModel()->getUrl($product, $params)); } } return parent::_prepareLayout(); } 

это дополнение к ответу Дрю Хантера

magento включает название категории в заголовок, поэтому правильным решением будет:

 class Yourcompany_Yourmodule_Model_Observer { /** * Change product meta title on product view * * @pram Varien_Event_Observer $observer * @return Yourcompany_Yourmodule_Model_Observer */ public function catalog_controller_product_view(Varien_Event_Observer $observer) { if ($product = $observer->getEvent()->getProduct()) { if ($category) { $title = $brand . ' ' . $product->getData('name') . ' - ' . $product->getData('category')->getData('name'); } else { $title = $brand . ' ' . $product->getData('name'); } $product->setMetaTitle($title); } return $this; } } 

Предполагая, что вы хотите изменить название продукта на странице просмотра каталога

В приложении / дизайне / интерфейсе / по умолчанию / {папке с темой} /template/page/html/head.phtml вы можете

 <?php if ($_product = Mage::registry('current_product')) { ?> <title><?php echo $_product->getData('xyz') . ' ' . $_product->getName(); ?></title> <?php }else{ ?> <title><?php echo $this->getTitle() ?></title> <?php } ?> 

См. « Получить имя и значение атрибута» Magento

Я считаю, что Дрю Хантер дал большую часть правильного ответа, но мне пришлось внести несколько изменений, чтобы заставить его работать (EE, 1.14.2.x):

В config.xml:

Измените узлы <yourmodule>...</yourmodule> на> <yourcompany_yourmodule>...</yourcompany_yourmodule>

В Observer.php:

Изменить public function catalog_controller_product_view(Varien_Event_Observer $observer) на public function catalog_controller_product_view($observer)