web-dev-qa-db-fra.com

Comment devenir un gourou OpenCart?

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.

96
CodeCrack

Guide de démarrage rapide du développeur OpenCart 1.5.X pour les débutants

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.


Comprendre les bibliothèques

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 client
  • user.php - Fonctions liées à l'utilisateur administrateur
  • cart.php - Fonctions liées au panier
  • config.php - Tous les paramètres sont chargés à partir de cette
  • url.php - Fonctions de génération d'URL

Comprendre le paramètre de route

La 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


Comprendre les langues

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.


Comprendre les contrôleurs

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.


Comprendre les modèles

Les modèles OpenCart se trouvent dans le dossier /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;

.


Comprendre les thèmes

Les thèmes ne sont disponibles que du côté du catalogue et constituent essentiellement un dossier de modèles, de feuilles de style et d'images de thèmes. Les dossiers de thèmes sont placés dans le dossier /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.


Comprendre les vues (modèles)

Comme avec la langue et les modèles, les fichiers de vue sont généralement liés à la route, bien que cela ne soit pas obligatoire. Les modèles du côté du catalogue se trouvent généralement dans /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).


Comprendre l'objet de base de données

Les requêtes sont exécutées en utilisant

$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 ()


Comprendre les variables réservées

OpenCart a des variables prédéfinies à utiliser à la place des standards $_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


Résumé

Bien que ce qui précède ne soit pas un guide à toute épreuve pour les développeurs, nous espérons qu’il servira de bon point de départ pour ceux qui débutent

While the above isn't a bulletproof guide for developers, hopefully it will serve as a good starting point for those getting started

305
Jay Gilford

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 = ' &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']  
34
Abdul Rehman

Il existe un site Web OpenCart Wiki avec une documentation pour les développeurs débutants.

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

Par exemple. La référence de la méthode contient des détails pour:

  1. Connexion client
  2. Accès à la base de données
  3. Maniement du panier
  4. Config
  5. Cache
  6. Traitement de la monnaie

Il reste encore quelques pages en construction mais ça va être utile.

[Mettre à jour]

Depuis janvier 2018, le domaine opencarhelp.com est en panne.

8
Dharmang

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.

Apprentissage par la pratique

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

1. Registre

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;

2. sortie

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.

3. Contrôleurs

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.

4. routeur

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!

1
Dmitriy Zhuk

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/

0
Paul Feakins

Cette liste de lecture de vidéos youtube peut également être utile pour devenir Gurus, développeur OpenCart:

Tutoriels Vidéos OpenCart

  1. Introduction et table des matières Cette vidéo décrit l'introduction de la série
  2. Installation d'OpenCart localhost Cette vidéo passe par l'installation d'OpenCart dans localhost
  3. Structure de fichiers et de dossiers d'Opencart Elle décrit la structure de fichiers et de dossiers d'OpenCart
  4. Création d'un schéma de table de base de données dans OpenCart / Affiche le schéma de table de base de données et explique comment créer des tables de base de données dans OpenCart
  5. Méthodes des objets prédéfinis de la bibliothèque OpenCart Il décrit les méthodes des objets prédéfinis de la bibliothèque OpenCart et indique où les trouver.
  6. 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:  MVCL described with Code

  7. 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. 

  8. 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.

  9. 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.

  10. 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 :)

0
Rupak Nepali