100 votes

Comment devenir un gourou d'OpenCart ?

Il semble qu'ils n'ont pas de documentation, sauf quelques appels d'api sur leurs forums officiels. J'ai de l'expérience avec le framework Zend et le framework CodeIgniter. Un maître d'OpenCart peut-il me recommander la meilleure façon de l'apprendre et de le maîtriser en un minimum de temps ? Je dois bientôt réaliser un grand projet avec OpenCart.

0 votes

Voir docs.opencart.com et le Aperçu du cadre de travail par Qphoria . Parcourez également les fils de discussion sur OpenCart Forums > Support . Dans le futur, nous espérons avoir un site dédié à OpenCart SE à l'adresse suivante area51.stackexchange.com/propositions/77558/opencart

0 votes

C'est vraiment une question importante, parfois le dépassement des normes de l'OS est vraiment utile...

1 votes

Merci beaucoup pour cette question, elle m'a beaucoup aidé.

315voto

Jay Gilford Points 9639

Guide de démarrage rapide des développeurs OpenCart 1.5.X pour les débutants

Ce guide est destiné aux développeurs déjà familiarisés avec PHP, la POO et l'architecture MVC.

Dans ce qui suit, vous verrez des exemples pour le côté catalogue du panier. Le fonctionnement de la partie administration est identique, à l'exception des vues qui sont indiquées dans la section correspondante.


Comprendre les bibliothèques

Toutes les fonctionnalités de la bibliothèque sont accessibles à travers le contrôleur, le modèle et les vues en utilisant $this->library_name . Tous ces éléments peuvent être trouvés dans le /system/library/ dossier. Par exemple, pour accéder aux produits du panier d'achat actuel, vous devez utiliser le dossier Cart qui se trouve dans /system/library/cart.php et on peut y accéder en utilisant $this->cart->getProducts()

Articles couramment utilisés

  • customer.php - Fonctions liées à la clientèle
  • user.php - Fonctions liées aux utilisateurs de l'administration
  • 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 route

Le cadre d'OpenCart s'appuie sur l'élément route=aaa/bbb/ccc dans le paramètre de la chaîne de requête pour savoir ce qu'il faut charger, et c'est la fonction sous-jacente pour trouver les fichiers que vous devez modifier pour chaque page. La plupart des routes n'utilisent en fait que le paramètre aaa/bbb qui doivent être considérés comme deux parties, mais certains contiennent trois parties. aaa/bbb/ccc La première partie aaa généralement lié au dossier à l'intérieur d'un dossier générique tel que les dossiers du contrôleur ou du modèle. La deuxième partie se rapporte généralement au nom du fichier, sans l'élément pertinent .php o .tpl extension. 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 /catalog/language/ dans le dossier your-language sous-dossier. À l'intérieur de celui-ci, les valeurs de texte générales utilisées sur diverses pages sont stockées dans le sous-dossier your-language.php dans le dossier, donc pour la langue anglaise du côté du catalogue, vous trouverez les valeurs dans le fichier catalog/language/english/english.php . Pour un texte de page spécifique, vous aurez besoin de l'option 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 le parcours product/search et, par conséquent, le texte spécifique à la langue de cette page se trouve à l'adresse suivante catalog/language/english/product/search.php (Remarquez que le nom du fichier et le sous-dossier correspondent à la route suivie par .php .

Pour charger la langue dans un contrôleur, vous utilisez

$this->language->load('product/search');

Vous pouvez alors utiliser la fonction de la bibliothèque de langue get pour récupérer des textes linguistiques spécifiques, tels que

$some_variable = $this->language->get('heading_title');

Les variables de langue sont assigné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 le $this->language->load méthode


Comprendre les contrôleurs

Les contrôleurs sont chargés sur la base du route et sont assez simples à comprendre. Les contrôleurs sont situés dans le /catalog/controller/ dossier. En reprenant le dernier exemple, le contrôleur de la page de recherche se trouve dans le dossier /product/search.php dans ce dossier. Remarquez à nouveau que le chemin suivi par .php est utilisé.

En ouvrant le fichier du contrôleur, vous verrez un nom de classe Pascal Case qui étend la classe Controller appelé ControllerProductSearch . Là encore, il s'agit d'une spécificité de l'itinéraire, avec Controller suivi du nom du sous-dossier et du nom du fichier sans l'extension en majuscule. La majuscule n'est pas obligatoire, mais elle est recommandée pour faciliter la lecture. Il convient de noter que les noms de classe ne prennent pas de valeurs autres que des lettres et des chiffres dans le nom du sous-dossier et du fichier. Les underscores sont supprimés.

À l'intérieur de la classe se trouvent les méthodes. Méthodes de la classe déclarées public sont accessibles pour être exécutés par l'itinéraire - private ne le sont pas. Par défaut, avec une route standard en deux parties ( aaa/bbb ci-dessus), une 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 chargera le /catalog/controller/account/return.php et la classe, et essayez d'appeler le insert méthode


Comprendre les modèles

Les modèles dans OpenCart se trouvent dans le /catalog/model/ et sont regroupés en fonction de la fonction, et non de la route, et vous devrez donc les charger dans votre contrôleur via

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

Ceci chargera le fichier dans le sous-dossier xxx appelé yyy.php . Il est ensuite disponible pour être utilisé via l'objet

$this->model_xxx_yyy

et, comme pour les contrôleurs, vous ne pouvez appeler ses public méthodes. Par exemple, pour redimensionner une image, vous utiliserez la fonction tool/image et appeler son resize comme suit

$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);

Comprendre l'affectation des variables dans les vues à partir du contrôleur

Pour transmettre des valeurs à la vue à partir du contrôleur, il suffit d'affecter vos données à l'attribut $this->data qui est essentiellement un tableau de paires clé => valeur. Par exemple

$this->data['example_var'] = 123;

L'accès à ces données dans une vue est un peu plus facile à comprendre si vous êtes familier avec l'outil de gestion des données de l'entreprise. extraire() qui convertit chaque clé en une variable. Ainsi, le example_var La clé devient $example_var et sont accessibles en tant que tels dans la vue.


Comprendre les thèmes

Les thèmes ne sont disponibles que du côté du catalogue, et sont essentiellement un dossier de modèles, de feuilles de style et d'images de thème. 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 de l'option default dossier

Le côté administrateur utilise /admin/view/template/ (en sautant le /theme/theme-name/ du chemin d'accès car il n'autorise pas les thèmes différents)

Les fichiers de modèle résident dans un template dans le dossier du thème. Si un modèle n'est pas disponible pour le thème actuellement sélectionné, le modèle du dossier par défaut est utilisé comme solution de rechange. Cela signifie que les thèmes peuvent être créés avec très peu de fichiers tout en fonctionnant pleinement. Cela réduit également la duplication du code et les problèmes lors des mises à jour.


Comprendre les vues (modèles)

Comme pour le langage et les modèles, les fichiers de vue sont généralement liés à la route, mais ne doivent pas nécessairement l'être. Les modèles du côté du catalogue se trouvent généralement dans le dossier /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 le suivant product/search.tpl . Pour les routes à trois parties, il est généralement en aaa/bbb_ccc.tpl bien qu'il n'y ait pas de règle absolue. Dans l'administration, la plupart des pages suivent cette règle, à l'exception des pages listant des articles, comme la page de liste des produits, qui sont dans la section catalog/product_list.tpl et le formulaire d'édition du produit est dans catalog/product_form.tpl . Encore une fois, il ne s'agit pas de paramètres, mais d'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 il est en fait exécuté dans le fichier contrôleur, donc toutes les choses que vous pouvez coder dans un contrôleur peuvent être exécutées dans un fichier modèle (bien que cela ne soit pas recommandé, sauf en cas de nécessité absolue).


Comprendre l'objet base de données

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

$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");

DB_PREFIX comme son nom l'indique, est une constante contenant le préfixe de la base de données, s'il existe.

$result retournera un objet pour SELECT des requêtes, contenant quelques propriétés

$result->row contient les données de la première ligne si une ou plusieurs sont retournées sous forme de tableau associatif.

$result->rows contient un tableau de résultats de lignes, idéal pour effectuer des boucles à l'aide de foreach.

$result->num_rows contient le nombre de résultats retournés

Il existe également quelques méthodes supplémentaires que l $this->db L'objet a

$this->db->escape() utilise mysql_real_escape_string() sur la valeur passée

$this->db->countAffected renvoie le nombre de lignes affectées par un UPDATE requête et ainsi de suite

$this->db->getLastId() renvoie le dernier identifiant d'auto incrémentation en utilisant mysql_insert_id()


Comprendre les variables réservées

OpenCart dispose de variables prédéfinies à utiliser à la place des variables standard. $_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 en utilisant $this->request et ont été "nettoyés" pour être conformes aux guillemets magiques activés/désactivés, donc

$_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 infaillible pour les développeurs, nous espérons qu'il constituera un bon point de départ pour ceux qui débutent.

3 votes

Merci. Où avez-vous trouvé ça ?

64 votes

Je l'ai écrit. Je me suis dit qu'il fallait l'écrire et que ça correspondait à la question.

2 votes

Très bien. Beaucoup plus informatif que la plupart des guides. Auriez-vous par hasard un guide avancé ?

37voto

Er. Abdul Rehman Points 151

Méthodes globales de la bibliothèque : Fonctions de base de la bibliothèque d'Opencart avec leurs fonctionnalités, la plupart d'entre elles peuvent être appelées depuis n'importe quel endroit du catalogue ou des dossiers d'administration (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']

10voto

Dharmang Points 890

Il existe un site OpenCart Wiki avec de la documentation pour les développeurs débutants. Suivez les urls données ci-dessous pour plus de détails :

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

Liens de l'ARCHIVE INTERNET

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

Par exemple, la référence de la méthode contient les détails de :

  1. Connexion client
  2. Accès à la base de données
  3. Traitement des paniers d'achat
  4. Config
  5. Cache
  6. Traitement des devises

Il y a encore quelques pages en construction mais cela va être utile.

[Mise à jour]

En date du Jan-2018, le domaine opencarhelp.com est hors service.

0 votes

Il semble qu'il manque encore beaucoup d'informations après quelques mois. Ce projet a-t-il été abandonné ?

0 votes

@Pacerier, je ne suis pas sûr pour cela.

0 votes

C'est une excellente page, même le wiki open cart y fait référence, vous pouvez voir le lien ici wiki.opencarthelp.com/doku.php?id=opencart_framework

6voto

Dmitriy Zhuk Points 384

Bien que ce sujet ait déjà été abordé de nombreuses fois, je voudrais proposer une autre approche pour maîtriser OpenCart, basée sur mon expérience.

Apprendre par la pratique

En créant votre propre cadre OpenCart à partir de zéro avec une poignée de fichiers, vous pouvez comprendre comment tout est assemblé. Je vais imiter la structure des fichiers d'OpenCart pour vous.

Créer un fichier index.php

<?php
// My simpleCart

1. Registre

Opencart utilise le modèle de registre pour lister toutes les instances des classes chargées. C'est le cœur de votre application OpenCart. L'objet registre est ensuite transmis à chaque catégorie, modèle et bibliothèque pour un accès rapide aux autres objets.

créer un fichier avec un 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

Maintenant, ajoutons une sortie qui sera notre 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 le supprimerons plus tard. Rafraîchissez votre site pour le vérifier. Le navigateur devrait afficher Hello World .

3. Contrôleurs

Considérez les contrôleurs comme des pages. Ils vont définir ce qui sera affiché au client : texte, html, json, téléchargement ou même une image. Pour l'instant, nous voulons juste une page qui envoie du texte.

Nous allons créer un contrôleur pour le home page.

ajouter un fichier avec un 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 modifiez 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 pour que je puisse 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éer la classe Router qui sera responsable de l'initialisation du fichier Controller en fonction de la route (en d'autres termes : appeler dynamiquement le contrôleur)

<?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();
    }
}

le charger 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 à la $router qui le transmet ensuite à la $controller .

Cet article 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 poursuive cet article et que je vous explique comment fonctionnent d'autres choses comme les modèles et les vues, notez cette réponse pour que je le sache.

Consultez également mon site Youtube https://www.youtube.com/dreamvention et mon blog https://dreamvention.com/blog Je vais y poster d'autres conseils et tutoriels pour vous !

1voto

Paul Feakins Points 610

PHP est un langage assez large avec plus de 5000 fonctions intégrées Une stratégie d'apprentissage d'une nouvelle plate-forme consiste donc à identifier les fonctions qu'elle utilise le plus fréquemment et à prendre le temps de bien les connaître.

J'ai fait quelques recherches sur le code source d'OpenCart et les 10 fonctions les plus utilisées sont les suivantes :

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

Toutes les 52 énumérées ici ainsi que les commandes bash Linux que 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-developers/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X