如何在magento中编辑标签网址? [英] How to edit tag url in magento?
问题描述
我想在magento中创建SEO友好标签URL.
I want to make SEO friendly tag URL in magento.
当前为abc.com/tag/product/list/tagId/17/
但我想做它abc.com/tag/xyz
Currently it is abc.com/tag/product/list/tagId/17/
but i want to make it abc.com/tag/xyz
我通过使用"URL重写管理"尝试了此操作,但是它不起作用.
I tried this by using "URL rewrite management" but it is not working.
请帮助.
推荐答案
首先,我想说的是一个很好的问题.让我都被解雇了.
它可以与url管理一起使用,但是有点麻烦.要做很多工作.
例如,我在url管理中添加了它.
First I want to say that this is a nice question. Got me all fired up.
It works with the url management but it's kind of a drag. To much work.
For example I added this in the url management.
Type : Custom
Store: Select any store here - if you have more you have to do this process for each one
ID Path: TAG_23
Request Path: tag/camera
Target Path: tag/product/list/tagId/23
Redirect: No
已保存.现在,当调用ROOT/tag/camera
时,我看到带有'camera'标签的产品.
但是可以肯定的是,这并不是要走的路.如果您的标签超过10个,则会感到无聊.
Saved. now when calling ROOT/tag/camera
I see the prodcts tagged with 'camera'.
But for sure this is not the way to go. if you have more than 10 tags you get bored.
因此,我们的想法是制作一个模块,使magento能够识别诸如tag/something
之类的标签,并将标签的链接更改为上述相同格式,因此您无需编辑大量模板.
我将模块命名为Easylife_Tag
.您需要以下文件.
So the idea is to make a module that will make magento recognize tags like tag/something
and will change the links for tags to the same format above, so you won't have to edit a lot of templates.
I named the module Easylife_Tag
. You need for it the following files.
app/etc/modules/Easylife_Tag.xml
-声明文件
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Tag>
<codePool>local</codePool>
<active>true</active>
<depends>
<Mage_Tag />
</depends>
</Easylife_Tag>
</modules>
</config>
app/code/local/Easylife/Tag/etc/config.xml
-配置文件
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Tag>
<version>1.0.0</version>
</Easylife_Tag>
</modules>
<global>
<events>
<controller_front_init_routers><!-- add a custom router to recognize urls like tag/something -->
<observers>
<easylife_tag>
<class>Easylife_Tag_Controller_Router</class>
<method>initControllerRouters</method>
</easylife_tag>
</observers>
</controller_front_init_routers>
</events>
<models>
<tag>
<rewrite>
<tag>Easylife_Tag_Model_Tag</tag><!-- rewrite the tag model to change the url of the tags to tag/something -->
</rewrite>
</tag>
<tag_resource>
<rewrite>
<tag>Easylife_Tag_Model_Resource_Tag</tag> <!-- rewrite the tag resource model - see below why is needed -->
</rewrite>
</tag_resource>
</models>
</global>
</config>
app/code/local/Easylife/Tag/Model/Tag.php
-重写的标签模型
<?php
class Easylife_Tag_Model_Tag extends Mage_Tag_Model_Tag {
//change the url from `tag/product/list/tagId/23` to `tag/camera`
public function getTaggedProductsUrl() {
return Mage::getUrl('', array('_direct' => 'tag/'.$this->getName()));
}
}
app/code/local/Easylife/Tag/Model/Resource/Tag.php
-重写标签资源模型
<?php
class Easylife_Tag_Model_Resource_Tag extends Mage_Tag_Model_Resource_Tag {
//by default, when loading a tag by name magento does not load the store ids it is allowed in
//this method loads also the store ids
public function loadByName($model, $name){
parent::loadByName($model, $name);
if ($model->getId()) {
$this->_afterLoad($model);
}
else {
return false;
}
}
}
app/code/local/Easylife/Tag/Controller/Router.php
-自定义路由器-内联查看注释
app/code/local/Easylife/Tag/Controller/Router.php
- the custom router - see comments inline
<?php
class Easylife_Tag_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract{
public function initControllerRouters($observer){
$front = $observer->getEvent()->getFront();
$front->addRouter('easylife_tag', $this);
return $this;
}
public function match(Zend_Controller_Request_Http $request){
//if magento is not installed redirect to install
if (!Mage::isInstalled()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect(Mage::getUrl('install'))
->sendResponse();
exit;
}
//get the url key
$urlKey = trim($request->getPathInfo(), '/');
//explode by slash
$parts = explode('/', $urlKey);
//if there are not 2 parts (tag/something) in the url we don't care about it.
//return false and let the rest of the application take care of the url.
if (count($parts) != 2) {
return false;
}
//if the first part of the url key is not 'tag' we don't care about it
//return false and let the rest of the application take care of the url
if ($parts[0] != 'tag') {
return false;
}
$tagName = $parts[1]; //tag name
//load the tag model
$tag = Mage::getModel('tag/tag')->loadByName($tagName);
//if there is no tag with this name available in the current store just do nothing
if(!$tag->getId() || !$tag->isAvailableInStore()) {
return false;
}
//but if the tag is valid
//say to magento that the request should be mapped to `tag/product/list/tagId/ID_HERE` - the original url
$request->setModuleName('tag')
->setControllerName('product')
->setActionName('list')
->setParam('tagId', $tag->getId());
$request->setAlias(
Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
$urlKey
);
return true;
}
}
就是这样.清除缓存并放手.
That's it. Clear the cache and give it a go.
.
您可以在此处找到完整的扩展名.唯一的不同是,它使用community
代码池而不是如上所述的本地代码.
.
You can find the full extension here. The only difference is that it uses the community
code pool instead of local as described above.
这篇关于如何在magento中编辑标签网址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!