Magento Change Product Page Titles to Include Attributes

后端 未结 5 2053
难免孤独
难免孤独 2020-12-15 01:43

I have 2 custom attributes I\'d like to add to the </code> tags on product pages. They are \'brand\' and \'subtitle\'.</p> <p>My page title would end up <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5408099190056760" data-ad-slot="7305827575" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="relativetags"> 相关标签: </div> </div> <div class="fly-panel detail-box" id="flyReply"> <fieldset class="layui-elem-field layui-field-title" style="text-align: center;"> <legend>5条回答</legend> </fieldset> <ul class="jieda" id="jieda"> <li data-id="111"> <a name="item-1111111111"></a> <div class="detail-about detail-about-reply"> <a class="fly-avatar" href="https://www.e-learn.cn/qa/u-99.html"> <img src="https://www.e-learn.cn/qa/data/avatar/000/00/00/small_000000099.jpg" alt=" "> </a> <div class="fly-detail-user"> <a href="https://www.e-learn.cn/qa/u-99.html" class="fly-link"> <cite>忘掉有多难 </cite> </a> </div> <div class="detail-hits"> <span>2020-12-15 01:46</span> </div> </div> <div class="detail-body jieda-body photos"> <p>Here is the simplest and best way to override META logics for product page in magento </p> <p>copy <strong>/app/code/core/Mage/Catalog/Block/Product/View.php</strong> to <strong>/app/code/local/Mage/Catalog/Block/Product</strong></p> <p>and override <strong>function _prepareLayout()</strong>, my example goes bellow</p> <pre><code>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(); } </code></pre> <div class="appendcontent"> </div> </div> <div class="jieda-reply"> <span class="jieda-zan button_agree" type="zan" data-id='1189860'> <i class="iconfont icon-zan"></i> <em>0</em> </span> <span type="reply" class="showpinglun" data-id="1189860"> <i class="iconfont icon-svgmoban53"></i> 讨论(0) </span> <div class="jieda-admin"> </div> </div> <div class="comments-mod " style="display: none; float:none;padding-top:10px;" id="comment_1189860"> <div class="areabox clearfix"> <form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label> <div class="layui-input-block" style="margin-left:90px;"> <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" /> <input type='hidden' value='0' name='replyauthor' /> </div> <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1189860">提交评论 </span></div> </div> </form> </div> <hr> <ul class="my-comments-list nav"> <li class="loading"> <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />  加载中... </li> </ul> </div> </li> <li data-id="111"> <a name="item-1111111111"></a> <div class="detail-about detail-about-reply"> <a class="fly-avatar" href="https://www.e-learn.cn/qa/u-110.html"> <img src="https://www.e-learn.cn/qa/data/avatar/000/00/01/small_000000110.jpg" alt=" "> </a> <div class="fly-detail-user"> <a href="https://www.e-learn.cn/qa/u-110.html" class="fly-link"> <cite>执念已碎 </cite> </a> </div> <div class="detail-hits"> <span>2020-12-15 01:56</span> </div> </div> <div class="detail-body jieda-body photos"> <p>this is addition to Drew Hunter's answer</p> <p>magento includes category name into title so the proper solution would be:</p> <p> <pre><code>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; } } </code></pre> <div class="appendcontent"> </div> </div> <div class="jieda-reply"> <span class="jieda-zan button_agree" type="zan" data-id='1189861'> <i class="iconfont icon-zan"></i> <em>0</em> </span> <span type="reply" class="showpinglun" data-id="1189861"> <i class="iconfont icon-svgmoban53"></i> 讨论(0) </span> <div class="jieda-admin"> </div> </div> <div class="comments-mod " style="display: none; float:none;padding-top:10px;" id="comment_1189861"> <div class="areabox clearfix"> <form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label> <div class="layui-input-block" style="margin-left:90px;"> <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" /> <input type='hidden' value='0' name='replyauthor' /> </div> <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1189861">提交评论 </span></div> </div> </form> </div> <hr> <ul class="my-comments-list nav"> <li class="loading"> <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />  加载中... </li> </ul> </div> </li> <li data-id="111"> <a name="item-1111111111"></a> <div class="detail-about detail-about-reply"> <a class="fly-avatar" href="https://www.e-learn.cn/qa/u-26.html"> <img src="https://www.e-learn.cn/qa/data/avatar/000/00/00/small_000000026.jpg" alt=" "> </a> <div class="fly-detail-user"> <a href="https://www.e-learn.cn/qa/u-26.html" class="fly-link"> <cite>星月不相逢 </cite> </a> </div> <div class="detail-hits"> <span>2020-12-15 02:04</span> </div> </div> <div class="detail-body jieda-body photos"> <p>Assuming that you only want to change the product title on the catalog view page</p> <p>In app/design/frontend/default/{your theme Folder}/template/page/html/head.phtml you could </p> <pre><code><?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 } ?> </code></pre> <p>See Get Attribute Name And Value Magento</p> <div class="appendcontent"> </div> </div> <div class="jieda-reply"> <span class="jieda-zan button_agree" type="zan" data-id='1189862'> <i class="iconfont icon-zan"></i> <em>0</em> </span> <span type="reply" class="showpinglun" data-id="1189862"> <i class="iconfont icon-svgmoban53"></i> 讨论(0) </span> <div class="jieda-admin"> </div> </div> <div class="comments-mod " style="display: none; float:none;padding-top:10px;" id="comment_1189862"> <div class="areabox clearfix"> <form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label> <div class="layui-input-block" style="margin-left:90px;"> <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" /> <input type='hidden' value='0' name='replyauthor' /> </div> <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1189862">提交评论 </span></div> </div> </form> </div> <hr> <ul class="my-comments-list nav"> <li class="loading"> <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />  加载中... </li> </ul> </div> </li> <li data-id="111"> <a name="item-1111111111"></a> <div class="detail-about detail-about-reply"> <a class="fly-avatar" href="https://www.e-learn.cn/qa/u-8.html"> <img src="https://www.e-learn.cn/qa/data/avatar/000/00/00/small_000000008.jpg" alt=" "> </a> <div class="fly-detail-user"> <a href="https://www.e-learn.cn/qa/u-8.html" class="fly-link"> <cite>小鲜肉 </cite> </a> </div> <div class="detail-hits"> <span>2020-12-15 02:05</span> </div> </div> <div class="detail-body jieda-body photos"> <p>I believe Drew Hunter has provided most of the correct answer, but I had to make a few changes to get it to work (EE, 1.14.2.x):</p> <p><strong>In config.xml:</strong></p> <blockquote> <p>Change the nodes <code><yourmodule>...</yourmodule></code> to ><code><yourcompany_yourmodule>...</yourcompany_yourmodule></code></p> </blockquote> <p><strong>In Observer.php:</strong></p> <blockquote> <p>Change <code>public function catalog_controller_product_view(Varien_Event_Observer $observer)</code> to <code>public function catalog_controller_product_view($observer)</code> </p> </blockquote> <div class="appendcontent"> </div> </div> <div class="jieda-reply"> <span class="jieda-zan button_agree" type="zan" data-id='1189863'> <i class="iconfont icon-zan"></i> <em>0</em> </span> <span type="reply" class="showpinglun" data-id="1189863"> <i class="iconfont icon-svgmoban53"></i> 讨论(0) </span> <div class="jieda-admin"> </div> </div> <div class="comments-mod " style="display: none; float:none;padding-top:10px;" id="comment_1189863"> <div class="areabox clearfix"> <form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label> <div class="layui-input-block" style="margin-left:90px;"> <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" /> <input type='hidden' value='0' name='replyauthor' /> </div> <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1189863">提交评论 </span></div> </div> </form> </div> <hr> <ul class="my-comments-list nav"> <li class="loading"> <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />  加载中... </li> </ul> </div> </li> <li data-id="111"> <a name="item-1111111111"></a> <div class="detail-about detail-about-reply"> <a class="fly-avatar" href="https://www.e-learn.cn/qa/u-10.html"> <img src="https://www.e-learn.cn/qa/data/avatar/000/00/00/small_000000010.jpg" alt=" "> </a> <div class="fly-detail-user"> <a href="https://www.e-learn.cn/qa/u-10.html" class="fly-link"> <cite>慢半拍i </cite> </a> </div> <div class="detail-hits"> <span>2020-12-15 02:10</span> </div> </div> <div class="detail-body jieda-body photos"> <p>From your question, I assume you are referring to changing the meta title for products.</p> <p>There are 3 options open to you:</p> <ol> <li>Go through each product and manually update (or use a spreadsheet and import) each product meta title individually. These values are available in the admin area when editing a product.</li> <li>Rewrite Mage_Catalog_Block_Product_View and override the _prepareLayout() method which is where this tag is being generated.</li> <li>Use an observer and hook into catalog_controller_product_view event.</li> </ol> <p>Your decision is really between options 2 & 3 (both of which will require you to create a custom module to achieve).</p> <p>I always try to be as unobtrusive as possible when extending Magento core functionality - so I would opt for option 3 here. Please see below code for a complete example:</p> <p>app/etc/modules/Yourcompany_Yourmodule.xml</p> <pre><code><?xml version="1.0"?> <config> <modules> <Yourcompany_Yourmodule> <active>true</active> <codePool>local</codePool> </Yourcompany_Yourmodule> </modules> </config> </code></pre> <p>app/code/local/Yourcompany/Yourmodule/etc/config.xml</p> <pre><code><?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> </code></pre> <p>app/code/local/Yourcompany/Yourmodule/Model/Observer.php</p> <pre><code><?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; } } </code></pre> <div class="appendcontent"> </div> </div> <div class="jieda-reply"> <span class="jieda-zan button_agree" type="zan" data-id='1189859'> <i class="iconfont icon-zan"></i> <em>0</em> </span> <span type="reply" class="showpinglun" data-id="1189859"> <i class="iconfont icon-svgmoban53"></i> 讨论(0) </span> <div class="jieda-admin"> </div> </div> <div class="comments-mod " style="display: none; float:none;padding-top:10px;" id="comment_1189859"> <div class="areabox clearfix"> <form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label> <div class="layui-input-block" style="margin-left:90px;"> <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" /> <input type='hidden' value='0' name='replyauthor' /> </div> <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="1189859">提交评论 </span></div> </div> </form> </div> <hr> <ul class="my-comments-list nav"> <li class="loading"> <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />  加载中... </li> </ul> </div> </li> <style> .laypage-main a, .laypage-main span { display: inline-block; } </style> </ul> <div class="layui-form layui-form-pane"> <form id="huidaform" name="answerForm" method="post"> <div class="layui-form-item layui-form-text"> <a name="comment"></a> <div class="layui-input-block"> <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.config.js"></script> <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.all.js"></script> <script type="text/plain" id="editor" name="content" style="width:100%;height:200px;"></script> <script type="text/javascript"> var isueditor=1; var editor = UE.getEditor('editor',{ //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个 toolbars:[['source','fullscreen', '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'link', 'unlink', 'anchor', '|', 'simpleupload', 'insertimage', 'scrawl', 'insertvideo', 'attachment', 'map', 'insertcode', '|', 'horizontal', '|', 'preview', 'searchreplace', 'drafts']], initialContent:'', //关闭字数统计 wordCount:false, zIndex:2, //关闭elementPath elementPathEnabled:false, //默认的编辑区域高度 initialFrameHeight:250 //更多其他参数,请参考ueditor.config.js中的配置项 //更多其他参数,请参考ueditor.config.js中的配置项 }); editor.ready(function() { editor.setDisabled(); }); $("#editor").find("*").css("max-width","362px"); </script> </div> </div> <div class="layui-form-item"> <label for="L_vercode" class="layui-form-label">验证码</label> <div class="layui-input-inline"> <input type="text" id="code" name="code" value="" required lay-verify="required" placeholder="图片验证码" autocomplete="off" class="layui-input"> </div> <div class="layui-form-mid"> <span style="color: #c00;"><img class="hand" src="https://www.e-learn.cn/qa/user/code.html" onclick="javascript:updatecode();" id="verifycode"><a class="changecode" href="javascript:updatecode();"> 看不清?</a></span> </div> </div> <div class="layui-form-item"> <input type="hidden" value="402157" id="ans_qid" name="qid"> <input type="hidden" id="tokenkey" name="tokenkey" value=''/> <input type="hidden" value="Magento Change Product Page Titles to Include Attributes" id="ans_title" name="title"> <div class="layui-btn layui-btn-disabled" id="ajaxsubmitasnwer" >提交回复</div> </div> </form> </div> </div> <input type="hidden" value="402157" id="adopt_qid" name="qid" /> <input type="hidden" id="adopt_answer" value="0" name="aid" /> </div> <div class="layui-col-md4"> <!-- 热门讨论问题 --> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">热议问题</dt> <!-- 本周热门讨论问题显示10条-->