如何在 OpenCart 中创建自定义的 SEO 友好 URL?

2024-03-28

如何在 OpenCart 中自定义系统 URL?例如,我想http://example.com/index.php?route=checkout/cart http://example.com/index.php?route=checkout/cart显示为http://example.com/cart http://example.com/cart

我知道 OpenCart 为产品、类别、制造商和信息页面提供了 SEO URL,但看起来没有任何内置的东西(至少在 1.5.0 版本之前)。


事实证明,这可以通过对单个文件进行相对简单的更改来完成。没有 .htaccess 重写规则,只需修补 Catalog/controller/common/seo_url.php 文件并将漂亮的 URL 添加到现有数据库表中。


seo_url.php 的补丁:

Index: catalog/controller/common/seo_url.php
===================================================================
--- catalog/controller/common/seo_url.php   (old)
+++ catalog/controller/common/seo_url.php   (new)
@@ -48,7 +42,12 @@
                $this->request->get['route'] = 'product/manufacturer/product';
            } elseif (isset($this->request->get['information_id'])) {
                $this->request->get['route'] = 'information/information';
-           }
+           } else {
+                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'");
+                if ($query->num_rows) {
+                    $this->request->get['route'] = $query->row['query'];
+                }
+           }

            if (isset($this->request->get['route'])) {
                return $this->forward($this->request->get['route']);
@@ -88,7 +87,15 @@
                        }

                        unset($data[$key]);
-                   }
+                   } else {
+                        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'");
+
+                        if ($query->num_rows) {
+                            $url .= '/' . $query->row['keyword'];
+
+                            unset($data[$key]);
+                        }
+                   }
                }
            }

需要进行两次编辑。第一个扩展了index()函数来查看url_alias表为any关键词匹配$this->request->get['_route_'].

第二个扩展了rewrite()函数来查看url_alias表为all路线,不仅仅是产品、制造商和信息页面的路线。


将条目添加到数据库:

INSERT INTO `url_alias` (`url_alias_id`, `query`, `keyword`) VALUES
(NULL, 'checkout/cart', 'cart');

就是这样。http://example.com/cart http://example.com/cart应该返回相同的东西http://example.com/index.php?route=checkout/cart http://example.com/index.php?route=checkout/cart确实如此,OpenCart 应该认识到$this->url->link('checkout/cart');并返回一个指向漂亮 URL 的链接http://example.com/cart http://example.com/cart

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 OpenCart 中创建自定义的 SEO 友好 URL? 的相关文章

  • PHP日期时间“下周星期三”给我星期一

    我正在尝试使用以下方法获取下周星期三的日期new DateTime next week wednesday 然而 它返回2016 12 19 00 00 00 000000今天是星期一 为什么会这样呢 如何得到正确的结果 我尝试在在线 PH
  • 如何自定义 Zend_Form 正则表达式错误消息?

    我有以下代码 postcode form gt createElement text postcode postcode gt setLabel Post code postcode gt addValidator regex false
  • XMLReader - 如何处理未声明的命名空间

    Merged https meta stackexchange com questions 158066 what is a merged question with 如何使用 XMLReader 读取未定义命名空间的 XML 文件 que
  • 从 stdin 读取后,PHP 在每行上给出尾随“=”

    stdin 的内容因自动换行和尾随 而被损坏 这显然破坏了我需要发布的 URL 我需要从电子邮件中提取 URL 链接 然后发布该 URL 因此 我使用我在互联网上看到的标准代码片段将电子邮件传输到 cpanel 中的 php 脚本 fd f
  • 如何使用 PHP 创建动态页面标题

    大家好 我想知道是否有人可以帮助解决这个 PHP 问题 是否可以使用 H2 标记中的文本并使用它来动态填充页面标题 我还希望能够使用相同的技术将 H2 文本添加到元描述中 有人可以帮忙吗 如果您的 h2 文本是动态创建的 那么网页的其他部分
  • PHP:__toString() 和 json_encode() 不能很好地协同工作

    我遇到了一个奇怪的问题 我不知道如何解决它 我有几个类 它们都是 JSON 对象的 PHP 实现 这是问题的说明 class A protected a public function construct this gt a array n
  • 如何在 laravel/php 中访问该集合的内容

    我是 Laravel 的新手 正在做一个构建迷你社交网络应用程序的项目 我有一个与用户模型有关系的帖子模型 我有一个帖子页面 其中仅显示经过身份验证的用户及其朋友的帖子 在我的 PostController 中 我像这样查询经过身份验证的用
  • Laravel 5 Eloquent 关系:无法修改/覆盖关系表属性

    我正在使用 Laravel 5belongsToMany使用中间数据透视表定义相关表的方法 我的应用程序正在使用雄辩的模型Tour and 旅游类别 在游览模型中我有 namespace App use Illuminate Databas
  • 准备好的声明不返回任何内容

    我知道这个特定的查询是有效的 因为我用未经准备的过程方法测试了它 这里是 name introduction mysqli new mysqli localhost user pass db or die There was a probl
  • 生成 CloudFront 签名 URL 时性能缓慢

    我正在按照此示例使用 PHP 在 CloudFront 上创建签名 URLhttp docs aws amazon com AmazonCloudFront latest DeveloperGuide CreateURL PHP html
  • 在 PHP 中计算 Cookie 大小

    我想使用 php 在服务器端读取 cookie 并计算其长度 但找不到任何直接方法来执行此操作 那么如何实现这个任务呢 那这个呢 setcookie user Dino babu kannampuzha time 3600 if isset
  • 即使 is_dir 是一个目录,它也会返回 false 吗?

    为什么 is dir 即使是一个目录也会返回 false 没有返回错误 path mysql var lib mysql if is dir path mysql echo error 返回错误 path mysql var lib mys
  • 如何理顺 Laravel Blade @extends 的执行顺序?

    In 我尝试找到一种通过引用刀片 include来传递变量的方法 https stackoverflow com questions 25437939 how to pass variables by reference to includ
  • Yii2 - 如何在用户身份中设置动态 authTimeout?

    在这里 我扩展了UserYii2 的身份 这是我的配置 user gt identityClass gt app models UserMaster class enableAutoLogin gt false loginUrl gt au
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • 在 WooCommerce 3.3 中使用 Google Map API 计算结帐距离

    我已经发布几个月前有类似的问题 https stackoverflow com questions 46348735 calculated distance shipping cart fee via google api in wooco
  • PHP 中 while (true){ 是什么意思?

    我看过这段代码 但不知道这意味着什么 while true echo Hello world 我知道什么是 while 循环 但是 while true 是什么意思 会执行多少次 这不是无限循环吗 虽然是无限循环 但您可以使用以下命令退出它
  • 尝试使用curl进行GET,发送的值允许为空

    我正在尝试使用curl 来执行一个简单的GET 其中包含一个名为redirect uri 的参数 被调用的 php 文件打印出 GET redirect uri 的空字符串 它显示 red 并且似乎没有发送任何内容 执行获取操作的代码 Ge
  • 日期函数的奇怪行为

    我今天在 StackOverflow 上遇到了这个问题 但没有得到答案 我的问题是 echo date Y m d strtotime 2012 september 09 output 2012 09 01 echo date Y m d
  • 使用 php 变量更改 css 类

    这里需要您的帮助 正如标题所示 我正在尝试使用 PHP 变量更改 css 类 所以基本上我想创建一个回显某些代码的循环 但我希望第一个循环中的 div 类有所不同 它应该被隐藏 这是我为使问题变得清晰而编写的简化代码 我不知道错误在哪里 请

随机推荐

  • 如何有效地检查同一个表中的两列是否是一对一映射?

    即使不同值计数相等 也并不一定意味着一对一的映射关系 SELECT COUNT DISTINCT Column A FROM MyTable SELECT COUNT DISTINCT Column B FROM MyTable A 列 1
  • 通过 json_encode 传递日语字符(UTF-8)的问题

    我在通过 json encode 将日语字符从 PHP 传输到 JavaScript 时遇到问题 这是从 csv 文件读取的原始数据 PRODUCT1 QA PRODUCT2 QA a PRODUCT3 QA 1 问题是 当通过 echo
  • 限制性安排的数量

    我正在寻找一种更快的方法来解决这个问题 假设我们有n boxes and n 弹珠 他们每个人都有不同的种类 每个盒子只能包含某种弹珠 如下例所示 并且只有一个大理石适合装在一个盒子里 请阅读编辑内容 整个算法已在下面链接的帖子中进行了描述
  • Oracle SQl Dev,如何计算2个日期之间的工作日数

    有谁知道如何计算两个日期字段之间的工作日数 我正在使用 oracle sql 开发人员 我需要找到多个开始日期和结束日期之间工作日的平均值 因此 我需要获取每条记录的天数 以便对它们进行平均 这是可以作为一行完成的事情吗 SELECT我的查
  • 将“Future[Option[Future[Option[X]]]]”转换为“Future[Option[X]]”

    如何转型Future Option Future Option X into Future Option X 如果它是一个TraversableOnce代替Option我会用未来的伴生对象 http www scala lang org a
  • Console.ReadKey 取消[重复]

    这个问题在这里已经有答案了 可能的重复 如何向 Console ReadLine 添加超时 https stackoverflow com questions 57615 how to add a timeout to console re
  • 在 Visual Studio 中编译为独立可执行文件 (.exe)

    如何在 Visual Studio 中制作独立的 exe 它只是一个简单的控制台应用程序 我认为用户不会喜欢安装一个微小的控制台应用程序 我使用 Visual Studio 命令提示符编译了一个简单的 cpp 文件 即使未安装 NET Fr
  • 在 DataTrigger 内绑定 Storyboard 动画会导致 XamlParser 崩溃

    我希望我的应用程序在每次发生特定事件时将椭圆动画到新位置 出于测试目的 我制作了一个更改视图模型属性的按钮 并且该属性绑定到触发动画的数据触发器 但后来我希望视图模型根据我尚未实现的其他事件触发它 这就是为什么我可以不要直接在视图中使用绑定
  • 如何在 Windows 上设置 git 存储库,然后在 Mac OSX 上对其进行推送/拉取

    我正在尝试设置一个基于 Windows 的 Web 服务器 但在 Mac OSX 上进行开发工作 我在 Windows 服务器上安装了 freeSSHd 和 msysGit 并在我想要的位置设置了一个存储库 我的 Mac 上也有 git 并
  • 使用 XCTest 进行异步性能测试

    我已经开始探索用于异步和性能测试的新 XCTest API 单独来看 WWMC 中的 Apple 示例运行良好 但我一直无法弄清楚如何将它们结合起来 我能想到的最好的方法如下 但运行时收到以下错误 API 违规 在未设置任何期望的情况下调用
  • 有没有办法从 applet 本身重新加载/刷新 java applet?

    我的小程序上有一个按钮 包含在浏览器中 我想通过以下两种方式之一重新加载或刷新整个小程序 刷新小程序本身 无需刷新浏览器 刷新整个浏览器 这可以在小程序内实现吗 使用 AppletContext showDocument 方法 applet
  • HTML5 视频无法在 Chrome 中加载,但在打开开发者控制台时可以工作

    我正在为客户开发一个网络应用程序 HTML5 视频标签存在问题 问题是该视频无法在 Chrome 中加载 但可以在 Safari Firefox 和 IE 上加载 所以我开始在 Chrome 中调试 但我发现如果我在打开控制台的情况下刷新页
  • C++ 中默认的 catch throw 语句按值传递还是按引用传递

    默认的catch语句是如何实现的catch 通过值或引用捕获异常 其次 默认怎么抛出throw 抛出异常 按值还是按引用 包罗万象的捕获物 根本不允许您访问异常对象 因此这个问题没有实际意义 更正 重新投掷throw 抛出原始对象 如果处理
  • Errno::ENOMEM:无法分配内存 - cat

    我有一项在生产环境中运行的作业 用于处理 xml 文件 xml 文件总共约为 4k 大小为 8 到 9 GB 处理后我们得到 CSV 文件作为输出 我有一个 cat 命令 它将所有 CSV 文件合并到我得到的单个文件中 Errno ENOM
  • “Greedy” 和 “Reluctant” 正则表达式量词有什么区别?

    来自Pattern http java sun com javase 6 docs api java util regex Pattern htmljava文档 Greedy quantifiers X X once or not at a
  • 如何通过 YouTube API 检索我自己的私人播放列表?

    我正在尝试找到一种方法从 YouTube 检索我自己的私人播放列表 以便在我自己的个人网站上显示 到目前为止 所有文档似乎都表明检索私人用户数据 如私人播放列表 需要您的网站users通过身份验证过程以提供他们自己的验证 就我而言 我不想要
  • 使用 Dlang 计算目录中的文件数

    我想要一种简单的方法来使用 D 来计算目录中的文件数量 据我从 D 手册中可以看出 dirEntries 返回一个范围 但它没有长度属性 因此 我必须用计数器迭代结果 或者收集传统数组中的名称 我可以找到它的长度 有更好的方法吗 auto
  • 单元测试 OSGi 组件

    我目前正在考虑 如何设计 OSGi 组件 以便使用 jUnit 和 Mockito 等框架轻松为其编写测试 由于 OSGi 增强了 DIP 因此模拟捆绑包间的依赖关系非常容易 依赖倒置原理 和注入器方法 例如 setter 通常存在 但是捆
  • 使用以下格式转换日期时间字符串:(yyyy-MM-dd'T'hh:mm:ss-zzz)

    我收到一个 JSON 字符串 其中包含如下所示的日期 2015 07 09T08 38 49 07 00最后一部分是时区 有没有一种标准方法可以将其转换为DateTimeOffset 这是我到目前为止所拥有的 var olu JsonCon
  • 如何在 OpenCart 中创建自定义的 SEO 友好 URL?

    如何在 OpenCart 中自定义系统 URL 例如 我想http example com index php route checkout cart http example com index php route checkout ca