如何成为OpenCart大师?[已关闭]面向初学者的 OpenCart 1.5.X 开发人员快速入门指南

2022-08-30 07:38:43

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


答案 1

面向初学者的 OpenCart 1.5.X 开发人员快速入门指南

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

在下文中,您将看到购物车目录端的示例。管理端在功能上是相同的,除了相关部分中注明的视图


了解库

所有库功能都可以通过使用 控制器、模型和视图 进行访问。所有这些都可以在文件夹中找到。例如,要访问当前购物车的产品,您需要使用类,该类位于中,可以使用以下命令进行访问$this->library_name/system/library/Cart/system/library/cart.php$this->cart->getProducts()

常用物品

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

了解路由参数

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


了解语言

语言存储在子文件夹的文件夹中。在此中,跨各个页面使用的常规文本值存储在文件夹内的文件中,因此对于目录端的英语,您将在 中找到这些值。对于特定的页面文本,您将需要页面(通常情况如此,但并非总是如此,因为您可以指定所需的任何语言文件)。例如,搜索页面具有 route ,因此可以在 中找到该页面的语言特定文本(请注意,文件的名称和子文件夹与后跟的路由匹配)。/catalog/language/your-languageyour-language.phpcatalog/language/english/english.phprouteproduct/searchcatalog/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 类名,名为 。这同样特定于路由,后跟子文件夹名称和文件名,不带大写扩展名。大写实际上不是必需的,但建议使用大写字母以便于阅读。值得注意的是,类名不会从子文件夹和文件名中获取除字母和数字以外的任何值。删除下划线。ControllerControllerProductSearchController

类中是方法。声明的类中的方法可以通过路由运行 - 不是。默认情况下,对于标准的两部分路由(上图),将调用默认方法。如果使用路由的第三部分(上图),则将改为运行此方法。例如,将加载文件和类,并尝试调用该方法publicprivateaaa/bbbindex()cccaccount/return/insert/catalog/controller/account/return.phpinsert


了解模型

OpenCart中的模型位于文件夹中,并根据功能而不是路线进行分组,因此您需要通过以下方式将它们加载到控制器中/catalog/model/

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

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

$this->model_xxx_yyy

与控制器一样,您只能调用其方法。例如,要调整图像大小,可以使用模型并按如下方式调用其方法publictool/imageresize

$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


了解视图(模板)

与语言和模型一样,视图文件通常与路由相关,尽管根本不需要。目录端的模板通常位于 中,除非它不存在,在这种情况下,将使用默认主题的模板。对于上面的搜索页面示例,该文件是 。对于包含三个部分的路线,它通常存在,尽管没有硬性规则。在 admin 中,大多数页面都遵循此内容,但列出项目的页面(如产品列表页面)位于 中,并且产品编辑窗体位于 。同样,这些不是设置的,而是默认购物车的标准。/catalog/view/theme/your-theme/template/product/search.tplaaa/bbb_ccc.tplcatalog/product_list.tplcatalog/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$_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


总结

虽然以上不是开发人员的防弹指南,但希望它能成为初学者的良好起点。


答案 2

全局库方法:基本的opencart库函数及其功能,其中大多数可以从目录或管理文件夹(控制器,模型,视图)中的任何位置调用

CACHE
$this->cache->delete($key) - Deletes cache [product, category, country, zone, language, currency,
manufacturer]

CART
$this->cart->getProducts() Gets all products currently in the cart including options, discounted prices, etc.
$this->cart->add( $product_id, $qty = 1, $options = array()) - Allows you to add a product to the cart
$this->cart->remove( $key ) - Allows you to remove a product from the cart
$this->cart->clear() - Allows you to remove all products from the cart
$this->cart->getWeight() - Sum of the weight of all products in the cart that have require shipping set to Yes
$this->cart->getSubTotal() - returns the subtotal of all products added together before tax
$this->cart->getTotal() - returns the total of all products added together after tax
$this->cart->countProducts() - returns the count of all product in the cart
$this->cart->hasProducts() - returns true if there is at least one item in the cart
$this->cart->hasStock() - returns false if there is at least one item in the cart that is out of stock
$this->cart->hasShipping() - returns true if there is at least one item in the cart that requires shipping
$this->cart->hasDownload() - returns true if there is at least one item in the cart that has a download
associated

CONFIG
$this->config->get($key) - returns setting value by keyname based on application (catalog or admin)
$this->config->set($key, $value) - set the value to override the setting value. DOES NOT SAVE TO DATABASE

CURRENCY
$this->currency->set($currency) - set or override the currency code to be used in the session
$this->currency->format($number, $currency = '', $value = '', $format = TRUE) - format the currency
$this->currency->convert($value, $from, $to) - convert a value from one currency to another. Currencies must
exist
$this->currency->getId() - get the database entry id for the current currency (1, 2, 3, 4)
$this->currency->getCode() - get the 3-letter iso code for the current currency (USD, EUR, GBP, AUD, etc)
$this->currency->getValue($currency) - get the current exchange rate from the database for the specified
currency.
$this->currency->has(currency) - Check if a currency exists in the opencart currency list

CUSTOMER
$this->customer->login($email, $password) - Log a customer in
$this->customer->logout() - Log a customer out
$this->customer->isLogged() - check if customer is logged in
$this->customer->getId() - get the database entry id for the current customer (integer)
$this->customer->getFirstName() - get customer first name
$this->customer->getLastName() - get customer last name
$this->customer->getEmail() - get customer email
$this->customer->getTelephone() - get customer telephone number
$this->customer->getFax() - get customer fax number
$this->customer->getNewsletter() - get customer newsletter status
$this->customer->getCustomerGroupId() - get customer group id
$this->customer->getAddressId() - get customer default address id (maps to the address database field)

DATABASE
$this->db->query($sql) - Execute the specified sql statement. Returns row data and rowcount.
$this->db->escape($value) - Escape/clean data before entering it into database
$this->db->countAffected($sql) - Returns count of affected rows from most recent query execution
$this->db->getLastId($sql) - Returns last auto-increment id from more recent query execution 4

DOCUMENT (*Called from controller only before renderer)
$this->document->setTitle($title) - Set page title
$this->document->getTitle()- Get page title
$this->document->setDescription($description) - Set meta description
$this->document->getDescription()- Get meta description
$this->document->setKeywords()- Set meta keywords
$this->document->getKeywords()- Get meta keywords
$this->document->setBase($base) - Set page base
$this->document->getBase() - Get page base
$this->document->setCharset($charset) - Set page charset
$this->document->getCharset() - Get page charset
$this->document->setLanguage($language) - Set page language
$this->document->getLanguage()- Get page language
$this->document->setDirection($direction) - Set page direction (rtl/ltr)
$this->document->getDirection()- Get page direction (rtl/ltr)
$this->document->addLink( $href, $rel ) – Add dynamic <link> tag
$this->document->getLinks()- Get page link tags
$this->document->addStyle( $href, $rel = 'stylesheet', $media = 'screen' ) – Add dynamic style
$this->document->getStyles()- Get page styles
$this->document->addScript( $script ) - Add dynamic script
$this->document->getScripts()- Get page scripts
$this->document->addBreadcrumb($text, $href, $separator = ' &gt; ') – Add breadcrumb
$this->document->getBreadcrumbs()- Get Breadcrumbs

ENCRYPT
$this->encryption->encrypt($value) - Encrypt data based on key in admin settings
$this->encryption->decrypt($value) - Decrypt data based on key in admin settings

IMAGE
$this->image->resize($width = 0, $height = 0)

JSON
$this->json->encode( $data )
$this->json->decode( $data , $assoc = FALSE)

LANGUAGE
$this->language->load($filename);

LENGTH
$this->length->convert($value, $from, $to) - convert a length to another. units must exist
$this->length->format($value, $unit, $decimal_point = '.', $thousand_point = ',') - format the length to use
unit

LOG
$this->log->write($message) - Writes to the system error log

REQUEST
$this->request->clean($data) - Cleans the data coming in to prevent XSS
$this->request->get['x'] - Same as $_GET['x']
$this->request->post['x'] - Same as $_POST['x']

RESPONSE
$this->response->addHeader($header) - additional php header tags can be defined here
$this->response->redirect($url) - redirects to the url specified

TAX
$this->tax->setZone($country_id, $zone_id) - Set the country and zone id for taxing (integer)
$this->tax->calculate($value, $tax_class_id, $calculate = TRUE) - Calculate all taxes to be added to the total
$this->tax->getRate($tax_class_id) - Get the rates of a tax class id
$this->tax->getDescription($tax_class_id) - Get the description of a tax class id
$this->tax->has($tax_class_id) - Check if a tax class id exists in opencart

SESSION
$this->session->data['x'] - Same as $_SESSION['x']  

推荐