Il semble qu'ils n'aient aucune documentation, à l'exception de quelques appels d'api sur leurs forums officiels. J'ai de l'expérience avec les frameworks Zend et CodeIgniter. Les maîtres OpenCart peuvent-ils me recommander le meilleur moyen de l’acquérir et de le maîtriser le plus rapidement possible? Je dois faire un gros projet avec elle bientôt.
Ce guide est destiné aux développeurs déjà familiarisés avec PHP, OOP et l’architecture MVC.
Vous trouverez ci-après des exemples pour le côté catalogue du panier. Le côté administrateur a la même fonction, à l’exception des vues indiquées dans la section correspondante.
Toutes les fonctionnalités de la bibliothèque sont accessibles via Controller, Model et Views à l'aide de $this->library_name
. Tous ces éléments peuvent être trouvés dans le dossier /system/library/
. Par exemple, pour accéder aux produits du panier d'achat actuel, vous devez utiliser la classe Cart
, qui est dans /system/library/cart.php
et est accessible à l'aide de $this->cart->getProducts()
.
Articles couramment utilisés
customer.php
- Fonctions liées au clientuser.php
- Fonctions liées à l'utilisateur administrateurcart.php
- Fonctions liées au panierconfig.php
- Tous les paramètres sont chargés à partir de cetteurl.php
- Fonctions de génération d'URLLa structure OpenCart repose sur le route=aaa/bbb/ccc
dans le paramètre de chaîne de requête pour savoir quoi charger, et constitue la fonction sous-jacente de recherche des fichiers que vous devez modifier pour chaque page. La plupart des routes n'utilisent en réalité que le aaa/bbb
qui devrait être considéré comme deux parties. Cependant, certaines contiennent trois parties. aaa/bbb/ccc
La première partie aaa
est généralement associée au dossier d'un dossier générique tel que le contrôleur ou les dossiers de modèles. La deuxième partie concerne généralement le nom du fichier, sans l'extension .php
ou .tpl
appropriée. La troisième partie est expliquée dans la section "Comprendre les contrôleurs" ci-dessous
Les langues sont stockées dans le dossier /catalog/language/
du sous-dossier your-language
. Dans celui-ci, les valeurs de texte générales utilisées sur différentes pages sont stockées dans le fichier your-language.php
du dossier. Ainsi, pour la langue anglaise côté catalogue, vous trouverez les valeurs dans catalog/language/english/english.php
. Pour un texte de page spécifique, vous aurez besoin de la variable route
pour la page (c'est généralement le cas, mais pas toujours car vous pouvez spécifier le fichier de langue de votre choix). Par exemple, la page de recherche a la route product/search
et le texte spécifique à la langue de cette page se trouve donc dans catalog/language/english/product/search.php
(Notez que le nom et le sous-dossier du fichier correspondent à la route suivie de .php
.
Pour charger la langue dans un contrôleur, vous utilisez
$this->language->load('product/search');
Ensuite, vous pouvez utiliser la fonction get
de la bibliothèque de langues pour extraire des textes de langues spécifiques, tels que
$some_variable = $this->language->get('heading_title');
Les variables de langue sont affectées dans le fichier de langue à l'aide d'une variable spéciale $_
, qui est un tableau de clés et de valeurs de texte. Dans votre /catalog/language/english/product/search.php
, vous devriez trouver quelque chose de similaire à
$_['heading_title'] = 'Search';
Les valeurs du fichier de langue global english/english.php
sont automatiquement chargées et disponibles pour être utilisées sans la méthode $this->language->load
.
Les contrôleurs sont chargés en fonction de la route
et sont assez simples à comprendre. Les contrôleurs sont situés dans le dossier /catalog/controller/
. En reprenant le dernier exemple, la page Contrôleur pour la recherche se trouve dans /product/search.php
dans ce dossier. Notez à nouveau que la route suivie par .php
est utilisée.
En ouvrant le fichier contrôleur, vous verrez un nom de classe Pascal Case étendre la classe Controller
, appelé ControllerProductSearch
. Ceci est à nouveau spécifique à la route, avec Controller
suivi du nom du sous-dossier et du nom du fichier sans l'extension en majuscule. La capitalisation n’est pas réellement requise, mais elle est recommandée pour une lisibilité aisée. Il est à noter que les noms de classe ne prennent aucune valeur du sous-dossier et du nom de fichier autre que les lettres et les chiffres. Les soulignés sont supprimés.Dans la classe sont les méthodes. Les méthodes de la classe déclarée public
peuvent être exécutées via la route - private
ne le sont pas. Par défaut, avec une route standard en deux parties (aaa/bbb
ci-dessus), une méthode par défaut index()
est appelée. Si la troisième partie d'un itinéraire (ccc
ci-dessus) est utilisée, cette méthode sera exécutée à la place. Par exemple, account/return/insert
va charger le fichier et la classe /catalog/controller/account/return.php
et essayer d'appeler la méthode insert
.
/catalog/model/
et sont regroupés par fonction, et non par route. Vous devrez donc les charger dans votre contrôleur via$this->load->model('xxx/yyy');
$this->model_xxx_yyy
$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);
$this->data
, qui est essentiellement un tableau de paires clé => valeur. Par exemple
$this->data['example_var'] = 123;
.
/catalog/view/theme/
suivi du nom du thème. Le nom du dossier n'a pas d'importance, à l'exception du dossier default
.Le côté administrateur utilise /admin/view/template/
(ignorer le /theme/theme-name/
du chemin car il ne permet pas de thèmes différents)
Les fichiers de modèle résident dans un dossier template
dans le dossier du thème. Si un modèle n'est pas disponible pour le thème sélectionné, le modèle du dossier par défaut est utilisé à la place comme solution de secours. Cela signifie que les thèmes peuvent être créés avec très peu de fichiers et fonctionnent encore pleinement. Cela réduit également la duplication de code et les problèmes liés aux mises à niveau.
/catalog/view/theme/your-theme/template/
sauf s’il n’existe pas, auquel cas les modèles du thème par défaut seront utilisés. Pour notre exemple de page de recherche ci-dessus, le fichier est product/search.tpl
. Pour les itinéraires à trois parties, il s'agit généralement de aaa/bbb_ccc.tpl
bien qu'il n'y ait pas de règle définie. Dans l’administrateur, la plupart des pages suivent ceci, à l’exception des pages répertoriant des éléments, comme la page répertoriant les produits, sont en catalog/product_list.tpl
et le formulaire de modification du produit en catalog/product_form.tpl
. Encore une fois, ceux-ci ne sont pas définis, mais constituent une norme pour le panier par défaut.Le fichier modèle est en fait juste un autre fichier php, mais avec une extension .tpl et est en fait exécuté dans le fichier contrôleur, donc tout ce que vous pouvez coder dans un contrôleur peut être exécuté dans un fichier modèle (bien que cela ne soit pas recommandé sauf si nécessaire).
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");
$result
retournera un objet pour les requêtes SELECT
, contenant quelques propriétés
$result->row
contient les données de la première ligne si un ou plusieurs sont renvoyés sous forme de tableau associatif
$result->rows
contient un tableau de résultats de lignes, idéal pour boucler en utilisant foreach
$result->num_rows
contient le nombre de résultats renvoyés
Il y a aussi quelques méthodes supplémentaires que l'objet $this->db
a
$this->db->escape()
utilise mysql_real_escape_string () sur la valeur transmise
$this->db->countAffected
renvoie le nombre de lignes affectées par une requête UPDATE
et ainsi de suite
$this->db->getLastId()
renvoie le dernier identifiant d'incrémentation automatique à l'aide de mysql_insert_id ()
$_GET
, $_POST
, $_SESSION
, $_COOKIE
, $_FILES
, $_REQUEST
ET $_SERVER
$_SESSION
est édité en utilisant $this->session->data
où data est un tableau associatif imitant le $_SESSION
Tous les autres sont accessibles avec $this->request
et ont été "nettoyés" pour se conformer aux guillemets magiques activés/désactivés.
$_GET
devient $this->request->get
$_POST
devient $this->request->post
$_COOKIE
devient $this->request->cookie
$_FILES
devient $this->request->files
$_REQUEST
devient $this->request->request
$_SERVER
devient $this->request->server
While the above isn't a bulletproof guide for developers, hopefully it will serve as a good starting point for those getting started
Méthodes globales de la bibliothèque: les fonctions de base de la bibliothèque opencart ainsi que leurs fonctionnalités. La plupart d’entre elles peuvent être appelées de n’importe où dans le catalogue ou les dossiers de l’administrateur (contrôleurs, modèles, vues)
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']
Il existe un site Web OpenCart Wiki avec une documentation pour les développeurs débutants.
http://wiki.opencarthelp.com/doku.php?id=starthttp://wiki.opencarthelp.com/doku.php?id=methods_reference
Par exemple. La référence de la méthode contient des détails pour:
Il reste encore quelques pages en construction mais ça va être utile.
[Mettre à jour]
Depuis janvier 2018, le domaine opencarhelp.com est en panne.
Bien que ce sujet ait déjà été abordé à maintes reprises, j'aimerais proposer une autre approche de la maîtrise d'OpenCart basée sur mon expérience.
En créant votre propre framework OpenCart à partir de rien avec une poignée de fichiers, vous pouvez comprendre comment tout est mis en place. Je vais imiter la structure de fichiers d'OpenCart pour vous.
Créer un fichier index.php
<?php
// My simpleCart
Opencart utilise le modèle de registre pour répertorier toutes les instances de classes chargées. C'est le cœur de votre application OpenCart. L'objet de registre est ensuite transmis à chaque catégorie, modèle et bibliothèque pour un accès rapide à d'autres objets.
créer un fichier avec le chemin /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;
}
}
dans votre index.php
<?php
// My simpleCart
//load dependency files
require_once('system/engine/registry.php');
//initialize registry
$registry = new Registry;
Ajoutons maintenant une sortie qui sera notre code HTML dans le futur. Après tout, l’idée est d’envoyer une chaîne de texte au navigateur.
Créer un fichier 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;
}
}
}
et dans votre 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();
Remarquez que j'ai ajouté Hello world uniquement à titre d'exemple. Nous allons l'enlever plus loin. Actualisez votre site pour le vérifier. Le navigateur devrait afficher
Hello World
.
Pensez aux contrôleurs en tant que pages. Ils définiront ce qui sera affiché au client: texte, html, json, téléchargement ou même une image. Pour le moment, nous voulons juste une page qui envoie du texte.
Nous allons créer un contrôleur pour la page home
.
ajouter un fichier avec le chemin 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);
}
}
et éditez votre 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();
remarquez comment j'ai passé le
$refistry
au ControllerCommonHome afin de pouvoir y accéder à l'intérieur du contrôleur.
Nous ne voulons pas que les contrôleurs soient codés en dur, d'accord. Nous allons utiliser un paramètre route
de l'adresse url pour indiquer à notre panier quel contrôleur charger.
Créer un fichier avec le chemin system/library/request.php
<?php
class Request {
public $get = array();
//for now I just need the $_GET parameter
public function __construct() {
$this->get = $_GET;
}
}
Créez la classe de routeur qui sera responsable de l'initialisation du fichier du contrôleur en fonction de la route (en d'autres termes: appelez le contrôleur de manière dynamique)
<?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();
}
}
chargez-le dans votre 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();
Remarquez comment je charge tout dans le
$registry
et le passe ensuite au$router
qui le transmet ensuite au$controller
.
Ce message est déjà trop long, mais j'espère qu'il vous donnera une compréhension de base du modèle MVC dans OpenCart.
Si vous voulez que je continue avec ce post et vous dise comment d'autres choses fonctionnent comme des modèles et des vues, notez cette réponse pour que je sache.
Consultez également mon Youtube https://www.youtube.com/dreamvention et mon blog https://dreamvention.com/blog Je posterai plus de conseils et de tutoriels pour vous les gars!
PHP est une langue assez large avec plus de 5000 fonctions intégrées une stratégie pour apprendre une nouvelle plate-forme consiste donc à identifier les fonctions qu’elle utilise le plus fréquemment et à passer un certain temps à bien les connaître.
J'ai exécuté quelques requêtes sur le code source OpenCart et les 10 fonctions les plus couramment utilisées sont:
array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()
Les 52 commandes énumérées ici, ainsi que les commandes Linux bash, vous pouvez utiliser sur n'importe quelle base de code pour identifier les fonctions couramment utilisées: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart -développeurs/
Cette liste de lecture de vidéos youtube peut également être utile pour devenir Gurus, développeur OpenCart:
Modèle MVCL, flux de code et demande et réponse dans OpenCart Affiche le modèle MVCL, le flux de code et demande/réponse dans OpenCart. Ils décrivent le flux comme dans l'image ci-dessous:
Installer, configurer et désinstaller le module Opencart Il présente trois manières de télécharger des modules, puis installer, configurer et désinstaller le module/extension OpenCart 3.
Layouts and position in Opencart 3 Il décrit les dispositions et les positions d'OpenCart 3. Il montre comment afficher des mises en page personnalisées pour différentes pages, en donnant des exemples de pages de catégories. Nous montrons la mise en page différente pour une catégorie différente.
Aperçu des événements d'Opencart Vous apprendrez ce que sont les événements dans OpenCart, leur fonctionnement et ce qui les rend si utiles.
Documentation sur les API Opencart pour les développeurs Cette vidéo montrera comment utiliser et créer une API opencart personnalisée
Une fois que vous voyez ces vidéos, vous pouvez commencer à coder :)