공식 포럼에서 일부 API 호출을 제외하고는 문서가없는 것 같습니다. Zend 프레임 워크와 CodeIgniter 프레임 워크에 대한 경험이 있습니다. OpenCart 마스터가 가장 짧은 시간에 학습하고 마스터 할 수있는 가장 좋은 방법을 추천 할 수 있습니까? 곧 큰 프로젝트를해야합니다.
공식 포럼에서 일부 API 호출을 제외하고는 문서가없는 것 같습니다. Zend 프레임 워크와 CodeIgniter 프레임 워크에 대한 경험이 있습니다. OpenCart 마스터가 가장 짧은 시간에 학습하고 마스터 할 수있는 가장 좋은 방법을 추천 할 수 있습니까? 곧 큰 프로젝트를해야합니다.
답변:
이 가이드는 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
-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
데이터를 모방 한 연관 배열을 사용하여 편집 합니다.$_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 라이브러리 기능과 기능, 대부분 카탈로그 또는 관리 폴더 (컨트롤러, 모델,보기)의 어느 곳에서나 호출 할 수 있습니다.
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 = ' > ') – 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']
초보 개발자를위한 문서가있는 OpenCart Wiki 웹 사이트가 있습니다. 자세한 내용은 아래 URL을 따르십시오.
http://wiki.opencarthelp.com/doku.php?id=start
http://wiki.opencarthelp.com/doku.php?id=methods_reference
인터넷 아카이브 링크
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
예를 들어 메서드 참조에는 다음에 대한 세부 정보가 있습니다.
아직 건설중인 페이지가 있지만 도움이 될 것입니다.
[최신 정보]
2018 년 1 월부터 opencarhelp.com 도메인이 다운되었습니다.
이 주제에 대해 이미 여러 번 답변을 받았지만 제 경험을 바탕으로 OpenCart를 마스터하는 또 다른 접근 방식을 제공하고 싶습니다.
몇 개의 파일로 처음부터 자신 만의 OpenCart 프레임 워크를 생성하면 모든 것이 어떻게 결합되는지 이해할 수 있습니다. 나는 당신을 위해 OpenCart의 파일 구조를 모방 할 것입니다.
파일 생성 index.php
<?php
// My simpleCart
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;
이제 향후 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
.
컨트롤러를 페이지로 생각하십시오. 그들은 클라이언트에 표시 될 텍스트, 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에 어떻게 전달했는지 확인 하십시오.
우리는 컨트롤러가 하드 코딩되는 것을 원하지 않습니다. route
URL 주소 의 매개 변수 를 사용 하여로드 할 컨트롤러를 카트에 알립니다.
경로를 사용하여 파일 만들기 system/library/request.php
<?php
class Request {
public $get = array();
//for now I just need the $_GET parameter
public function __construct() {
$this->get = $_GET;
}
}
경로를 기반으로 컨트롤러 파일을 초기화하는 라우터 클래스를 만듭니다 (즉, 컨트롤러를 동적으로 호출).
<?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를 확인하십시오. 더 많은 팁과 자습서를 게시 할 것입니다.
PHP는 5000 개가 넘는 내장 함수 가있는 상당히 큰 언어 이므로 새로운 플랫폼을 배우기위한 한 가지 전략은 가장 자주 사용하는 함수를 식별하고이를 잘 이해하는 데 시간을 보내는 것입니다.
OpenCart 소스 코드에 대해 몇 가지 쿼리를 실행했으며 가장 일반적으로 사용되는 상위 10 개 함수는 다음과 같습니다.
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/
이 YouTube 동영상 재생 목록은 OpenCart 개발자 전문가가되는데도 도움이 될 수 있습니다.
OpenCart에서 MVCL 패턴, 코드 흐름 및 요청 및 응답 OpenCart에서 MVCL 패턴, 코드 흐름 및 요청 및 응답을 보여줍니다. 아래 그림과 같이 흐름을 설명합니다.
Opencart 모듈 설치, 구성 및 제거 모듈 을 업로드 한 다음 OpenCart 3 모듈 / 확장을 설치, 구성 및 제거하는 세 가지 방법을 보여줍니다.
Opencart 3의 레이아웃 및 위치 OpenCart 3의 레이아웃 및 위치를 설명합니다. 카테고리 페이지의 예를 제공하여 여러 페이지에 대한 사용자 정의 레이아웃을 표시하는 방법을 보여줍니다. 우리는 다른 카테고리에 대해 다른 레이아웃을 보여줍니다.
Opencart의 이벤트 개요 OpenCart에서 이벤트가 무엇인지, 어떻게 작동하는지, 무엇이 그렇게 유용하게 만드는지 배웁니다.
개발자를위한 Opencart API 문서이 비디오는 사용자 정의 opencart API 를 사용하고 만드는 방법을 보여줍니다.
이 비디오를보고 나면 코딩을 시작할 수 있습니다. :)