OpenCart est devenu un cadre de commerce électronique très utile pour les magasins en ligne de petite à moyenne taille. Bien qu'il propose des fonctionnalités complètes dans sa pile, il maintient un cadre simple, avec une belle architecture modulaire pouvant être étendue. Dans cet article, nous allons nous concentrer sur certains éléments du processus d’amorçage..
Bien que de nombreux composants soient impliqués dans le processus d’amorçage typique, nous nous concentrerons sur les objets "Registre" et "Chargeur" pour la suite de ce didacticiel. Les extraits de code expliqués dans cet article appartiennent à OpenCart version 2.0.x. Bien que le code de classe "Registry" soit identique dans les versions 1.5.x et 2.0.x, le code de classe "Loader" a beaucoup changé. Nous allons donc nous concentrer sur la version 2.0.x d'OpenCart.
Comme son nom l'indique, l'objet "Registry" est utilisé pour stocker des éléments, de variables simples à des objets complexes, lorsque la méthode "set" est appelée. Il stocke tous les éléments en utilisant "key", de sorte qu'ils puissent être facilement accessibles ultérieurement lorsque la méthode "get" est appelée.
Regardons de plus près le fichier de classe lui-même. Ouvrez le fichier situé dans "system / engine / registry.php" dans votre éditeur de texte préféré.!
data [$ key])? $ this-> data [$ key]: null); fonction publique définie ($ key, $ value) $ this-> data [$ key] = $ value; fonction publique a ($ key) return isset ($ this-> data [$ key]);
Comme vous pouvez le constater, la définition de la classe est assez simple à comprendre. Il stocke tout dans la propriété "data" de l'objet, qui est déclaré comme un tableau, et la portée est privée. Dans la méthode "get", il vérifie si "valeur" est disponible pour la "clé" souhaitée et renvoie la valeur si elle est disponible, et "null" sinon. Dans la méthode "set", il insère le nouvel élément dans le tableau "data" en utilisant les arguments transmis à la méthode. Enfin, il fournit la méthode "has" pour vérifier si une certaine "clé" est déjà définie dans le tableau "data".
Voyons maintenant comment la structure OpenCart utilise l'objet de registre pendant la phase initiale de l'exécution de la page. Ouvrez le fichier "index.php" à la racine du document OpenCart. Vous verrez le $ registre
l'objet est créé très tôt dans l'exécution du script.
// Registre $ registry = new Registry ();
Après la création du $ registre
objet, il stocke plusieurs autres objets en utilisant la méthode "set". Voyons quelques exemples.
set ('load', $ loader); // Config $ config = new Config (); $ registry -> set ('config', $ config); // Base de données $ db = new DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); $ registry -> set ('db', $ db); // Request $ request = new Request (); $ registry -> set ('request', $ request); // Session $ session = new Session (); $ registry -> set ('session', $ session);
J'ai énuméré ici quelques exemples d'utilisation du $ registre
objet. Comme vous l'avez peut-être remarqué, les objets fréquemment utilisés sont créés et stockés dans le registre. La raison en est qu’il n’est pas nécessaire d’instancier plusieurs fois des objets de classe courants, vous pouvez donc simplement appeler la méthode "get" de la commande $ registre
object pour utiliser l'objet désiré. L'approche est quelque peu similaire au "Singleton Pattern", dans lequel vous êtes obligé de garder une seule instance de la classe.
Maintenant le $ registre
L'objet est rempli avec des choses utiles, mais comment est-il utilisé? Voyons comment le $ db
objet stocké dans le $ registre
est utilisé dans le modèle "Activité" du module "Compte". Ouvrez le fichier situé dans "catalog / model / account / activity.php". Vous pouvez voir que dans la méthode "addActivity", une requête d'insertion est déclenchée.
$ this-> db-> query ("INSERT INTO" ". DB_PREFIX." customer_activity 'SET' ID_client '=' ". (int) $ ID_client." ',' clé '=' ". $ this-> db- > escape ($ key). "',' data '='". $ this-> db-> escape (serialize ($ data)). "',' ip '='". $ this-> db-> escape ($ this-> request-> server ['REMOTE_ADDR']). "',' date_added '= NOW ()");
Vous vous demandez peut-être comment il s'appelle, car il n'y a pas de méthode ou de propriété "db" définie dans la classe "ModelAccountActivity". Vous pouvez accéder à la classe de modèle parent "Modèle" pour voir si elle est définie ou non. Oui, vous ne trouverez pas non plus de méthode ou de propriété "db" dans cette classe. Mais si vous regardez de près la classe "Model", vous verrez qu'elle implémente les méthodes magiques, en particulier la méthode "__get" dans ce cas..
fonction publique __get ($ key) return $ this-> registry-> get ($ key);
Pour l'instant, supposons que le $ registre
L'objet est stocké dans la propriété "registry" protégée de la classe "Model". Nous verrons comment il est stocké lorsque "Model" est instancié dans la classe "Loader".
le __obtenir
La méthode est appelée lorsque vous appelez une méthode non définie dans la classe. Dans cette méthode, "db" est passé comme argument car nous essayons d'appeler $ this -> db
dans le fichier "activity.php". Et comme discuté plus tôt, $ registre
a tous les objets utilitaires déjà stockés pendant le processus d’amorçage. Il suffit donc de récupérer l'objet "db" à l'aide de la clé en appelant la méthode "get" de l'objet "Registry"!
De la même manière, $ this -> charge
fonctionne également à partir des fichiers du contrôleur. Donc, dans l’ensemble, "Registry" est un composant très utile du framework OpenCart qui stocke les variables et objets couramment utilisés, qui sont utilisés tout au long de l’exécution du script..
L'objet "Loader" permet de charger les différents composants d'OpenCart, tels que modèle, contrôleur, langage, vue, bibliothèque, etc. Il est important de noter ici que lors de la création de l'objet "Loader", il est stocké dans le $ registre
objet avec "load" comme clé de tableau. Ainsi, vous pouvez accéder à la $ chargeur
objet en utilisant un $ this -> charge
appeler comme expliqué dans la section ci-dessus.
// Instanciation du chargeur $ loader = new Loader ($ registry); $ registry -> set ('load', $ loader);
Voyons maintenant comment les différents composants sont chargés à l’aide du "Loader". Ouvrez "system / engine / loader.php" pour voir la définition d'une classe "Loader". Nous allons commencer par la méthode "contrôleur" pour comprendre son fonctionnement.
// contrôleur de charge $ this-> load-> controller ('common / column_left');
C'est un extrait de code qui charge le contrôleur "common / column_left.php" et appelle également la méthode "index". Nous faisons cet appel pour obtenir la sortie XHTML de la "colonne de gauche" de la page OpenCart. le $ this -> charge
une partie fonctionne comme le $ this -> db
exemple que j'ai expliqué plus tôt! Ainsi, il retourne le $ chargeur
objet stocké dans le $ registre
, et enfin ça va appeler la méthode "controller" de la classe "Loader"!
De la même manière, les extraits suivants permettent de charger différents composants.
// load Model $ this -> load -> model ('catalogue / catégorie'); // load View $ this -> load -> view ('default / template / product / category.tpl', $ data); // charge la bibliothèque $ this -> load -> library ('user'); // charge Helper $ this -> charge -> helper ('json'); // charge la langue $ this -> charge -> langue ('produit / catégorie');
En regardant les définitions de méthodes de la classe "Loader", vous verrez que ce n'est pas si compliqué de comprendre exactement comment cela fonctionne. Tout d'abord, il prépare le "chemin du fichier" pour le composant correspondant, et l'inclut à l'aide de la fonction "include_once".
Globalement, "Registry" et "Loader" sont deux composants très importants du framework OpenCart qui facilitent grandement les choses pour les développeurs de modules..
Nous avons donc examiné aujourd'hui les composants "Loader" et "Registry" du framework OpenCart. J'espère que vous avez appris quelque chose d'utile dans ce tutoriel. Et j'espère que je proposerai quelque chose de plus sur le même sujet! Soumettez vos questions et suggestions en utilisant le flux ci-dessous!