当前位置: 首页 > 面试题库 >

如何成为OpenCart专家?

穆正祥
2023-03-14
问题内容

似乎他们没有任何文档,除了在他们的官方论坛上有一些api调用之外。我有Zend框架和CodeIgniter框架的经验。OpenCart的任何高手都可以向我推荐学习它的最佳方法,并在最短的时间内对其进行掌握吗?我必须尽快做一个大项目。


问题答案:

本指南是为已经熟悉PHP,OOP和MVC架构的开发人员编写的

在下面的内容中,您将看到购物车目录侧的示例。除了在相关部分中提到的视图之外,管理端的功能是相同的

了解图书馆

所有的库功能都可以通过使用Controller,Model和Views访问$this->library_name。所有这些都可以在/system/library/文件夹中找到。例如,要访问当前购物车的产品,您需要使用Cart该类,该类/system/library/cart.php可以使用来访问$this->cart->getProducts()

常用物品

  • customer.php -客户相关功能
  • user.php -管理员用户相关功能
  • cart.php -购物车相关功能
  • config.php -所有设置都从这里加载
  • url.php -URL生成功能

了解路线参数

OpenCart的框架依靠route=aaa/bbb/ccc查询字符串参数中的来知道要加载的内容,并且是查找需要为每个页面编辑的文件的基础功能。实际上,大多数路由仅使用aaa/bbb,应该将其视为两个部分,但是其中的某些部分则包含三个部分aaa/bbb/ccc。第一部分aaa通常与通用文件夹(如控制器或模板文件夹)中的文件夹有关。第二部分通常与文件名有关,没有相关.php.tpl扩展名。第三部分在下面的“了解控制器”部分中进行了说明

了解语言

语言存储在子/catalog/language/文件夹的your-language文件夹中。其中,跨页使用的常规文本值存储your- language.php文件夹内的文件中,因此对于目录侧的英语,您可以在中找到这些值catalog/language/english/english.php。对于特定的页面文本,您将需要route页面的(通常是这种情况,但并非
总是
如此,因为您可以指定所需的任何语言文件)。例如,搜索页面具有路线product/search,因此该页面的特定于语言的文本可以在中找到catalog/language/english/product/search.php(请注意,文件名和子文件夹与路径匹配,后跟.php

要在控制器中加载语言,请使用

$this->language->load('product/search');

然后,您可以使用语言库功能get来检索特定的语言文本,例如

$some_variable = $this->language->get('heading_title');

语言变量是使用特殊变量在语言文件中分配的,该特殊变量$_是键和文本值的数组。在您中,/catalog/language/english/product/search.php您应该找到类似的内容

$_['heading_title']     = 'Search';

全局语言文件english/english.php中的值将自动加载,并且无需使用该$this->language->load方法即可使用

了解控制器

控制器是基于加载的route,很容易理解。控制器位于/catalog/controller/文件夹中。从上一个示例继续,“搜索控制器”页面/product/search.php位于此文件夹中。再次注意,使用了跟随的路线.php

打开控制器文件,您将看到Pascal
Case类名扩展了Controller名为的类ControllerProductSearch。这又是特定于路由的,Controller其后是子文件夹名称和文件名,而扩展名不大写。实际不需要大写,但是为了易于阅读,建议使用大写。值得注意的是,类名除了字母和数字外,不从子文件夹和文件名中获取任何值。下划线被删除。

在类中是方法。声明的类中的方法public可以通过路由访问-
private不能。默认情况下,使用标准的两部分路由(aaa/bbb上述),将index()调用默认方法。如果使用了路线的第三部分(ccc上方),则将改为运行此方法。例如,account/return/insert将加载/catalog/controller/account/return.php文件和类,并尝试调用该insert方法

了解模型

OpenCart中的模型位于/catalog/model/文件夹中,并且根据功能(而非路由)进行分组,因此您需要通过以下方式将其加载到控制器中

$this->load->model('xxx/yyy');

这会将文件加载到xxx名为的子文件夹中yyy.php。然后可以通过对象使用它

$this->model_xxx_yyy

与控制器一样,您只能调用其public方法。例如,要调整图像大小,可以使用tool/image模型并按resize如下所示调用其方法

$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);

从控制器了解视图中的变量分配

为了将值从控制器传递到视图,您只需要将数据分配给$this->data变量,该变量本质上是键=>值对的数组。举个例子

$this->data['example_var'] = 123;

如果您熟悉将每个键转换为变量的extract()方法,则在视图中访问它应该有点容易理解。因此,该example_var键将成为$example_var并且可以在视图中按原样访问。

了解主题

主题仅在目录侧可用,并且基本上是模板,样式表和主题图像的文件夹。主题文件夹放置在/catalog/view/theme/文件夹中,后跟主题名称。文件夹名称并不重要,但default文件夹除外

管理员端使用/admin/view/template//theme/theme-name/由于路径不同,因此跳过了路径)

模板文件位于template主题文件夹内的文件夹中。如果没有任何模板可用于当前选定的主题,则使用默认文件夹的模板作为后备。这意味着可以使用很少的文件来创建主题,并且仍然可以正常使用。它还可以减少代码重复和升级时的问题

了解视图(模板)

与语言和模型一样,视图文件通常与路径相关,尽管不一定必须如此。/catalog/view/theme/your- theme/template/除非不存在,否则通常会在目录侧找到模板,在这种情况下,将使用默认主题的模板。对于上面的搜索页面示例,文件为product/search.tpl。对于具有三部分的路线,通常aaa/bbb_ccc.tpl没有硬性规定。在管理员中,大多数页面都遵循此规则,除了页面列表项(如产品列表页)位于catalog/product_list.tpl并且产品编辑表单位于中catalog/product_form.tpl。同样,这些没有设置,但是是默认购物车的标准。

模板文件实际上只是另一个php文件,但是具有.tpl扩展名,并且实际上在控制器文件中运行,因此,您可以在控制器中进行编码的所有内容都可以在模板文件中运行(尽管除非绝对建议,否则不建议这样做)必要)

了解数据库对象

查询使用

$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");

DB_PREFIX 顾名思义,是一个包含数据库前缀(如果存在)的常量

$result将返回一个SELECT查询对象,其中包含一些属性

$result->row 如果一个或多个作为关联数组返回,则包含第一行的数据

$result->rows 包含行结果数组,非常适合使用foreach进行循环

$result->num_rows 包含返回的结果数

$this->db对象还有一些其他方法

$this->db->escape()在传递的值上使用mysql_real_escape_string()

$this->db->countAffected返回受UPDATE查询影响的行数,依此类推

$this->db->getLastId()使用mysql_insert_id()返回最后一个自动增量ID

了解保留变量

Opencart的已预定义变量使用代替标准的$_GET$_POST$_SESSION$_COOKIE$_FILES$_REQUEST$_SERVER

$_SESSION使用$this->session->data其中data是模拟数组的关联数组进行编辑$_SESSION

其他所有对象都可以使用进行访问$this->request并已被“清理”以符合启用/禁用的魔术引号,因此

$_GET 变成 $this->request->get

$_POST 变成 $this->request->post

$_COOKIE 变成 $this->request->cookie

$_FILES 变成 $this->request->files

$_REQUEST 变成 $this->request->request

$_SERVER 变成 $this->request->server

摘要

尽管以上内容并不是针对开发人员的防弹指南,但希望它可以为那些入门的人提供一个良好的起点。



 类似资料:
  • 承担超过你的权力的责任。扮演你想要扮演的角色。对那些对更大组织的成功做出过贡献以及对你个人提供过帮助的人表示感谢与欣赏。 如果你想成为团队的领导,去激励与团结。如果你想成为一个经理,担起规划的责任。你通常可以在和领导或经理在一起时,舒服地完成这些事情,因为这使得他们可以抽空去承担更大的责任。如果这太多了以至于你不能尝试,一次只做一点点。 评估你自己。如果你想要变成一个好的程序员,询问一些你欣赏的人

  • OpenCart是新一代基于PHP开发的开源在线购物车系统。OpenCart具有易于使用,功能丰富,搜索引擎友好和漂亮简洁的操作界面等特点。 演示地址:https://www.opencart.com/index.php?route=cms/demo

  • Opencart Plus 中文专业版是基于Opencart 3.0版本,针对中文用户定制优化的版本,内置中文领域主流支付方式,物流配送方式,简化注册以及结账流程,不仅兼容Opencart原生版本的功能插件,更符合中文领域的电商环境以及用户习惯。 同时,Opencart中文专业版针对移动端做了优化适配,提供更好的移动端体验。 和国内其他的程序不一样,使用 CNOpencart中文专业版 没有任何使

  • 我有以下模板方法: 但是我得到了那些奇怪的链接错误: /usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7/例外:62:void MyStruct::readField(std::basic_istream)的多重定义 如何专门化此成员函数? 编辑 这种方法在以下方面起作用: 或者使用s或在类外使用

  • 我的Opencart商店(2.0版)有问题。我在几天内没有做任何改变,我的主机公司周末也不工作。。。周末似乎总有一些事情出错。 当我尝试登录到我的管理面板时,出现以下错误: 警告:session_start():打开(/tmp/sess_6944b43ff0351f3609154764b353ba7c,O_RDWR)失败:在/home/thespace/public_html/system/lib

  • 我已经阅读了很多关于这个和其他网站的问题和文章,但我仍然无法让它工作。 我配置了maven来执行我的构建,现在想将工件放入存储库中。我在tomcat中安装了artiFactory,它似乎正在工作。 如果我执行“mvn全新安装”,消息表明工件被上传到本地maven存储库,而不是artifactory: 如果我执行一个“mvn deploy:deploy”文件,指定存储库,消息表明工件正在上传到工件中