如何成为OpenCart大师?

时间:2012-11-20 17:45:51

标签: php opencart

除了官方论坛上的一些api电话之外,他们似乎没有任何文件。我有Zend框架和CodeIgniter框架的经验。任何OpenCart大师都可以向我推荐最好的学习方法,并在最短的时间内掌握它吗?我很快就要做一个大项目。

6 个答案:

答案 0 :(得分:306)

OpenCart 1.5.X开发人员快速入门指南

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

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


了解库

使用$this->library_name可通过Controller,Model和Views访问所有库功能。所有这些都可以在/system/library/文件夹中找到。例如,要访问当前购物车的产品,您需要使用位于Cart的{​​{1}}类,并且可以使用/system/library/cart.php <进行访问/ p>

常用物品

  • $this->cart->getProducts() - 与客户相关的职能
  • customer.php - 管理员用户相关功能
  • user.php - 购物车相关功能
  • cart.php - 所有设置均已从此
  • 加载
  • config.php - 网址生成功能

了解路线参数

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


了解语言

语言存储在{​​{1}}子文件夹的.tpl文件夹中。在此范围内,各个页面中使用的常规文本值存储在文件夹内的/catalog/language/文件中,因此对于目录端的英语语言,您将在your-language中找到值。对于特定的页面文本,您需要页面的your-language.php(通常是这种情况,但总是,因为您可以指定任何您喜欢的语言文件)。例如,搜索页面的路径为catalog/language/english/english.php,因此该页面的语言特定文本可以在route中找到(注意文件的名称和子文件夹与后面的路由匹配{ {1}}。

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

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/类的Pascal Case类名,名为/product/search.php。这又是路由特有的,.php后跟子文件夹名称和文件名,没有扩展名大写。实际上并不需要大写,但为了便于阅读,建议使用它。值得注意的是,类名不会从子文件夹和文件名中获取除字母和数字之外的任何值。下划线被移除。

在课堂上是方法。声明Controller的类中的方法可以通过路径运行 - ControllerProductSearch不是。默认情况下,使用标准的两部分路径(上面为Controller),会调用默认的public方法。如果使用路由的第三部分(上面private),则将运行此方法。例如,aaa/bbb将加载index()文件和类,并尝试调用ccc方法


了解模型

OpenCart中的模型位于account/return/insert文件夹中,并根据功能而非路由进行分组,因此您需要通过

将它们加载到控制器中。
/catalog/controller/account/return.php

这会将文件加载到名为insert的子文件夹/catalog/model/中。然后可以通过对象

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

和控制器一样,您只能调用其xxx方法。例如,要调整图片大小,您可以使用yyy.php模型并调用其$this->model_xxx_yyy 方法,如下所示

public

了解控制器视图中的变量赋值

为了从控制器向视图传递值,您只需将数据分配给tool/image变量,该变量本质上是一个key =&gt;数组。价值对。作为一个例子

resize

如果您熟悉将每个键转换为变量的extract()方法,那么在视图中访问它有点容易理解。因此$this->load->model('tool/image'); $this->model_tool_image->resize('image.png', 300, 200); 密钥变为$this->data,并且可以在视图中进行访问。


了解主题

主题仅供目录方使用,基本上是模板,样式表和主题图像的文件夹。主题文件夹放在$this->data['example_var'] = 123; 文件夹中,后跟主题名称。文件夹名称不重要,example_var文件夹

除外

管理员端使用$example_var(从路径中跳过/catalog/view/theme/,因为它不允许不同的主题)

模板文件位于主题文件夹中的default文件夹中。如果当前所选主题的任何模板都不可用,则使用默认文件夹的模板作为后备。这意味着可以使用非常少的文件创建主题,并且仍然可以完全运行。它还可以减少代码重复和升级问题


了解视图(模板)

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

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


了解数据库对象

使用

运行查询
aaa/bbb_ccc.tpl

catalog/product_list.tpl顾名思义是一个包含数据库前缀的常量(如果存在)

catalog/product_form.tpl将返回$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`"); 个查询的对象,其中包含一些属性

DB_PREFIX包含第一行的数据,如果一个或多个作为关联数组返回

$result包含一系列行结果,非常适合使用foreach循环

SELECT包含返回的结果数

$result->row对象还有一些额外的方法

$result->rows对传递的值

使用mysql_real_escape_string()

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

$this->db->escape()使用mysql_insert_id()

返回上次自动增量ID

了解保留变量

OpenCart使用预定义变量代替标准$this->db->countAffectedUPDATE$this->db->getLastId()$_GET$_POST$_SESSION$_COOKIE

使用$_FILES编辑

$_REQUEST,其中数据是模仿$_SERVER

的关联数组

所有其他人都可以使用$_SESSION进行访问,并且已经清理过&#34;遵守魔法引号启用/禁用,所以

$this->session->data变为$_SESSION

$this->request变为$_GET

$this->request->get变为$_POST

$this->request->post变为$_COOKIE

$this->request->cookie变为$_FILES

$this->request->files变为$_REQUEST


摘要

虽然以上并不是开发人员的防弹指南,但希望它可以作为入门者的良好起点

答案 1 :(得分:35)

全局库方法:基本的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']  

答案 2 :(得分:9)

OpenCart Wiki网站上有初学者开发人员的文档。 请按照以下网址获取更多详细信息:

<击> http://wiki.opencarthelp.com/doku.php?id=start
<击> http://wiki.opencarthelp.com/doku.php?id=methods_reference

INTERNET ARCHIVE链接

http://web.archive.org/web/20160305131349/http://wiki.opencarthelp.com/doku.php?id=start http://web.archive.org/web/20160305131349/http://wiki.opencarthelp.com/doku.php?id=methods_reference

E.g。方法参考有以下详细信息:

  1. 客户登录
  2. 数据库访问
  3. 购物车处理
  4. 配置
  5. 高速缓存
  6. 货币处理
  7. 仍然有一些页面在建,但它会有所帮助。

    <强> [更新]

    截至2018年1月,opencarhelp.com域已关闭。

答案 3 :(得分:1)

PHP是一种使用over 5000 built-in functions的相当大的语言,因此学习新平台的一个策略是确定最常用的功能,并花一些时间了解这些功能。

我在OpenCart源代码上运行了一些查询,最常用的十大函数是:

array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()

此处列出的所有52个以及Linux bash命令,您可以在任何代码库上使用它们来识别常用功能: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/

答案 4 :(得分:1)

此youtube视频播放列表也有助于成为OpenCart开发人员Gurus:

OpenCart Videos Tutorials

  1. Introduction and Table of Contents该视频介绍了该系列的介绍
  2. OpenCart installation localhost该视频通过localhost中的OpenCart安装进行了
  3. Files and folder structure of Opencart它描述了OpenCart的文件和文件夹结构
  4. Creating Database Table schema in OpenCart它显示了数据库表架构,并显示了如何在OpenCart中创建数据库表
  5. OpenCart Library Predefined Objects’ Methods描述了OpenCart库预定义对象的方法,并显示了在何处找到它们。
  6. MVCL pattern, code flow and request & response in OpenCart它显示了OpenCart中的MVCL模式,代码流以及请求和响应。 它们描述流程如下图所示: MVCL described with Code

  7. Install, Configure and Uninstall Opencart module它显示了三种上传模块,然后安装,配置和卸载OpenCart 3模块/扩展的方法。

  8. Layouts and position in Opencart 3它描述了OpenCart 3的布局和位置。它显示了如何显示不同页面的自定义布局,并给出了类别页面的示例。我们为不同的类别显示不同的布局。

  9. Event overview of Opencart您将了解OpenCart中的事件,事件如何工作以及使其变得如此有用。

  10. Opencart API documentation for developer该视频将演示如何使用和制作自定义opencart API

看到这些视频后,就可以开始编码了:)

答案 5 :(得分:1)

尽管已经多次回答了这个话题,但我想根据我的经验提供另一种掌握OpenCart的方法。

边干边学

通过使用少量文件从头开始创建自己的OpenCart框架,您可以了解所有内容的组合方式。我将为您模仿OpenCart的文件结构。

创建文件index.php

<?php
// My simpleCart

1。注册表

Opencart使用注册表模式列出所有已加载类的实例。这是您的OpenCart应用程序的心脏。然后,将注册表对象传递给每个类别,模型和库,以快速访问其他对象。

创建路径为/system/engine/registry.php的文件

<?php
// Registry class. 
class Registry
{
    private $data = array();

    public function set($key, $value){
        $this->data[$key] = $value;
    }

    public function get($key){
        return (isset($this->data[$key])) ? $this->data[$key] : false;
    }
}

在您的index.php

<?php
// My simpleCart

//load dependency files
require_once('system/engine/registry.php');

//initialize registry
$registry = new Registry;

2。输出

现在让我们添加一个输出,它将是将来的HTML。毕竟,整个想法是将一串文本发送到浏览器。

创建文件system/library/response.php

<?php
class Response {
    private $output;

    public function getOutput() {
        return $this->output;
    }

    public function setOutput($output) {
        $this->output = $output;
    }

    public function output() {
        if ($this->output) {
            echo $this->output;
        }
    }
}

以及您的index.php

<?php
// My simpleCart

//load dependency files
require_once('system/engine/registry.php');
require_once('system/library/response.php');

//initialize registry
$registry = new Registry;

//initialize response
$response = new Response;
//add response object to the registry
$registry->set('response', $response);

//lets set an output as a test
$registry->get('response')->setOutput('Hello World');

//send the output to the client
$registry->get('response')->output();

  

通知我仅以示例添加Hello world。我们将进一步删除它。刷新您的网站进行检查。浏览器应显示Hello World

3。控制器

将控制器视为页面。他们将定义将显示给客户端的内容:文本,html,json,下载或什至图像。现在,我们只需要一个发送文本的页面。

我们将为home页面创建一个控制器。

添加路径为catalog/controller/common/home.php的文件

<?php

class ControllerCommonHome{

    private $registry = array();

    public function __construct($registry){
        $this->registry = $registry;
    }

    public function index(){

        $output = 'Home Page';
        //using the registry to get the response object and set the Output
        $this->registry->get('response')->setOutput($output);
    }
}

并编辑您的index.php

<?php
// My simpleCart

//load registry
require_once('system/engine/registry.php');
//load response
require_once('system/library/response.php');

//initialize registry
$registry = new Registry;

//initialize response
$response = new Response;
//add resoinse object to the registry
$registry->set('response', $response);

//load controller common/home
require_once('catalog/controller/common/home.php');
$controller = new ControllerCommonHome($registry);
$controller->index();

//send the output to the client
$registry->get('response')->output();
  

注意如何将$refistry传递到ControllerCommonHome,以便可以在控制器内部访问它。

4。路由器

我们不希望对控制器进行硬编码,对。我们将使用URL地址中的参数route来告知购物车要加载哪个控制器。

创建路径为system/library/request.php的文件

<?php
class Request {
    public $get = array();

    //for now I just need the $_GET parameter
    public function __construct() {
        $this->get = $_GET;
    }
}

根据路由创建负责初始化Controller文件的Router类(换句话说:动态调用控制器)

<?php
class Router {
    private $registry;

    public function __construct($registry) {
        $this->registry = $registry;
    }

    public function dispatch($route) {
        require_once('catalog/controller/'.$route.'.php');
        $class = "Controller".str_replace('/', '', $route);
        $controller = new $class($this->registry);
        $controller->index();
    }
}

将其加载到您的index.php

<?php
require_once('system/engine/registry.php');
require_once('system/engine/router.php');
require_once('system/library/response.php');
require_once('system/library/request.php');

$registry = new Registry;

$response = new Response;
$registry->set('response', $response);

$request = new Request;
$registry->set('request', $request);

//get the route from the url
if(isset($registry->get('request')->get['route'])){
    $route = $registry->get('request')->get['route'];
}else{
    $route = 'common/home';
}

//initiate the router and dispatch it base on the route
$router = new Router($registry);
$router->dispatch($route);


$registry->get('response')->output();
  

请注意如何将所有内容加载到$registry中,然后将其传递到$router,然后再将其传递到$controller

这篇文章已经太长了,但是我希望它能对OpenCart中的MVC模式有一个基本的了解。

  

如果您希望我继续这篇文章,并告诉您其他事物(例如模型和视图)是如何工作的,请对该答案进行评分,以便我知道。

还请查看我的YouTube https://www.youtube.com/dreamvention和博客https://dreamvention.com/blog,我将在那里为您发布更多的提示和教程!