Magento 中的 URL 重写
已发表: 2014-09-11对于所有网站来说,拥有友好的 URL 以服务于 SEO 目的至关重要。 然而,我们在 Magento 中创建它们并不总是那么容易,尤其是在您安装模块时。 作为非技术用户,我们如何解决这个问题? 我们为Magento 中的 URL 重写提供 2 个可行的解决方案,并根据需要创建适当的 URL。 你看这将不再是一个大问题。
热的!! Claue 2.0 版本已经发布
查看演示
Claue – Clean, Minimal Magento 2&1 Theme是现代和干净的电子商务商店的绝佳模板,具有 40 多种主页布局和大量商店、博客、投资组合、商店定位器布局和其他有用页面的选项。 Claue 版本 2. 0 带有一系列独家功能,包括:
- 基于 Luma 主题。
- 满足 Magento 主题的所有标准
- 显着的性能提升
- 与大多数第三方扩展兼容。
- 与 Magento 2.4.x 完全兼容
第二个高级版本与之前的版本完全不同。 因此,如果您使用的是 Claue 版本 1 并想更新到 Claue 版本 2,则只能重建新网站,而不是从旧版本更新。 现在,让我们回到主题
在我们讨论这两种解决方案之前,我们将展示一个示例来描述如何创建默认 URL 以及进行一些修复的先决条件知识。 例如。 我们为 Blog 创建了一个名为 Blog 的模块,它的命名空间是 MGS,具有简单的字段为
ID | 标题 | 描述 |
在后端,当我们创建一个帖子时,我们需要插入两个字段,即。 标题和说明。 帖子的 ID 将自动生成。 为了显示博客的详细信息,我们依赖路由器(在文件 config.xml 中声明,我们声明了 blog)、控制器(我们命名为 index,因此它将是文件夹控制器中的文件 IndexControler.php)、操作(我们称为视图,文件 IndexControler.php 中的 viewAction 函数)和帖子的 id。
因此,前端帖子的默认 URL 将如下所示:
http://domain.com/blog/index/view/id/1 (1 是帖子的 ID)
就我们所见,这个 URL 完全不利于 SEO,应该将其重写为对 URL 友好。 回到主要目标,我们提出了 2 种创建 URL 友好的方法。 无论哪种方式,您都需要定义所需的 URL,或者您将遵循通用规则来创建 URL(通常我们将使用帖子的标题,将所有字符转换为正常样式,用 - 替换空格,例如标题“如何在 Magento 中重写 url ”将变为“ how-to-rewrite-url-in-magento。
在本文中,我们将使用 URL 定义方法,因此,我们将在上述数据库中添加一个字段来保存 URL。
ID | 标题 | 描述 | 网址 |
因此,帖子的 URL 将被填写。
重写 URL 的第一种技术
使用 Magento 的 URL 重写功能,您可以在目录-> URL 重写管理中获得更多详细信息。
在那里你会发现 Magento 创建了一个模块来保存类别和产品的 URL 重写。 Magento 还允许您通过单击“添加 URL 重写”来添加 URL 重写以添加自定义 URL 重写:
目标路径:是帖子的 URL,例如。 博客/索引/视图/id/1
请求路径:是您将插入的 URL 重写,例如。 如何重写 url-in-magento.html
显然我们不会手动添加这些信息来保存 URL 重写。 相反,我们将利用核心模块的 url_rewrite 模型(Mage::getModel('core/url_rewrite'))在保存博客数据后将博客的 URL 保存在 core_url_rewrite 表中。
在博客中保存帖子后,使用以下代码保存 URL 重写:
Mage::getModel('core/url_rewrite') ->setIsSystem(true) ->setIdPath('blog/index/view/id/'.$blogId) ->setTargetPath('blog/index/view/id/'.$blogId) ->setRequestPath($url) ->save();
注意:$blogId 是保存后的博客 id,$url 是您定义的 URL。
需要提醒的是,上述命令适用于新帖子,如果要编辑现有帖子,则需要更新此记录。
重写 URL 的第二种技术
仍然采用上述博客模块和相同的数据字段,您在后端创建帖子,包括标题、描述、url 的足够数据。
转到 config.xml (app/code/local/MGS/Blog/etc)
在全局标签内:
<global> … </global>
添加以下代码
<events> <controller_front_init_routers> <observers> <blog_custom_router> <class>MGS_Blog_Controller_Router</class> <method>initControllerRouters</method> </blog_custom_router> </observers> </controller_front_init_routers> </events>
在app/code/local/MGS/Blog模块的主文件夹中,您将创建另一个名为 Controller 的文件夹,然后在其中创建一个名为Router.php的文件,其内容如下:
<?php class MGS_Blog_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract { /** * Initialize Controller Router * * @param Varien_Event_Observer $observer */ public function initControllerRouters($observer) { /* @var $front Mage_Core_Controller_Varien_Front */ $front = $observer->getEvent()->getFront(); $front->addRouter('blog', $this); } /** * Validate and Match Cms Page and modify request * * @param Zend_Controller_Request_Http $request * @return bool */ public function match(Zend_Controller_Request_Http $request) { if (!Mage::isInstalled()) { Mage::app()->getFrontController()->getResponse() ->setRedirect(Mage::getUrl('install')) ->sendResponse(); exit; } $identifier = trim($request->getPathInfo(), '/'); $condition = new Varien_Object(array( 'identifier' => $identifier, 'continue' => true )); if ($condition->getRedirectUrl()) { Mage::app()->getFrontController()->getResponse() ->setRedirect($condition->getRedirectUrl()) ->sendResponse(); $request->setDispatched(true); return true; } if (!$condition->getContinue()) { return false; } $collection = Mage::getModel('blog/blog') ->getCollection(); if(count($collection)>0){ foreach($collection as $post){ if($identifier == $post->getUrl()){ $request->setModuleName('blog'); $request->setControllerName('index'); $request->setActionName('view'); $request->setParam('id', $post->getId()); return true; } } } } }
上面这段代码的意思是:
例如,当您在浏览器中键入路径时:
http://domain.com/how-to-rewrite-url-in-magento。
该函数会将路径: how-to-rewrite-url-in-magento.html与博客数据表中的 url 进行比较
如果路径类似于数据库中任何记录的 URL 字段,则 4 个命令行:
$request->setModuleName('blog'); $request->setControllerName('index'); $request->setActionName('view'); $request->setParam('id', $post->getId());
将帮助系统理解 URL 对应于 router: blog, controler: index, action: view 和 id 是 URL 与浏览器中的路径相同的记录的 id。
例如。 记录具有 URL how-to-rewrite-url-in-magento.html 和 id 1,然后:
http://domain.com/how-to-rewrite-url-in-magento.html
对应于
http://domain.com/blog/index/view/id/1
这是我们推荐的两种解决方案,用于解决Magento中的 URL 友好问题。 我们希望它们对您有所帮助。 我们非常感谢您的评论和对文章的进一步贡献。
非常感谢您的时间!
Magesolution支持团队!