我有2个自定义属性,我想添加到产品页面上的<title>
标记。它们是“品牌”和“副标题”。
我的页面标题最终会是这样的:
$ brand。“”。$ productname。“”。$ subtitle;
我怎样才能做到这一点?
非常感谢帮助。
答案 0 :(得分:21)
从您的问题来看,我认为您指的是更改产品的元标题。
您可以选择3个选项:
您的决定实际上是在选项2&amp; 3(两者都需要你创建一个自定义模块来实现)。
在扩展Magento核心功能时,我总是尽量不引人注目 - 所以我会在这里选择选项3。请参阅以下代码以获取完整示例:
应用程序的/ etc /模块/ Yourcompany_Yourmodule.xml
<?xml version="1.0"?>
<config>
<modules>
<Yourcompany_Yourmodule>
<active>true</active>
<codePool>local</codePool>
</Yourcompany_Yourmodule>
</modules>
</config>
应用程序/代码/本地/ Yourcompany / Yourmodule的/ etc / 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;
}
}
答案 1 :(得分:4)
以下是在magento
中覆盖产品页面的META逻辑的最简单,最好的方法复制 /app/code/core/Mage/Catalog/Block/Product/View.php 到 / app / code / local / Mage / Catalog / Block / Product
并覆盖 function _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();
}
答案 2 :(得分:1)
这是Drew Hunter回答的补充
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;
}
}
答案 3 :(得分:1)
假设您只想更改目录视图页面上的产品标题
在app / design / frontend / default / {your theme Folder} /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 } ?>
答案 4 :(得分:0)
我相信Drew Hunter提供了大部分正确答案,但我必须做一些改动才能让它发挥作用(EE,1.14.2.x):
在config.xml中:
将节点
<yourmodule>...</yourmodule>
更改为&gt;<yourcompany_yourmodule>...</yourcompany_yourmodule>
在Observer.php中:
将
public function catalog_controller_product_view(Varien_Event_Observer $observer)
更改为public function catalog_controller_product_view($observer)