SlideShare une entreprise Scribd logo
1  sur  72
Télécharger pour lire hors ligne
Introduction à Opencart
F. ABOUZAID 1
Introduction à Opencart
Sommaire
Sommaire
Introduction à Opencart.................................................................................................................. 1
Sommaire ........................................................................................................................................ 1
Solutions Web en commerce électronique..................................................................................... 5
1. Avantages d’un site de commerce électronique................................................................. 5
2. Fonctions d’un logiciel de commerce électronique ............................................................ 5
Magento: magento.com/........................................................................................................ 6
Drupal Commerce : drupalcommerce.org............................................................................... 7
VirtueMart : http://virtuemart.net/........................................................................................ 7
WooCommerce: http://www.woothemes.com/woocommerce/......................................... 8
Prestashop : https://www.prestashop.com/fr ............................................................... 8
OpenCart : www.opencart.com/............................................................................................ 9
Installation d’Opencart.................................................................................................................. 12
Pratique 1 : Installer et configurer OpenCart ........................................................................ 12
Quelques manipulations supplémentaires ............................................................................... 14
Architecture de OpenCart ............................................................................................................. 18
1. La structure de fichiers...................................................................................................... 18
2. Le routage dans Opencart................................................................................................. 18
3. Les bibliothèques............................................................................................................... 19
4. Les Langues........................................................................................................................ 19
Pratique : ................................................................................................................................... 20
Ajouter une langue dans OpenCart....................................................................................... 20
5. MVC ................................................................................................................................... 21
1. Contrôleurs........................................................................................................................ 21
Introduction à Opencart
F. ABOUZAID 2
2. Modèles............................................................................................................................. 21
3. Vues................................................................................................................................... 21
6. Le modèle MVC dans OpenCart ........................................................................................ 22
1. Les contrôleurs .............................................................................................................. 22
2. Les Vues......................................................................................................................... 23
Les modules : développement ...................................................................................................... 24
1. Le Contrôleur.................................................................................................................. 25
2. La Vue................................................................................................................................ 25
3. Le Modèle.......................................................................................................................... 26
4. Exemple pratique : ............................................................................................................ 27
5. Fonctions de la Base de données : .................................................................................... 28
6. Variables réservées ........................................................................................................... 29
Créer une nouvelle page dans OpenCart ...................................................................................... 30
1. Exemple 1: Simple sans modèle........................................................................................ 30
2. Exemple 2: Avec modèle et accès à la BD ......................................................................... 31
vQmod........................................................................................................................................... 37
OCMOD.......................................................................................................................................... 37
Différences entre OCMOD et VQMOD....................................................................................... 37
Fichiers OCMOD .................................................................................................................... 37
Structure de fichiers .............................................................................................................. 38
XML........................................................................................................................................ 38
Installation et utilisation :...................................................................................................... 39
Balises :.................................................................................................................................. 39
Exercices d'utilisation d’OCMOD............................................................................................... 42
Ajouter une langue dans OpenCart............................................................................................... 43
Activer les URLs SEO dans OpenCart............................................................................................. 45
Gérer les thèmes ........................................................................................................................... 47
1. Changer de thème................................................................................................................. 47
Introduction à Opencart
F. ABOUZAID 3
2. Structure du répertoire des thèmes...................................................................................... 48
Contenu du répertoire Template .......................................................................................... 48
3. Créer un Thème personnalisé ............................................................................................... 49
Développer le nouveau thème.................................................................................................. 49
4. Comprendre les "Layout Templates" .................................................................................... 52
Templates de module............................................................................................................ 52
Composant communs du Layout Template........................................................................... 52
Assigner un module à partir du Back-End ............................................................................. 54
Changer le Layout de la page d'accueil ................................................................................. 54
Changement dans le fichier Layout....................................................................................... 54
Les layouts dans Opencart ............................................................................................................ 56
Dispositions (Layouts) .............................................................................................................. 56
Dispositions par défaut.............................................................................................................. 56
Créer un nouveau Layout .......................................................................................................... 57
Cas pratique........................................................................................................................... 57
Améliorer la sécurité de OpenCart................................................................................................ 60
1. Supprimer le répertoire d’installation............................................................................... 60
2. Déplacer le répertoire storage comme conseillé à la connexion en mode admin :.......... 60
3. Protéger les fichiers de configuration ............................................................................... 60
4. Changer le repertoire admin............................................................................................. 61
5. Protéger le répertoire admin avec un mot de passe......................................................... 61
6. Enlever l’indication “powered by OpenCart”.................................................................... 63
7. Cacher les erreurs OpenCart ............................................................................................ 63
8. Choisissez le bon hébergeur.............................................................................................. 63
9. D'autres astuces: ............................................................................................................... 63
Paiements...................................................................................................................................... 64
Les évènements............................................................................................................................. 67
Enregistrer un évènement :................................................................................................... 67
Introduction à Opencart
F. ABOUZAID 4
Ajouter ou supprimer un gestionnaire d'évènements dans un module : ............................. 68
Ajax dans Opencart ....................................................................................................................... 71
Liens............................................................................................................................................... 72
Introduction à Opencart
F. ABOUZAID 5
Solutions Web en commerce électronique
Il est nécessaire d’utiliser un magasin virtuel pour attirer une partie de ses acheteurs et accroître
ses ventes Ces solutions sont adaptées aussi bien aux entreprises qui font affaire avec des
consommateurs (B2C) ou du commerce interentreprises (B2B).
Les logiciels de commerce électronique permettent de créer simplement une boutique en ligne.
1. Avantages d’un site de commerce électronique
• Vendre des produits et services en ligne, avec un investissement initial minime
• Faciliter, augmenter et accélérer les ventes
• Atteindre les clients 24 heures sur 24, sept jours sur sept
• Étendre la portée géographique de l’entreprise
• Améliorer la visibilité en ligne de l’entreprise
• Diminuer les frais de service à la clientèle
• Automatiser certaines fonctions et offrir un accès libre-service aux clients
• Renforcer la fidélisation de la clientèle
• Vendre des produits sans maintenir des stocks physiques
2. Fonctions d’un logiciel de commerce électronique
Une vitrine de commerce électronique de base est un système en ligne qui permet aux clients
de faire leur magasinage en simplifiant le processus de commandes. Un logiciel de CE de base
doit fournir les fonctionnalités suivantes :
• Création d’une boutique en ligne avec un panier d’achat virtuel (cart)
• Possibilité de recevoir des paiements en ligne par PayPal et/ou avec les principales
cartes de crédit
• Catalogue de produits en ligne
• Optimisation du référencement pour un meilleur classement dans les moteurs de
recherche
• Contrôle automatique des stocks et mise en place un système de suivi
• Rapports et de statistiques pour analyser le rendement
• Techniques de marketing en ligne : publicité interactive, le marketing par courriel,
les médias sociaux ou le marketing mobile.
Introduction à Opencart
F. ABOUZAID 6
Présentation de quelques Solutions de e-commerce
Magento: magento.com/
Leader mondial sur son marché et propriété d’eBay, Magento est une solution flexible qui
permet de répondre à une grande variété de besoins. Riche en extensions et fonctionnalités
(plus de 350), Magento offre notamment :
- Un outil de suggestion de produits avec commentaires et notations
- Mise en avant des promotions et du merchandising en fonction des cibles de client
- Segmentation de clients
- SEO
- Option de paiement et de méthode de livraison multiples
Depuis sa création en 2008 aux États-Unis, plus de 262 000 boutiques (à la date de novembre
2017, source Builtwith1
) ont été créées sous Magento avec des clients célèbres tels que The
North Face, Zadig&Votltaire ou encore les boutiques australiennes et anglaises de Nike.
Magento est une des solutions open source les plus puissantes et populaires du moment. Mais
c’est aussi une des solutions les plus complexes à maîtriser et à paramétrer qui nécessite de
nombreuses connaissances techniques voire un spécialiste Magento en interne. Il semble donc
judicieux de ne se tourner vers cette solution que pour réaliser des projets ambitieux au budget
adapté.
Forces
• Très personnalisable
• Multi-langues, multidevises, multi-boutiques
• Idéal pour un usage en entreprise
Faiblesses:
• Extensions coûteuses
• Hébergement coûteux
• Difficile à apprendre
1
https://trends.builtwith.com/websitelist/Magento
Introduction à Opencart
F. ABOUZAID 7
Drupal Commerce : drupalcommerce.org
La version 1.0 a été annoncée au DrupalCon de 2011. La dernière version en date (novembre
2017) est la version 2.0 pour Drupal 8.
Pour voir les statistiques d’utilisation : https://www.drupal.org/project/usage/commerce
Forces:
- Repose sur un CMS robuste
- Complètement personnalisable (+ 16 000 modules additionnels disponibles).
- Solution flexible
- La communauté Drupal
Inconvénients:
- Nécessite de maîtriser Drupal.
Statistiques : https://trends.builtwith.com/shop/Drupal-Commerce
VirtueMart : http://virtuemart.net/
VirtueMart est une solution open source écrite en PHP, basée sur le framework Joomla!
Forces:
- Communauté Joomla
Faiblesses
- Seulement une soixantaine d'extensions
- faible en matière de fonctions avancées, surtout en B2B.
Statistiques : https://trends.builtwith.com/shop/VirtueMart
Introduction à Opencart
F. ABOUZAID 8
WooCommerce: http://www.woothemes.com/woocommerce/
Une solution qui fonctionne sous WordPress et qui profite donc de son écosystème: vous avez à
votre disposition le très grand nombre de thèmes et plugins WordPress disponibles.
WooCommerce est relativement jeune (2011) mais bénéficie de tous les avantages de
WordPress.
Forces:
• Basé sur WordPress
• Gratuit
• Facilité d'utilisation
Faiblesses:
• Les extensions de base sont insuffisantes et nécessite l'achat de plugins premium
payants.
• Nécessite la maîtrise de WordPress.
Statistiques WooCommerce : https://trends.builtwith.com/shop/WooCommerce
Prestashop : https://www.prestashop.com/fr
Avec plus de 250 000 sites de e-commerce utilisant la solution française Prestashop, il s’agit
de loin l’outil le plus utilisé en France !
La grande force de l’outil est de proposer un grand nombre de thèmes et de plugins adaptés
selon les situations et besoins spécifiques. Le point négatif se trouve au niveau des plugins
payants et d’une faible optimisation SEO.
Statistiques Prestashop : https://trends.builtwith.com/shop/PrestaShop
Introduction à Opencart
F. ABOUZAID 9
OpenCart : www.opencart.com/
OpenCart a fait son apparition récemment sur le marché des solutions e-commerce open source
et s’est fait remarquer par sa facilité d’installation et ses nombreux avantages :
• Multi-langues, multidevises, multi-boutiques
• Possibilité de noter et commenter les produits
• SEO
• Outil de back-up et de restauration de la boutique
Crée en 2010 aux États-Unis, OpenCart a par exemple été choisi par The British Red Cross
(http://giftshop.redcross.org.uk/ ) et est actuellement la solution open source qui monte.
OpenCart est particulièrement adapté pour les projets des start-ups et des petits e-
commerçants mais nécessite de bonnes compétences en matière de langage PHP. C'est la
solution open source qui monte en ce moment.
http://www.opencart.com/index.php?route=feature/liveshop
Forces:
• Facilité d'utilisation
• Extensions et thèmes gratuits ou peu coûteux
• Interface d'administration agréable
• Documentation
Faiblesses:
• Qualité du code
• Complexe à personnaliser
Statistiques Opencart : https://trends.builtwith.com/shop/OpenCart
Comparatif OpenCart vs Prestashop vs Magento :
https://pmesolution.ca/boutique-en-ligne-opencart-vs-prestashop-vs-magento/
Introduction à Opencart
F. ABOUZAID 10
Synthèse des performances
Solution Faiblesse du coût
Facilité de prise en main
par un développeur
Personnalisation
Magento +++ ++ ++
PrestaShop +++++ +++ +
Drupal Commerce +++++ ++++ ++
IBM Websphere
Commerce
++ ++++ +++
Intershop +++ ++++ +++
Opencart +++++ +++ ++
Oracle ATG Web
Commerce
+ +++++ +++++
VirtueMart +++++ +++ ++
Zen cart +++++ + +
Source : http://www.journaldunet.com/solutions/saas-logiciel/comparatif-des-solutions-de-e-commerce/
Introduction à Opencart
F. ABOUZAID 11
Tendances des logiciels e-commerce : Google Trends
http://www.google.com/trends/explore?q=oscommerce%2C+Zen+Cart%2C+Magento%2C+PrestaShop%2
C+OpenCart#q=oscommerce%2C%20Zen%20Cart%2C%20Magento%2C%20PrestaShop%2C%20OpenCart
&cmpt=q
Quelques références :
http://www.ecommerce-nation.fr/quelle-solution-choisir-pour-vous-lancer-dans-le-e-
commerce/
https://www.pme-web.com/creer-site-e-commerce-5-outils-incontournables/
https://www.codeur.com/comparatifs/solution/opencart/
Introduction à Opencart
F. ABOUZAID 12
Installation d’Opencart
Pratique 1 : Installer et configurer OpenCart
1. Téléchargez la dernière version d’OpenCart à l’adresse :
http://www.opencart.com/index.php?route=download/download
2. Copiez le répertoire Opencart dézippé sur votre serveur
3. Renommez les fichiers config-dist.php dans les répertoires upload et
upload/admin en config.php
4. Allez à PhpMyAdmin et créer une BD Opencart
5. Lancez Opencart sur votre navigateur :
http://127.0.0.1/projects/opencart-2.x/upload/
important : Si l’erreur ‘Call to undefined function openssl_random_pseudo_bytes()’ apparait ,
décommentez la ligne extension=php_openssl.dll dans le fichier php.ini.
6. Remplissez les informations demandées. Par mesure de sécurité (dans le cas d’une
installation réelle) il faut changer le préfixe des tables dans la BD et éviter d’utiliser
admin comme nom d’administrateur
7. Le site est opérationnel.
Configuration :
1. Précisez les options de votre boutique:
- Nom de la boutique
- Nom du propriétaire
- Adresse: Adresse physique de la boutique
- E-Mail: Par défaut l'adresse de l'administrateur. On peut préciser une adresse
propre à la boutique
- Téléphone
- Fax
- Logo : Changer le logo de la boutique
- Localisation: Québec - Canada
- Devise: Ajouter le dollar canadien - Désactiver la livre anglaise et l'euro, puis
mettre le $ canadien comme devise par défaut.
o System  Localisation  Currency
- Afficher les prix hors-taxe
2. Définissez les zones géographiques pour les taxes:
- Québec pour TVQ+TPS
- Amérique du Nord pour TPS
3. Définissez le montant de la taxe - TVQ : 10% - TPS: 5%.
Introduction à Opencart
F. ABOUZAID 13
4. Supprimez les produits et les catégories existants. Puis créer vos propres produits avec
leur intitulé et leur description en anglais pour l'instant.
- Créez des catégories pour vos produits
- Créez des fabricants
- Mettez quelques produits en promotion (Rabais sur les prix)
- Mettez quelques produits en vedette (featured)
5. Créez un ou 2 utilisateurs et vérifiez que vous pouvez mener une opération de
commande jusqu'à la fin. Vérifiez surtout les taxes et le prix de la livraison. Pour la
livraison assurez-vous que vous proposez la possibilité de récupérer les produits à la
boutique.
6. Assurez le suivi de la commande en la complétant, quand le paiement est reçu.
7. Installez un nouveau thème pour la boutique.
- Téléchargez un thème gratuit sur
http://www.opencart.com/index.php?route=extension/extension
- Lisez install.txt qui vient généralement avec le thème pour copier le thème sur le
site. Puis:
- System SettingsÉditer la boutique  Onglet StoreTemplate puis changer
pour le template installé.
Introduction à Opencart
F. ABOUZAID 14
Quelques manipulations supplémentaires
- Bannières
Vous pouvez créer une bannière : Design -> Banners puis cliquez sur + (en haut à
droite) puis sur ‘Add Banner’. Donnez un nom à la bannière et remplissez-la des produits
que vous désirez y mettre.
Pour la placer dans la page d’accueil : Extensions -> Modules. Choisissez le module
SlideShow et éditez ‘Home Page’. Choisissez la bannière nouvellement créée et
sauvegarder le tout. Elle devrait apparaître dans la page d’accueil.
- Modifier le carousel de fabricants
Aller à bannières et modifiez la liste des produits dans la bannière ‘manufacturers’.
Introduction à Opencart
F. ABOUZAID 15
- Produits en vedette (featured)
Extensions -> Modules. Éditez le module Home page en y rajoutant les produits que
vous voulez mettre en vedette.
- Spéciaux
Catalog->Produits. Éditez le produit à mettre en spécial en allant dans l’onglet ‘Special’ et
entrez le prix promotionnel et les dates de début et de fin :
Introduction à Opencart
F. ABOUZAID 16
- Dashboard
On peut modifier l’affichage dans le Dashboard en activant ou en désactivant ses éléments
dans le module de gestion des extensions :
- Installer un nouveau thème
Téléchargez le thème puis copier les fichiers tel qu’indiqué dans les directives du thème.
Ensuite l’installer : Extensions -> Thèmes () puis éditez votre boutique. Choisissez ensuite le
répertoire du thème à installer et définissez les paramètres.
Introduction à Opencart
F. ABOUZAID 17
Custom theme
In the 2.3.x version is a bit more complicated. The following is a step by step.
1. Download the files.
• admin/controller/theme/theme_default.php
• admin/language/english/theme/theme_default.php
• admin/view/template/theme/theme_default.tpl
• catalog/view/theme/default/* //Download the entire folder
2. Rename files from the folder admin/* of theme_default to "theme_custom".
3. Rename the folder catalog/view/theme/default to custom
4. Open the file admin/controller/theme/theme_default.php and replace all
words default tocustom.
5. Create a folder called upload and move all the folders downloaded in step 1 into it.
6. Zip and rename it to custom.ocmod.zip and send through the OC installer.
http://stackoverflow.com/questions/39287147/opencart-2-3-0-2-new-custom-theme-not-
available-in-the-admin-panel
Introduction à Opencart
F. ABOUZAID 18
Architecture de OpenCart
1. La structure de fichiers
La structure de fichiers d’OpenCart est simple.
admin: contient les contrôleurs, modèles, vues et fichier langages pour l‘administration;
catalog : contient les mêmes fichiers mais pour le frontend (côté client);
images : contient les images du site;
system : contient le noyau d’OpenCart. On ne touchera jamais aux fichiers de ce répertoire.
Le répertoire install doit être supprimé juste après l’installation.
2. Le routage dans Opencart.
Le système de routage est assez simple: les routes d'URL ressemblent à ceci: route=aa/bb. La
chaîne de connexion (query string) est constituée d’au moins 2 parties qui indiquent au
framework ce qu’il doit charger.
Dans une architecture MVC, cela fonctionne comme ceci:
D’abord le contrôleur est chargé en mémoire; dans notre cas, il est identifié par les 2 premiers
paramètres de la chaîne de connexion. La première partie identifie le répertoire et la seconde le
nom du fichier contrôleur (sans son extension).
La route donnée en exemple correspond donc au fichier:
(STORE ROOT DIRECTORY)/catalog/controller/aa/bb.php
On accède ainsi à la page d’accueil par :
Opencart30/upload/index.php?route=common/home
Ou à un produit par :
Opencart30/upload/index.php?route=product/product&product_id=30
Introduction à Opencart
F. ABOUZAID 19
3. Les bibliothèques
Ce sont des bibliothèques prédéfinies qui sont essentielles pour aider au développement
d’extensions pour Opencart. La syntaxe générale pour charger en mémoire une bibliothèque est
la suivante: $this->library_name. Elles se trouvent dans le répertoire : system/library.
Exemple, pour connecter par programme un utilisateur, on écrira:
$this->user->login($username,$password);
La déconnexion se faisant par $this->user->logout();.
Des exemples de bibliothèques souvent utilisées:
• cart.php pour gérer le panier;
• image.php : fonctions relatives aux images telles que la retouche ou la mise en cache;
• customer.php : fonctions relatives aux clients;
• config.php est responsable du chargement de tous les paramètres d’OpenCart;
• user.php fonctions pour la gestion de l’administrateur et des utilisateurs.
Nous reviendrons sur l'utilisation de ces bibliothèques.
4. Les Langues
Les fichiers de langues sont dans catalog/language. Ce répertoire contient autant de sous-
répertoires qu’il y a de langues pour votre site.
Soit par exemple le répertoire en-gb pour l’anglais. Les valeurs utilisées dans toutes les pages
du site sont dans le fichier en-gb.php. Pour ajouter une nouvelle valeur on utilise la syntaxe :
$_['language_key']='This is test';.
Pour certaines pages spéciales, les fichiers de langues sont dans des répertoires particuliers. Par
exemple pour la page d’erreurs : catalog/language/en-gb/error/not_found.php .
Un fichier de langue est chargé dans le contrôleur de la manière suivante :
$this->load->language('common/header');
On utilise alors la fonction "get" pour récupérer une valeur dans le langage choisi :
$this->language->get('language_key');
Note: Les valeurs dans le fichier langage global en-gb/en-gb.php sont automatiquement
chargées et disponibles sans faire $this->language->load .
Introduction à Opencart
F. ABOUZAID 20
Pratique :
Ajouter une langue dans OpenCart
1. Téléchargez une extension pour la langue souhaitée.
2. Dézippez le fichier téléchargé dans le répertoire principal de votre boutique.
Vérifiez s'il y a un répertoire upload dans l'archive ; si c'est le cas, copiez le contenu
de ce répertoire. Sinon, recopiez le répertoire de langue dans
upload/catalog/language.
3. Allez à Système>Localisation>Langues , puis cliquez sur Ajouter
4. Remplissez le formulaire comme suit (pour le français) :
Vous devriez voir apparaître sur
votre site une liste déroulante
proposant les 2 langues.
Vous devez bien entendu fournir
toutes les informations sur vos
produits et vos catégories dans les 2
langues.
Exemple d’extension qui marche pour la version 2.3 et incomplètement pour la version 3.
http://www.opencart.com/index.php?route=extension/extension/info&extension_id=26504&
filter_search=french&filter_license=0&filter_download_id=44
Introduction à Opencart
F. ABOUZAID 21
5. MVC
C’est un patron d’architecture très utilisé dans les applications modernes et la plupart des CMS.
C’est un modèle à 3 couches : contrôleur, modèle et vues qui sont reliées entre elles de la
manière suivante :
1. Contrôleurs
Un contrôleur gère le flot d’exécution de l’application. C’est la porte d’entrée et toute requête
de l’utilisateur passe par un contrôleur. Le contrôleur choisit le modèle à invoquer pour
exécuter la requête. A la réception des données, il choisit ensuite la vue qui affichera ces
données pour l’utilisateur.
2. Modèles
Ils gèrent la logique métier de l’application et fournissent les données récupérées par des
requêtes SQL par exemple. Le modèle ne peut pas être directement invoqué. Il faut passer par
un contrôleur qui transmet la requête de l’utilisateur au modèle approprié, qui lui retransmet
les données en retour.
3. Vues
Les vues constituent l’interface utilisateur de l’application. Dans une application web, elles
contiennent du HTML, du CSS, du JavaScript, du XML ou du JSON, etc. Les vues sont visibles à
l’utilisateur contrairement aux modèles et aux contrôleurs.
Introduction à Opencart
F. ABOUZAID 22
6. Le modèle MVC dans OpenCart
1. Les contrôleurs
Pour comprendre le fonctionnement du contrôleur, nous allons faire quelques manipulations :
1. Créez un répertoire vide appelé test dans le répertoire des contrôleurs :
catalog/controller/test.
2. Créez un fichier PHP abc.php dans le répertoire test :
i.e.,catalog/controller/test/abc.php.
Écrivez le code suivant dans abc.php :
<?php
class ControllerTestAbc extends Controller{
public function index()
{
echo 'Bonjour le monde!';
exit;
}
}
?>
Dans cet exemple, il y a un certain nombre de contraintes imposées par le Framework OpenCart
que le développeur doit obligatoirement respecter :
• Le nom de la classe contrôleur doit suivre le format suivant :
Controller(NomRépertoire)(NomFichier). Ces noms doivent obligatoirement
commencer par une majuscule et ne pas contenir d’extension.
Exemple : class ControllerProductProduct extends Controller
• La méthode index() est la fonction principale du contrôleur et sera exécutée
automatiquement quand celui-ci sera appelé.
• index() doit être publique.
• Pas de HTML, JavaScript, ou CSS dans le contrôleur.
Dans le navigateur tapez l’URL:
http://localhost/Opencart/index.php?route=test/abc
Quel est le résultat?
Introduction à Opencart
F. ABOUZAID 23
2. Les Vues
En suivant l'adresse: http://localhost/opencart/index.php?route=common/home on
aboutit au code du contrôleur ControllerCommonHome situé dans
catalog/controller/common/home.php.
Les objets membres du contrôleur notamment document sont initialisés dans index.php.
Le titre est initialisé à "config_meta_title" dont la valeur vient du fichier index.php qui a
fait un appel à la fonction $this->config->get('config_meta_title') qui le charge à
partir de la BD (table setting).
Ensuite s'iI existe des vues enfant de cette vue principale, elles sont à leur tour chargées en
utilisant le code suivant :
Ensuite, le template (la vue) est chargé grâce aux lignes suivantes :
On lui transmet les données à afficher dans le paramètre $data.
Introduction à Opencart
F. ABOUZAID 24
Les modules : développement
Hiérarchie des fichiers et répertoires des modules Opencart 2.3 – 3.0:
Tous les modules nécessitent au moins un fichier dans les 2 répertoires view et controller.
La plupart vont nécessiter un fichier dans les répertoires model et language. Tous ces fichiers
ont le même nom sauf la vue qui a un suffixe différent (.tpl pour les versions 2.x et twig
depuis la version 3).
Introduction à Opencart
F. ABOUZAID 25
1. Le Contrôleur
Le premier fichier à écrire est le contrôleur pour la page d'interface d'administrateur du module.
OpenCart identifie automatiquement les modules existants, simplement en lisant le répertoire
admin/controller/extension/module du site. Les modules existants dans ce dossier
seront automatiquement affichés sur la page Modules.
Le contrôleur est l'endroit où sont chargés les fichiers de langue qui permettent de convertir du
texte en variables qui seront utilisées dans le modèle.
Une variable $data['text'] est récupérée par le contrôleur, puis envoyée en tant que $text (ou
text en twig) à la vue.
On peut également utiliser des fichiers de modèles et leurs multiples fonctions ici, y compris le
fichier de modèle du module s'il y en a un.
On définit généralement une fonction publique install() qui sera déclenchée lors de
l'installation du module (page Extensions> Modules). De même, on définira une fonction
publique de désinstallation (uninstall()). Ces fonctions seront utilisées pour créer et
supprimer des structures (comme les tables de base de données ou des paramètres de
configuration) requis par le module. C'est une bonne pratique de créer une fonction de
désinstallation qui nettoiera tous les changements que le module a fait. Voir par exemple le
fichier admin/controller/extension/module/pp_login.php.
URL
Le contrôleur est le seul fichier en MVC-L à être accédé par URL. Pour l'administration, l'URL sera
/admin/index.php?route=module/mon_module&token. Un lien vers l'administration aura
un jeton (token) ajouté à l'URL, alors que le lien vers le catalogue n'en aura pas. Le contrôleur
possède une fonction publique index() qui est appelée automatiquement. C'est une «page»
accessible au public qui est chargée par l'URL, qui sera affichée lorsque le bouton Modifier est
cliqué, et où sera le formulaire qui sera soumis. Les données soumises seront traitées dans cette
fonction et enregistrées dans la table Settings de la BD à travers l'objet de configuration du
contrôleur.
2. La Vue
Le deuxième fichier requis pour l'interface d'administration du module est le fichier de vue. Ce
fichier est créé dans le répertoire admin/view/template/extension/module, et aura le
suffixe .twig (dans la version 3.0). Dans ce fichier, on peut créer un formulaire qui sera soumis
à la fonction index() du contrôleur du module. La meilleure façon de créer un fichier de vue est
de copier et coller, un fichier de vue similaire existant et d'en modifier la forme pour l'adapter
au module en développement. Dans la vue, on peut accéder aux différents libellés des champs
que le contrôleur a stockés comme une variable PHP. Voir par exemple le fichier
admin/view/template/extension/module/bestseller.twig.
Introduction à Opencart
F. ABOUZAID 26
3. Le Modèle
Il est rare que les modules nécessitent un fichier de modèle du côté admin. Toutefois, si votre
module nécessite sa propre table de base de données ou une requête personnalisée pour créer
des données d'un format particulier, alors vous devrez écrire un fichier de modèle pour
l'administration du module. Le fichier modèle sera créé dans admin/model/module.
Fonctionnalité côté client du module
L'interface du module suit le même schéma que l'interface d'administration qui vient d'être
décrite. Comme un module peut accéder à tous les fichiers de modèles qui existent déjà dans
OpenCart, il n'est pas nécessaire d'écrire vos propres requêtes de base de données si la même
requête existe déjà. Par exemple, le fichier catalog/product contient de nombreuses requêtes
utiles pour aller chercher les produits. L'utilisation de ces fonctions de modèle doit être préférée à
ses propres fonctions.
Le fichier de vue sera dans le répertoire catalog/view/theme/<nomtheme>/template/
extension/module. Une boutique OpenCart peut avoir plusieurs thèmes différents côté
client, mais un seul modèle d'administration.
Création automatique des tables
Dans le contrôleur admin du module, il est possible d’utiliser les fonctions install et
uninstall pour créer ou supprimer automatiquement les tables du module.
Exemples :
public function install() {
$this->load->model('extension/module/monmodule');
$this->model_extension_module_monmodule->creertables();
}
public function uninstall() {
$this->load->model('extension/module/monmodule);
$this->model_extension_module_monmodule->supprimertables();
}
Introduction à Opencart
F. ABOUZAID 27
4. Exemple pratique :
Pour créer un module "Hello world", on utilisera une copie du module 'Information'.
1. Modifier la partie admin
• Copiez le fichier admin/controller/extension/module/information.php dans un
fichier salut.php.
• Renommez le contrôleur comme suit : class ControllerExtensionModuleSalut
extends Controller
• Remplacez 'information' par 'salut' dans le fichier.
• Allez à admin/language/en-gb/extension/module/ et copier le fichier
information.php dans salut.php.
• Remplacez 'information' par 'salut' dans le fichier.
• Faites la même chose avec le fichier
admin/view/template/extension/module/information.twig
2. Modifier la partie client
• Copiez le fichier catalog/controller/extension/module/information.php
dans salut.php. Enlevez les références au modèle (lignes 6 et 10-15)
• Changez le nom de la classe en ControllerInformationSalut
• Remplacez 'information' par 'salut' dans le fichier sauf dans les lignes 17 et 18.
• Copiez le fichier catalog/language/en-gb/extension/module/information.php
dans salut.php et remplacez 'information' par 'salut'. Faites de même
pour le fichier du français.
• Copiez le fichier
catalog/view/theme/default/template/module/information.twig dans
salut.twig. Remplacez le code qui s'y trouve par les lignes:
<div class="sidebar">
<div class="panel panel-default">
<div class="panel-heading">
{{ heading_title}}
</div>
</div>
</div>
3. Installez le module ( ExtensionsModules) et activez-le (changez disabled en
enabled dans le module). Associez le module à un layout (DesignHome, puis
ajoutez le module dans la position de votre choix). Vous pouvez voir le résultat dans
la page d'accueil du site.
Introduction à Opencart
F. ABOUZAID 28
5. Fonctions de la Base de données :
La classe db aide à interroger la BD pour exécuter des requêtes d’insertion, de
suppression et de mise à jour dans la BD. Elle fournit aussi des méthodes pour nettoyer
les données par échappement, récupérer le dernier ID inséré ou le nombre de lignes.
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX .
"table`");
− DB_PREFIX est le préfixe des tables ;
− $result est un objet qui contient le résultat de la requête SELECT. Elle possède
les propriétés suivantes:
• $result->row contient les données de la première ligne sous la forme d’un
tableau associatif.
• $result->rows est un tableau de lignes de résultats sur lesquels on peut
boucler par un foreach.
• $result->num_rows est le nombre de lignes retournées par la requête.
L’instruction $this->db->query($sql); exécute la requête passée en paramètre.
Exemple:
$query = $this->db->query("SHOW COLUMNS FROM
`".DB_PREFIX."product` LIKE 'youtube'");
if(!$query->num_rows){
$this->db->query("ALTER TABLE `".DB_PREFIX."product`
ADD `youtube` TEXT NOT NULL");
}
Ces lignes de code se trouvent soit dans le contrôleur ou le modèle. La requête cherche
une colonne YouTube dans la table product. Si elle n’existe pas, la requête insère la
colonne dans la table.
$this->db->escape($value);
Échappe et nettoie la variable avant de l’insérer dans la BD pour éviter les injections
SQL. Elle utilise la fonction mysql_real_escape_string() de PHP.
$this->db->countAffected($sql);
Retourne le nombre de lignes affectées par la requête UPDATE récemment exécutée.
$this->db->getLastId($sql);
Retourne l’ID de la dernière ligne insérée par la plus récente requête. Elle utilise la
fonction mysql_insert_id() de PHP.
Introduction à Opencart
F. ABOUZAID 29
6. Variables réservées
OpenCart a des variables prédéfinies à utiliser à la place des variables standards :
$_GET, $_POST, $_SESSION, $_COOKIE, $_FILES, $_REQUEST et $_SERVER
$_SESSION est utilisé par $this->session->data où data est un tableau associatif qui
représente $_SESSION.
Les autres variables peuvent être utilisées par $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
Exercice
1. Créez un module qui affiche tous les produits en promotions (‘Specials’) classés par
catégorie.
2. Ajoutez un critère de recherche :
Par exemple, pour une fourchette de prix (entre un prix min et un prix max)
Introduction à Opencart
F. ABOUZAID 30
Créer une nouvelle page dans OpenCart
Pour cela, il faut créer les fichiers suivants:
• Un fichier Controller
• Un fichier Template
• Un fichier Model
• Un fichier Language
1. Exemple 1: Simple sans modèle
1. On crée une page statique.php dans le répertoire
catalogcontrollerinformation
On obtient cette page par simple copie d'une page existante dans le même répertoire et
en changeant le nom du contrôleur. Le nom du contrôleur devient:
ControllerInformationStatique.
On modifie le code en conséquence (changez ‘information’ en
‘statique’).
2. On crée une page statique.twig dans
catalogviewthemedefaulttemplateinformation
On copie la page information.twig on adapte le contenu. Par exemple, on change
‘description’ (ligne 18) en ‘text_content’ qui sera définie dans le fichier
langage.
3. Fichier langage: On crée statique.php dans
cataloglanguageen-gbinformation avec le contenu suivant:
<?php
// Text
$_['heading_title'] = 'Page statique';
$_['text_content'] = 'Bonjour. Vous &ecirc;tes sur ma page
statique.';
$_['text_error'] = 'Information Page Not Found!';
On accède à la page par:
/index.php?route=information/statique
Introduction à Opencart
F. ABOUZAID 31
2. Exemple 2: Avec modèle et accès à la BD
On crée une nouvelle fonctionnalité d'affichage de nouvelles.
1. On crée les tables dans la BD (n’oubliez pas de changer le préfixe de la table).
CREATE TABLE IF NOT EXISTS `oc_nouvelles` (
`news_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`date_added` datetime NOT NULL,
PRIMARY KEY (`news_id`)
)
INSERT INTO `oc_nouvelles` (`title`, `description`, `date_added`) VALUES
('Tutoriel de Faysal A.', 'Le tutoriel Opencart est disponible!', '2017-08-23
00:00:00'),
('Mon premier Article.', 'Opencart est sympa!', '2017-08-22 00:00:00');
2. On crée le modèle dans /catalog/model/catalog/news.php
<?php
class ModelCatalogNews extends Model {
// Model - type du fichier.
// Catalog – Le répertoire.
// News - le nom du fichier.
// Fonction qui retourne la news d’id en paramètre
public function getNews($news_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "nouvelles WHERE
news_id = '" . $news_id . "'");
// Requête pour retrouver la news.
if ($query->num_rows) { // Une news est retournée
return $query->row;
} else {
return false;
}
}
// Fonction pour récupérer toutes les news
public function getAllNews() {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "nouvelles ORDER
BY date_added DESC");
return $query->rows;
}
}
?>
Introduction à Opencart
F. ABOUZAID 32
3. On crée le contrôleur dans /catalog/controller/informations/news.php
<?php
class ControllerInformationNews extends Controller {
// Controller – Fichier du contrôleur.
// Information – Son répertoire.
// News – nom du fichier news.php
// Tous les contrôleur ont une fonction index()
public function index() {
$this->language->load('information/news'); // Appel au fichier langage
$this->load->model('catalog/news'); // Appel au modèle
// Titre de la page.
$this->document->setTitle($this->language->get('heading_title'));
// Fil d’Ariane
$data['breadcrumbs'] = array();
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home'),
'separator' => false
);
$data['breadcrumbs'][] = array(
'text' => $this->language->get('heading_title'),
'href' => $this->url->link('information/news'),
'separator' => $this->language->get('text_separator')
);
// Texte pris dans le fichier du langage
$data['heading_title'] = $this->language->get('heading_title');
$data['text_title'] = $this->language->get('text_title');
$data['text_description'] = $this->language->get('text_description');
$data['text_view'] = $this->language->get('text_view');
// Appel de la fonction getAllNews du modèle
$all_news = $this->model_catalog_news->getAllNews();
$data['all_news'] = array();
foreach ($all_news as $news) {
$data['all_news'][] = array (
'title' => $news['title'],
'description' =>
(strlen(html_entity_decode($news['description'])) > 50 ?
substr(strip_tags(html_entity_decode($news['description'])), 0, 50) . '..' :
html_entity_decode($news['description'])),
'view' => $this->url->link('information/news/news', 'news_id=' .
$news['news_id'])
Introduction à Opencart
F. ABOUZAID 33
);
}
// Requis. Les fichiers contenus dans la page.
$data['column_left'] = $this->load->controller('common/column_left');
$data['column_right'] = $this->load->controller('common/column_right');
$data['content_top'] = $this->load->controller('common/content_top');
$data['content_bottom'] = $this->load->controller
('common/content_bottom');
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');
// Appel de la vue
$this->response->setOutput($this->load->view('information/news_list ',
$data));
}
// Fonction pour afficher le detail d’une news donnée par son ID
public function news() {
$this->load->model('catalog/news');
$this->language->load('information/news');
if (isset($this->request->get['news_id']) && !empty($this->request-
>get['news_id'])) {
$news_id = $this->request->get['news_id'];
} else {
$news_id = 0;
}
$news = $this->model_catalog_news->getNews($news_id);
$data['breadcrumbs'] = array();
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home'),
'separator' => false
);
$data['breadcrumbs'][] = array(
'text' => $this->language->get('heading_title'),
'href' => $this->url->link('information/news'),
'separator' => $this->language->get('text_separator')
);
if ($news) {
$data['breadcrumbs'][] = array(
Introduction à Opencart
F. ABOUZAID 34
'text' => $news['title'],
'href' => $this->url->link('information/news/news', 'news_id=' .
$news_id),
'separator' => $this->language->get('text_separator')
);
$this->document->setTitle($news['title']);
$data['heading_title'] = $news['title'];
$data['description'] = html_entity_decode($news['description']);
$data['column_left'] = $this->load->controller('common/column_left');
$data['column_right'] = $this->load->controller('common/column_right');
$data['content_top'] = $this->load->controller('common/content_top');
$data['content_bottom'] = $this->load-
>controller('common/content_bottom');
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');
$this->response->setOutput($this->load->view('information/news',
$data));
} else {
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_error'),
'href' => $this->url->link('information/news', 'news_id=' .
$news_id),
'separator' => $this->language->get('text_separator')
);
}
}
}
?>
4. On crée les 2 vues :
• /catalog/view/theme/default/template/information/news_list.twig
{{ header }} {{ column_left }} {{ column_right }}
<div id="content">
{{ content_top }}
<div class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
{{ breadcrumb['separator'] }} <a href=" {{ breadcrumb['href'] }}">
{{ breadcrumb['text'] }}</a>
{% endfor %}
</div>
Introduction à Opencart
F. ABOUZAID 35
<h1>{{ heading_title }}</h1>
<center>
<table style="width:80%; border-collapse: collapse; border-left: 1px
solid #eeeeee; border-right: 1px solid #eeeeee;">
<tr style="font-weight:bold;">
<td style="width:30%; padding:10px 0px 10px 10px;
background:#eeeeee; text-align:left;">{{ text_title }}</td>
<td style="width:50%; padding:10px 0px 10px 10px;
background:#eeeeee; text-align:left;">{{ text_description }}</td>
<td style="width:10%; padding:10px 10px 10px 10px;
background:#eeeeee; text-align:right;"></td>
</tr>
{% for news in all_news %}
<tr>
<td style="padding:10px 0px 10px 10px; text-align:left;
border-bottom: 1px solid #eeeeee;">{{ news['title'] }}</td>
<td style="padding:10px 0px 10px 10px; text-align:left;
border-bottom: 1px solid #eeeeee; border-left: 1px solid #eeeeee;">{{
news['description'] }}</td>
<td style="padding:10px 10px 10px 10px; text-align:right;
border-bottom: 1px solid #eeeeee; border-left: 1px solid #eeeeee;"><a
href="{{ news['view']}}">{{ text_view }}</a></td>
</tr>
{% endfor %}
</table>
</center>
{{ content_bottom }}
</div>
{{ footer }}
• /catalog/view/theme/default/template/information/news.twig
{{ header }}{{ column_left }}{{ column_right }}
<div id="content">
{{ content_top }}
<div class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
{{ breadcrumb['separator'] }}<a href="{{ breadcrumb['href']
}}">{{ breadcrumb['text'] }}</a>
{% endfor %}
</div>
<h1>{{ heading_title }}</h1>
<p>{{ description }}</p>
{{ content_bottom }}
</div>
{{ footer }}
Introduction à Opencart
F. ABOUZAID 36
5. On crée les fichiers langages :
/catalog/language/en-gb/information/news.php
<?php
// Heading
$_['heading_title'] = 'Our Latest News';
// Text
$_['text_news'] = 'News';
$_['text_title'] = 'Title';
$_['text_description'] = 'Description';
$_['text_view'] = 'View';
$_['text_error'] = 'The page you are looking for cannot be found.';
$_['text_separator'] = '&gt;';
Idem pour le français
6. On rajoute le lien dans le menu:
• aller à /catalog/view/theme/default/template/common/menu.twig
• repérer l'endroit où insérer le lien (après la ligne 25):
{% set href = 'index.php?route=information/news' %}
<li><a href="{{ href }}">{{ text_news }}</a></li>
7. Pour le nom de la variable dans le menu ajoutez les lignes suivantes à :
/catalog/controller/common/menu.php
// Pour insérer les news dans le menu
$this->language->load('information/news');
$data['text_news'] = $this->language->get('text_news');
Introduction à Opencart
F. ABOUZAID 37
vQmod
vQmod est un système conçu pour éviter d'avoir à modifier les fichiers du noyau. Au lieu
d'apporter des modifications aux fichiers de base directement, les changements sont créés sous
la forme de scripts XML de recherche /remplacement dans les fichiers PHP. En ne modifiant pas
les fichiers du noyau, les changements ne seront pas altérés lors d'une mise à jour d’Opencart.
Cependant, les fichiers vQmod sont conçus pour fonctionner avec certaines versions d’Opencart.
Il y a donc un risque d'incompatibilité lors des mises à jour.
L’utilisation de vQmod n’est pas limitée à Opencart. Un nouveau système a été introduit avec
Opencart2 : OCMOD. Il comporte certaines simplifications par rapport à vQmod.
OCMOD
OCMOD est un système qui permet aux administrateurs de boutiques en ligne de modifier le site
en télé-versant un fichier compressé qui contient des fichiers XML, SQL et PHP.
OCMOD est basé sur vQmod.
Différences entre OCMOD et VQMOD
OCMOD a été créé comme une version simplifiée de vQmod.
Voici les caractéristiques qui y sont présentes :
- Replace, Before, After, Regex, Offset, Limit, ignoreif, error
Fichiers OCMOD
Les fichiers OCMOD sont versés dans la partie admin par : Extensions  Extension
Installer
L’extension doit obligatoirement être .ocmod.zip. Ceci est pour éviter de verser des fichiers qui
ne sont pas des fichiers OCMOD.
La version 3.x ne supporte que le fichiers archives. Pour cela, on change le nom du fichier en
install.xml puis on le zippe comme install.ocmod.zip.
Introduction à Opencart
F. ABOUZAID 38
Structure de fichiers
Le fichier compressé peut contenir plusieurs fichiers. Un exemple de structure de fichiers
OCMOD compressés est :
• upload
• install.sql
• install.php
• install.xml
upload : Tous les fichiers dans ce répertoire seront versés dans l’installation d’Opencart.
install.sql : Contient les requêtes SQL : create, drop, insert et update. Chaque requête doit se
terminer avec un ‘;’.
install.php : Si la modification requiert du code PHP personnalisé.
install.xml : Le fichier XML de modification.
XML
Il est possible d’utiliser le seul fichier XML pour la modification.
Ce fichier crée une copie virtuelle de n’importe quel fichier qui doit être changé. Plutôt que de
modifier les fichiers originaux de l’installation, on utilisera cette méthode, qui permet
d’appliquer plusieurs modifications sur le même fichier.
Exemple de fichier OCMOD :
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Test Ocmod</name>
<code>Test_Ocmod</code>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="catalog/controller/common/home.php">
<operation>
<search>
<![CDATA[$data['column_left'] = $this->load->controller
('common/column_left');]]>
</search>
<add position="replace">
<![CDATA[$data['column_left'] = "test123";]]>
</add>
</operation>
</file>
</modification>
Introduction à Opencart
F. ABOUZAID 39
Installation et utilisation :
 L’installation d’une extension OCMOD se fait par l’installateur d’extensions :
Extension Extension installer, puis chercher le fichier d’extension
ocmod.zip à installer.
Faire ensuite : Extension Modification puis cliquer sur le bouton de
rafraichissement.
 La désactivation d’une extension OCMOD se fait par : Extension Modification
puis Désactiver l’extension en question. On peut aussi la supprimer en cliquant sur le
bouton de suppression.
Important : A chaque activation/désactivation, il faut cliquer sur le bouton de rafraichissement
pour que cela soit effectif.
Balises :
 File : permet de spécifier le ou les fichiers à manipuler.
Exemples :
<file path="catalog/controller/common/home.php">
Plusieurs fichiers:
<file
path="system/engine/action.php|system/engine/loader.php|system/library
/config.php|system/library/language.php">
<file
path="system/{engine,library}/{action,loader,config,language}*.php">
 Search : permet de rechercher du code dans le fichier
Les attributs sont :
• trim="(true|false)" : On ignore (ou pas) les espaces (true par défaut).
• regex="(true|false)" : On utilise des regex (ou pas)
• index="(number)"
Introduction à Opencart
F. ABOUZAID 40
Exemple:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Modification Default</name>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="catalog/controller/common/home.php">
<operation>
<search trim="true" index="1">
<![CDATA[$data['column_left'] = $this->load->controller
('common/column_left');]]>
</search>
<add position="replace" offset="1">
<![CDATA[[CDATA[$data['column_left'] = "test123";]]>
</add>
</operation>
</file>
</modification>
 Add : Le code qui remplace le résultat du ‘search’.
Les attributs sont :
• trim="(true|false)"
• position="(replace|before|after)"
• offset="(number)"
Remarque : position ne peut pas être utilisée si regex est à ‘true’ dans l’attribut ‘search’.
• L'attribut Optionnel "offset" va de pair avec la position
o permet de décaler l'insertion ou le remplacement de "n" lignes de la position
donnée par search. Par exemple,
 si l’attribut position est before et offset à "3", le texte de add sera
inséré 3 lignes au-dessus de la ligne cherchée.
 si position est à replace et l'offset 3, il enlèvera le code de la ligne
cherchée et les 3 lignes suivantes et le remplacera par le texte de add.
o L'attribut Optionnel "index" précise quelle instance de la recherche sera
impactée par l'opération.
Introduction à Opencart
F. ABOUZAID 41
Exemple
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Modification Default</name>
<code>Modification_Default</code>
<version>1.0</version>
<author>OpenCart Ltd</author>
<link>http://www.opencart.com</link>
<file path="catalog/controller/common/home.php">
<operation>
<search trim="true">
<![CDATA[$data['column_left'] = $this->load->controller
('common/column_left');]]>
</search>
<add position="before" trim="true" offset="2">
<![CDATA[[CDATA[$data['column_left'] = "test123";]]>
</add>
</operation>
</file>
</modification>
 Regex
Les attributs sont :
• limit="(number)" : le nb d’occurrences concernées par la modification.
Exemple:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Regex Example</name>
…
<file
path="system/{engine,library}/{action,loader,config,language}*.php">
<operation>
<search regex="true" limit="1">
<![CDATA[~(require|include)(_once)?(([^)]+)~]]>
</search>
<add>
<![CDATA[$1$2(modification($3)]]>
</add>
</operation>
</file>
</modification>
Quand on utilise regex on ne peut pas utiliser les attributs ‘position’, ‘trim’ ou ‘offset’
car ils sont traités par le code de l’expression régulière. L’attribut ‘limit’ est lui utilisable.
Introduction à Opencart
F. ABOUZAID 42
Exemple: pour changer le 3ème 'foo' en 'bar' dans cette ligne:
lorem ifoopsum foo lor foor ipsum foo dolor foo
^1 ^2 ^3 ^4 ^5
On exécutera :
s/(.{-}zsfoo){3}/bar/
Qui donnera :
lorem ifoopsum foo lor barr ipsum foo dolor foo
^1 ^2 ^3=bar ^4 ^5
Exercices d'utilisation d’OCMOD
• Utiliser OCMOD pour enlever le texte ‘powered by Opencart’
• Forcer les utilisateurs à utiliser des mots de passe forts (6 lettres au moins et une
majuscule)
• Enlever la fonctionnalité de comparaison des produits.
Introduction à Opencart
F. ABOUZAID 43
Ajouter une langue dans OpenCart2
5. Télécharger une extension pour le langue souhaitée. Vous pouvez consulter:
OpenCart marketplace.
6. Dézipper le fichier téléchargé dans le répertoire principal de votre boutique. it
an upload the files to your main shop directory. Vérifiez s'il y a un répertoire
upload dans l'archive; si c'est le cas archive, copier le contenu de ce répertoire.
7. Allez à Système>Localisation>Langues
8. Rentrez les valeurs demandées pour la langue. Elles sont généralement fournies
avec le package téléchargé
2
http://omframework.com/2014/11/21/how-to-add-a-language-pack-in-opencart/
Introduction à Opencart
F. ABOUZAID 44
5. La nouvelle langue devrait apparaître dans l'entête de vos pages.
Introduction à Opencart
F. ABOUZAID 45
Activer les URLs SEO dans OpenCart
1. A partir de la console administration, allez à Système > Paramètres et cliquez
sur le lien pour modifier la boutique.
2. Dans l'onglet "Serveur" mettez le bouton radio "Utiliser des URL’s SEO " à "Oui"
et sauvegarder les changements.
3. Dans le répertoire principal de OpenCart il y a un fichier.htaccess.txt qu'il faut
renommer en .htaccess. Si ce fichier existe déjà, il faut y ajouter les lignes
suivantes:
# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make
sure you folder it does run in ie. / becomes /shop/
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteBase / : indique le répertoire racine du site.
Exemple: RewriteBase /boutique/
La barre / à la fin est obligatoire.
Ajouter les mots-clés pour les produits et les catégories
La fonctionnalité par défaut ne marche pas pour les boutiques multiples.
Il ne faut pas utiliser d'espaces dans les mots-clés. Les mots-clés doivent être uniques et
différents entre les produits et les catégories.
Introduction à Opencart
F. ABOUZAID 46
Pour ajouter les mots-clés : Allez à Catalogue > Produits
Cliquez pour modifier un produit
Dans l'onglet "Données" remplissez le champs SEO
Allez à Catalogue > Catégories et répétez le même processus pour les catégories.
Introduction à Opencart
F. ABOUZAID 47
Gérer les thèmes
1. Changer de thème
1. Télécharger un thème et le copier dans le répertoire catalog/view/theme
2. L’activer à partir de : Extensions->Themes -> Edit Default Store
theme.
System-> Settings
Choisir le magasin -> Edit
Dans l'onglet Store choisir la valeur de Template puis le thème que vous voulez
activer.
Introduction à Opencart
F. ABOUZAID 48
2. Structure du répertoire des thèmes
Dans le répertoire view il y a un thème par défaut (view -> theme -> default). Il
contient les répertoires suivants :
1. Image: contient les images du thème;
2. Stylesheet: contient les feuilles de style;
3. Template: Contient les fichiers template du front-end. Ce répertoire est organisé par
fonctionnalités.
Contenu du répertoire Template
1. Common. Contient les fichiers Template pour les éléments communs aux différentes
pages: header, footer, sidebar, … Il peut contenir vos propres fichiers que vous comptez
utiliser dans plusieurs pages.
2. Error Contient les fichiers template pour la page d'erreur.
3. Information. Contient les templates pour les pages Contact et Sitemap et les pages
statiques d'information.
4. Extension. Contient entre autres le dossier Module qui lui-même contient les
templates pour les modules personnalisés que vous développerez.
D'autres répertoires contiennent les templates spécifiques à certaines pages. Par exemple,
quand on visite la page "Mon Compte" on invoque le template qui lui est associé qui se trouve
ici: catalog/view/theme/default/template/account.
Introduction à Opencart
F. ABOUZAID 49
3. Créer un Thème personnalisé
Deux possibilités s'offrent à vous :
1. Remplacer totalement l'interface du front-end ;
2. Changer certains aspects de l'interface comme la combinaison des couleurs ou la disposition
des éléments qui la composent.
Dans les 2 cas, il faut créer un nouveau thème et ne pas toucher au thème par défaut.
Pour cela, on va créer un nouveau répertoire que l'on appellera monthemeperso. Copiez-y
ensuite les fichiers suivants :
• catalogviewthemedefaultstylesheet*.*
• catalogviewthemedefaultimage*.*
• catalogviewthemedefaulttemplatecommonheader.twig
Dans header.twig remplacez le nom du thème (default) par le nom du nouveau thème
(ligne 25).
Appliquez différentes modifications à la feuille de style et constatez-en l'effet sur votre site.
Vous avez déjà la structure d'un thème fonctionnel que vous pouvez activer à partir de la
console d'administration où monThemePerso doit normalement apparaître.
En revenant à la boutique, on remarque que le nouveau thème est identique au thème par
défaut. Ceci est dû au mécanisme de surcharge (overriding) d’OpenCart. Quand le système
essaie d'appliquer un template du nouveau thème et qu'il ne le trouve pas, il va prendre le
template correspondant dans le thème par défaut.
Ce mécanisme permet d'apporter des modifications partielles au thème par défaut, sans créer
un nouveau thème complet.
Développer le nouveau thème
Dans le répertoire monthemeperso/template/common, copiez les fichiers home.twig et
header.twig du répertoire default/template/common.
Remarque : On ne copie que les fichiers que l'on souhaite personnaliser. Inutile de recopier tous
les autres.
Dans le nouveau thème ouvrez le fichier template/common/header.twig. Mettez à jour la
référence à la feuille de style. Vous devriez obtenir ceci:
<link rel="stylesheet" type="text/css" href="catalog/view/theme/
monthemeperso/stylesheet/stylesheet.css" />
Introduction à Opencart
F. ABOUZAID 50
Ouvrez le fichier template/common/home.twig et
Ajoutez la ligne suivante avant la ligne 11 :
<div style="background: #00F;color: #FFF;font-weight:
bold;padding-left: 10px;">Si cette ligne apparait, c'est que le
nouveau thème est en marche!</div><br/>
En retournant à la page d'accueil, on devrait voir les changements.
Vous pouvez bien entendu apporter tous les changements que vous jugez nécessaires pour
votre nouveau thème.
Pour initialiser tous les réglages CSS, on peut créer une nouvelle feuille de style :
catalogviewthememonthemepersostylesheetreset.css et y insérer les
lignes suivantes :
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
6. On y rajoute quelques modifications comme suit :
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
}
:focus {
outline: 0;
}
ins {
text-decoration: none;
Introduction à Opencart
F. ABOUZAID 51
}
del {
text-decoration: line-through;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
Et on modifie le fichier header.twig en lui rajoutant la ligne suivante au bon endroit:
<link rel="stylesheet"
href="catalog/view/theme/monthemeperso/stylesheet/reset.css" />
Introduction à Opencart
F. ABOUZAID 52
4. Comprendre les "Layout Templates"
Un "layout template" est un template qui collecte le contenu de différentes zones de la page,
l'insère dans le layout correspondant et génère une page complète.
Templates de module
Un module est un bloc qui est affiché dans une région spécifique du "layout template".
Par défaut, il y a 4 positions différentes dans le layout template:
1. Content Top
2. Content Bottom
3. Column Left
4. Column Right
On peut donc assigner un module à chacune de ces positions. Les templates de Module sont
dans le répertoire template/extension/module. Ainsi, à la création d'un nouveau module,
on doit placer le template qui lui est associé dans ce répertoire.
Comment repérer le template associé à une page dont on veut changer l'apparence?
Prédiction basée sur la structure
Soit l'url suivante :
http://www.monsite.com/index.php?route=account/login.
account/login est la valeur du paramètre "route" et qui nous indiquera quel sera le répertoire
template du thème par défaut qui sera utilisé. Dans ce cas, ce sera:
catalog/view/theme/default/template/account/login.tpl
Cas particuliers
Dans certains cas, il sera nécessaire de consulter le fichier contrôleur. Exemple:
http://www.monsite.com/index.php?route=account/login
Dans ce cas, le contrôleur sera
catalog/controller/account/login.php
Dans ce fichier se trouve ce code qui est le moyen par lequel le contrôleur indique le template à
utiliser:
$this->template = 'default/template/account/login.tpl';
Composant communs du Layout Template
Ouvrez le fichier: default/template/account/login.tpl, par exemple. Voilà la
signification des principales variables:
Introduction à Opencart
F. ABOUZAID 53
La sortie d'un module spécifique se trouve dans :
default/template/module/{modulename.tpl}.
Par exemple, pour le module "Account", le fichier est:
default/template/module/account.tpl.
Dans ce fichier, la signification des principales variables est la suivante:
Introduction à Opencart
F. ABOUZAID 54
Assigner un module à partir du Back-End
Exemple du module "Slideshow":
Avec cette configuration le module "Slideshow" sera affiché dans la partie "Content Top"
du layout "Home".
Changer le Layout de la page d'accueil
Allez à Extension -> Modules
Supprimez les modules "Slideshow", "Carousel" et "En vedette". La page d'accueil
devrait être presque vide à l'exception du header et du footer.
Installez le module "Category" dans le Layout "Home" à la Position "Colonne gauche".
Ajoutez le module "Compte" dans le même layout à la position "colonne droite".
Vérifiez votre page d'accueil.
Changement dans le fichier Layout
Pour ajouter du texte dans un template, il faut passer par le fichier langage du template.
Exemple pour personnaliser la page d’accueil, au lieu de mettre le texte directement dans la
page, on suit les étapes suivantes:
- Ouvrir le fichier catalog/language/en-gb/en-gb.php et ajouter la ligne suivante, à la fin du
fichier.
Introduction à Opencart
F. ABOUZAID 55
$_['welcome_text'] = " Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Pellentesque vestibulum dui sit amet semper porta. Sed in enim quam.
Etiam cursus ante eu turpis consectetur, eu tincidunt diam mattis. Cras
euismod faucibus eros volutpat efficitur. ";
- Ouvrir le fichier catalog/controller/common/home.php. On y ajoute la variable que l’on a
inséré dans en-gb.php pour qu’elle soit disponible lors de l’affichage de home.twig. Dans
"home.php" juste avant la ligne :
$this->response->setOutput($this->load->view('common/home', $data));
On ajoute le code suivant:
$data['welcome_text'] = $this->language->get('welcome_text');
- Ajouter la variable $welcome_text dans home.twig. Ce fichier devrait alors ressembler à
ceci:
<?php echo $header; ?>
<div class="container">
<div class="row"><?php echo $column_left; ?>
<?php if ($column_left && $column_right) { ?>
<?php $class = 'col-sm-6'; ?>
<?php } elseif ($column_left || $column_right) { ?>
<?php $class = 'col-sm-9'; ?>
<?php } else { ?>
<?php $class = 'col-sm-12'; ?>
<?php } ?>
<div id="content" class="<?php echo $class; ?>"><?php echo $content_top; ?>
<div><?php echo $welcome_text; ?></div>
<?php echo $content_bottom; ?></div>
<?php echo $column_right; ?></div>
</div>
<?php echo $footer; ?>
Les modifications que l’on a fait directement dans les fichiers en-gb.php et home.php devraient
être faites par OCMOD.
Introduction à Opencart
F. ABOUZAID 56
Les layouts dans Opencart
Dispositions (Layouts)
Une disposition (layout) est une distribution des différents modules pour une ou
plusieurs pages du site. On peut donc répartir les modules de plusieurs façons comme
dans les exemples suivants :
Dispositions par défaut
Il y a des dispositions pré-configurées qui sont suffisantes dans la plupart des cas, puisqu’ils
prennent en charge les différentes sections d’un magasin:
• Account
• Affiliate
• Category
• Checkout
• Contact
• Default
• Home
• Information
• Manufacturer
• Product
• Sitemap
Avec les dispositions on peut :
- Indiquer qu’un module doit s’afficher sur toutes les pages
- Afficher différents modules sur les différentes pages (basé sur le chemin)
- Afficher différent module (comme bannière) sur différentes catégories,
produit et page d’information
- Si vous avez plusieurs boutiques, vous pouvez faire les réglages ci-dessus
pour chacune des boutiques.
Introduction à Opencart
F. ABOUZAID 57
Créer un nouveau Layout
En faisant : "System  Design  Layouts", on affiche une liste des différents layouts prédéfinis
ou personnalisés.
On peut créer un nouveau layout en cliquant sur "Add New".
Cas pratique
Nous allons mettre en évidence un produit particulier en lui créant le design suivant :
Étape 1 : créer un layout et nommez-le « Meilleur produit ». On ne précise pas de route
particulière. Opencart utilisera la route par défaut de ce produit.
Étape 2 : aller à la page du produit en question et dans l’onglet design choisissez comme layout,
« Meilleur produit »
Étape 3 : il faut configurer chaque module séparément
Pour créer un module, on commence par lui associer une bannière (Banner)
1. Les bannières sont gérées (créées) à partir de Design  Banners, puis cliquer sur le
bouton Add. Appellez la bannière : Meilleur produit et Ajouter le produit en question à la
bannière comme indiqué dans la figure suivante. Assurez-vous de mettre l’image
correspondant au produit.
Introduction à Opencart
F. ABOUZAID 58
2. Pour associer la bannière au module banner, on fait :
Extensions  Modules  Banner puis cliquer sur le bouton ADD près de Banner et remplir les
champs comme suit :
Une fois sauvegardée, la bannière devrait apparaître dans la liste des modules.
Introduction à Opencart
F. ABOUZAID 59
3. Pour associer le module créé avec un layout, on fait : Design > Layouts
En affichant le produit choisi comme ‘meilleur produit’ on voit apparaître le layout créé.
A vous de terminer le cas pratique pour obtenir un design qui ressemble à ceci :
Introduction à Opencart
F. ABOUZAID 60
Améliorer la sécurité de OpenCart
1. Supprimer le répertoire d’installation
Un intrus qui accède à votre site et à ce répertoire peut facilement remettre à zéro votre
installation. Ne courez pas de risque et supprimez ce répertoire.
2. Déplacer le répertoire storage comme conseillé à la connexion en
mode admin :
En cas de problème, les 2 fichiers config.php et admin/config.php contiennent une référence
vers le répertoire storage de votre installation, que vous pouvez rectifier manuellement :
define('DIR_STORAGE', '/var/www/vhosts/fabouzaid/www/storage/');
3. Protéger les fichiers de configuration
Changez les permissions d’accès aux fichiers de configuration (444 ou 644)
• Config.php
• Index.php
• Admin/config.php
• Admin/index.php
• system/startup.php
On peut le faire dans WinSCP à partir de la fenêtre de propriétés :
Introduction à Opencart
F. ABOUZAID 61
4. Changer le repertoire admin
Le répertoire par défaut est : www.monsite.com/admin.
On peut changer facilement l’emplacement de ce répertoire et indiquer à OpenCart où il se
trouve.
Renommez votre répertoire admin en quelque chose de plus difficile à deviner.
Par exemple : www.monsite.com/xyz_admin
Ouvrez les 2 fichiers :
• config.php
• admin/config.php
Remplacez toutes les instances de ‘admin’ par le nouveau nom.
De plus il faut aussi vérifier que les extensions OCMOD installées fonctionnent, sinon, il faut les
modifier en conséquence.
5. Protéger le répertoire admin avec un mot de passe
1. créer un fichier .htaccess et copier le code suivant:
AuthUserFile [chemin du fichier .htpasswd]
AuthName "Entrer un identifiant et un mot de passe"
AuthType Basic
require valid-user
2. créer le fichier .htpasswd en utilisant l'utilitaire htpasswd qui se trouve dans le répertoire :
EasyPHP-DevServer-13.1VC11binariesapachebin
Introduction à Opencart
F. ABOUZAID 62
La commande à entrer est la suivante :
La première fois (pour créer le fichier)
htpasswd -cb nomFichier utilisateur motDePasse
Pour les autres utilisateurs :
htpasswd -b nomFichier utilisateur motDePasse
On peut aussi protéger certains types de fichiers :
<FilesMatch ".(php|twig|txt)$">
Order Deny,Allow
Deny from all
allow from YY.YY.YY.YY
</FilesMatch>
On peut aussi limiter l’accès au répertoire en autorisant seulement certaines adresses IP. Pour
cela on peut ajouter au fichier .htaccess les lignes suivantes :
# Interdire l’acces par IP
<Limit GET POST>
order deny,allow
deny from all
allow from XX.XX.XX.XX
allow from YY.YY.YY.YY
</Limit>
Il faut cependant faire attention aux adresses dynamiques qui peuvent changer.
Introduction à Opencart
F. ABOUZAID 63
On peut aussi restreindre les accès par ftp en créant un fichier .ftpaccess qui fonctionne comme
un fichier .htaccess mais qui restreint la visibilité de certains répertoires à certains visiteurs par
ftp. Le contenu du fichier .ftpaccess ressemble à ceci :
DenyAll
Allow XX.XX.XX.XX
Allow YY.YY.YY.YY
6. Enlever l’indication “powered by OpenCart”
Cette précaution n’éloignera pas un pirate un tant soit peu informé, mais l’obligera à utiliser
d’autres moyens pour deviner le logiciel utilisé (http://builtwith.com/ par exemple).
7. Cacher les erreurs OpenCart
Les messages d’erreur sont utiles pour déboguer l’application. Mais à l’utilisation, ils peuvent
donner des indications aux pirates sur votre code. Pour désactiver les messages, on fait :
System->Settings->Edit Settings->Server changer "Display Errors" à "No".
8. Choisissez le bon hébergeur
Un hébergeur pas cher ne garantit certainement pas un haut niveau de sécurité!
9. D'autres astuces:
http://www.sitefixit.com/scripts/opencart/how-to-secure-your-opencart-website-improve-
opencart-security.php
Introduction à Opencart
F. ABOUZAID 64
Paiements
3. Allez dans Paypal à l’adresse https://developer.paypal.com/ et créez-vous 2 comptes en
Sandbox : Un business (pour le vendeur) et un autre personal (pour l’acheteur).
Vous devez auparavant avoir un compte Paypal réel.
2. Activez le module Paypal Standard dans ‘Payments’ :
Dans ce module , entrez vos données Paypal :
Introduction à Opencart
F. ABOUZAID 65
Changez le statut des commandes payées par Paypal :
Vous êtes prêt a réaliser une commande payée avec Paypal.
Introduction à Opencart
F. ABOUZAID 66
Une fois la commande terminée, allez à Sales->Orders. Vous devriez voir votre commande et son
statut.
Vous pouvez éditer la commande pour lui changer de statut, par exemple pour la faire passer de
‘pending’ à ‘completed’.
Si dans ce processus vous avez un message d’erreur du style ‘Warning: You do not have
permission to access the API!’, réinitialisez les permissions de votre groupe :
System > Users > User Groups > Administrator [edit] > choisissez ‘all Access and Permissions’
et cliquez sur ‘save’.
Introduction à Opencart
F. ABOUZAID 67
Les évènements
Les évènements (events) sont des méthodes appelées quand une action a lieu. En d'autres mots,
il est possible de définir spécifiquement le moment auquel la fonction personnalisée doit
s'exécuter dans l'application
Ce système évite les conflits qui peuvent être causés par OCMOD car il n'y a pas de manipulation
de fichiers existants.
Enregistrer un évènement :
La classe event est définie dans system/engine/event.php.
Elle propose 3 méthodes :
1. register pour enregistrer les évènements ;
2. unregister pour supprimer les évènements.
3. trigger pour déclencher un évènement. Un évènement peut avoir plusieurs
gestionnaires. Par exemple, 2 modules peuvent exécuter un évènement dans une file
(queue).
Les évènements sont ajoutés ainsi :
// Évènement
$event = new Event($registry);
$registry->set('event', $event);
$query = $db->query("SELECT * FROM " . DB_PREFIX . "event");
foreach ($query->rows as $result) {
$event->register($result['trigger'], $result['action']);
}
Les évènements sont déclenchés à chaque fois que le code suivant est exécuté :
$this->event->trigger('event_name', $args);
Ce qui veut dire que les gestionnaires pour cet évènement seront exécutés.
Par exemple, regardez à la ligne 98 du fichier :
catalog/model/extension/openbay/ebay_order.php:
$this->event-
>trigger('model/checkout/order/addOrderHistory/after',
array('model/checkout/order/addOrderHistory/after',
array($order_id, $this->default_paid_id)));
Introduction à Opencart
F. ABOUZAID 68
Ajouter ou supprimer un gestionnaire d'évènements dans un module :
Si vous regardez admin/model/setting/event.php, il y un modèle qui expose plusieurs
méthodes dont :
addEvent : pour ajouter un nouveau gestionnaire d'évènements qui a 3 paramètres:
- $code : code ou identifiant du gestionnaire (habituellement le nom du module). Il sert
aussi à supprimer l'évènement. Il doit être unique à votre module.
- $trigger : C'est l'appel fait aux fichiers contrôleur, modèle, vue, langage ou config
qui va être appelé ou chargé. Il a la forme suivante :
application/type/folder/file/method/before ou after
Où :
o application est catalog ou admin
o type est : controller, model, view, language, config
o folder est optionnel et indique le chemin pour trouver le fichier
o file est le fichier appelé
o method est uniquement utilisé avec controller ou model
o before/after indique si l'évènement est exécuté avant ou après que le
fichier ou la méthode sont chargés
- $action : Le gestionnaire qui sera appelé quand l'évènement sera déclenché. C'est
un objet qui contient dans son constructeur la route vers le contrôleur appelé. Dans ce
contrôleur il est possible de manipuler la route, les données, les arguments et les valeurs
de retour du contrôleur, modèle et vues appelées.
Exemple :
$this->model_setting_event->addEvent('bonjour',
'catalog/view/common/header/before','extension/module/bonjour/before
_view');
deleteEvent - pour supprimer le gestionnaire d'évènements.
Exemple :
$this->model_setting_event->deleteEvent('bonjour');
Il y a aussi : getEvent, enableEvent ou disableEvent.
On ajoutera ou supprimera le gestionnaire d'évènements dans les méthodes install et
uninstall du module.
Introduction à Opencart
F. ABOUZAID 69
Exemples d'utilisation :
• Exécuter une fonction avant que le header ne soit chargé,
• Ajouter du code html avant l'affichage du header, ...
Pratique : Remplacer le twig d'un layout par un autre.
En OCMOD on ferait:
<file name="catalog/controller/common/header.php">
<operation>
<search position="replace"><![CDATA return $this->load-
>view('common/header', $data);]]></search>
<add><![CDATA return $this->load->view('common/mon_header_perso',
$data);]]></add>
</operation>
</file>
Pour utiliser les évènements, on écrit 2 les fonctions suivantes :
- Code à exécuter quand l’évènement sera déclenché ;
- Code pour l’enregistrement et la suppression de l’évènement.
Le code à exécuter quand l’évènement sera déclenché, sera mis dans un contrôleur côté
catalog :
Fichier : catalog/controller/extension/module/bonjour.php
<?php
class ControllerExtensionModuleBonjour extends Controller {
… … …
public function before_view(&$route, &$data, &$output){
$route = str_replace('common/header',
'common/mon_header_perso', $route);
}
}
L'évènement est déclenché par le trigger suivant qui est contenu dans une fonction install du
contrôleur du module.
Introduction à Opencart
F. ABOUZAID 70
Dans le fichier admin/controller/extension/module/bonjour.php, on rajoute la fonction :
public function install() {
$this->load->model('setting/event');
$this->model_setting_event->addEvent('mon_header_perso',
'catalog/view/common/header/before',
'extension/module/bonjour/before_view');
}
Il est possible de vérifier que l'évènement est bien enregistré en allant à :
Extension-> Events
L'évènement est supprimé de l'application grâce à une méthode uninstall définie elle aussi
dans le contrôleur :
public function uninstall() {
$this->load->model ('setting/event');
$this->model_setting_event->deleteEvent('mon_header_perso');
}
Introduction à Opencart
F. ABOUZAID 71
Ajax dans Opencart
Exemple Simple :
Créez une copie du fichier :
catalog/view/theme/default/template/common/header_perso.twig
Et nommez-la : header_perso.twig
Dans ce fichier
1. Ajouter la ligne suivante
<a onClick="helloworld()" title="Test Hello World ">Cliquez!</a>
Après la ligne 78
2. Ajoutez le script suivant à la fin du fichier :
<script type="text/javascript">
function helloworld(){
$.ajax({
type: 'POST',
url: 'index.php?route=common/header/helloworld',
dataType: 'json',
success: function(json) {
if (json['error']) {
alert(json['error']);
}
if (json['message']) {
alert( json['message']);
}
}
});
} // Fin de helloworld()
</script>
A la fin du fichier catalog/controller/common/header.php, ajoutez le code suivant :
// Fonction pour tester Ajax
public function helloworld(){
$json = array();
$json["message"] = "Salut Toi!";
$this->response->setOutput(json_encode($json));
}
La page d’accueil devrait afficher un lien hypertexte qui cliqué, affiche le message.
Introduction à Opencart
F. ABOUZAID 72
Liens
http://www.transpacific-software.com/guide_install_opencart_extensions.html
http://code.tutsplus.com/tutorials/altering-the-core-of-opencart-using-vqmod--cms-22330
http://www.freshdesignweb.com/free-responsive-opencart-themes.html
http://www.opencartworld.com/ : Recherche améliorée d'extensions.
Ajouter une position
http://www.dynamicwebsoft.net/opencart-thems-free/
https://www.mywork.com.au/blog/create-new-module-layout-position-opencart-1-5/
Développer une extension
http://code.tutsplus.com/articles/from-beginner-to-advanced-in-opencart-more-module-
development--cms-22289
Liste des fonctions :
http://cartadvisor.com/blog/2013/12/04/opencart-global-functions-developer-cheatsheet/
Technologies utilisées
http://builtwith.com/
Expressions régulières
http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/
Site de la maison du café (idée de thème à développer)
http://www.lamaisonduboncafe.com/the-blanc-imperial.html
Ajouter une table à l'installation
http://www.kvcodes.com/2013/11/creating-table-while-installing-module-in-opencart/
Créer un formulaire de saisie
http://forum.opencart.com/viewtopic.php?t=53452

Contenu connexe

Tendances

Cours d'access
Cours d'accessCours d'access
Cours d'accessaubin82
 
La base de données Oracle
La base de données OracleLa base de données Oracle
La base de données OracleBruno Delb
 
Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...
Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...
Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...Enrico Flaccovio
 
Crown sp3400 (four point) series forklift service repair manual
Crown sp3400 (four point) series forklift service repair manualCrown sp3400 (four point) series forklift service repair manual
Crown sp3400 (four point) series forklift service repair manualfhhsjdkmem
 
Cctp ca 20101209
Cctp ca 20101209Cctp ca 20101209
Cctp ca 20101209leo1971
 
Debutez dans-la-3d-avec-blender
Debutez dans-la-3d-avec-blenderDebutez dans-la-3d-avec-blender
Debutez dans-la-3d-avec-blenderAbd Elfetah
 
La stratégie du choc naomi klein
La stratégie du choc   naomi kleinLa stratégie du choc   naomi klein
La stratégie du choc naomi kleinMMenier
 
Administration Base de données Oracle
Administration Base de données OracleAdministration Base de données Oracle
Administration Base de données OracleAndrianaivo Lovatiana
 
Unit 3 - Jun 11 Question Paper
Unit 3 - Jun 11 Question PaperUnit 3 - Jun 11 Question Paper
Unit 3 - Jun 11 Question Papermattbentley34
 
Crown tsp6000 series turret order picker service repair manual
Crown tsp6000 series turret order picker service repair manualCrown tsp6000 series turret order picker service repair manual
Crown tsp6000 series turret order picker service repair manualjfksekmmdme
 

Tendances (15)

Deviens un Ninja avec Angular2
Deviens un Ninja avec Angular2Deviens un Ninja avec Angular2
Deviens un Ninja avec Angular2
 
Tp sgbd gsi
Tp sgbd gsiTp sgbd gsi
Tp sgbd gsi
 
Cours d'access
Cours d'accessCours d'access
Cours d'access
 
Oracle 11g exploitation
Oracle 11g exploitationOracle 11g exploitation
Oracle 11g exploitation
 
Rapport finale
Rapport finaleRapport finale
Rapport finale
 
La base de données Oracle
La base de données OracleLa base de données Oracle
La base de données Oracle
 
Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...
Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...
Indice di "Manuale del perfetto Web Designer con Joomla!" di Carlotta Silvest...
 
Crown sp3400 (four point) series forklift service repair manual
Crown sp3400 (four point) series forklift service repair manualCrown sp3400 (four point) series forklift service repair manual
Crown sp3400 (four point) series forklift service repair manual
 
Cctp ca 20101209
Cctp ca 20101209Cctp ca 20101209
Cctp ca 20101209
 
Debutez dans-la-3d-avec-blender
Debutez dans-la-3d-avec-blenderDebutez dans-la-3d-avec-blender
Debutez dans-la-3d-avec-blender
 
La stratégie du choc naomi klein
La stratégie du choc   naomi kleinLa stratégie du choc   naomi klein
La stratégie du choc naomi klein
 
Administration Base de données Oracle
Administration Base de données OracleAdministration Base de données Oracle
Administration Base de données Oracle
 
Unit 3 - Jun 13
Unit 3 - Jun 13Unit 3 - Jun 13
Unit 3 - Jun 13
 
Unit 3 - Jun 11 Question Paper
Unit 3 - Jun 11 Question PaperUnit 3 - Jun 11 Question Paper
Unit 3 - Jun 11 Question Paper
 
Crown tsp6000 series turret order picker service repair manual
Crown tsp6000 series turret order picker service repair manualCrown tsp6000 series turret order picker service repair manual
Crown tsp6000 series turret order picker service repair manual
 

Similaire à Opencart

Les bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlLes bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlZineb Meryem
 
Le langage Pascal
Le langage PascalLe langage Pascal
Le langage PascalBruno Delb
 
gestion de notariat avec openerp
gestion de notariat avec openerpgestion de notariat avec openerp
gestion de notariat avec openerpHORIYASOFT
 
The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88Mahmoud Samir Fayed
 
INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE HINDOUSSATI
 
Manuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEMManuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEMGrégoire Dupont
 
Cadre commun d'urbanisation du SI de l'etat v1.0
Cadre commun d'urbanisation du SI de l'etat v1.0Cadre commun d'urbanisation du SI de l'etat v1.0
Cadre commun d'urbanisation du SI de l'etat v1.0ACDISIC
 
courspython3.pdf
courspython3.pdfcourspython3.pdf
courspython3.pdfDendouga1
 
The Ring programming language version 1.7 book - Part 1 of 196
The Ring programming language version 1.7 book - Part 1 of 196The Ring programming language version 1.7 book - Part 1 of 196
The Ring programming language version 1.7 book - Part 1 of 196Mahmoud Samir Fayed
 
The Ring programming language version 1.4 book - Part 1 of 30
The Ring programming language version 1.4 book - Part 1 of 30The Ring programming language version 1.4 book - Part 1 of 30
The Ring programming language version 1.4 book - Part 1 of 30Mahmoud Samir Fayed
 
Support formation vidéo : Outlook 2016 - Maîtriser les bases
Support formation vidéo : Outlook 2016 - Maîtriser les basesSupport formation vidéo : Outlook 2016 - Maîtriser les bases
Support formation vidéo : Outlook 2016 - Maîtriser les basesSmartnSkilled
 
Assembleur et binaire
Assembleur et binaireAssembleur et binaire
Assembleur et binaireBruno Delb
 

Similaire à Opencart (20)

Les bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlLes bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sql
 
Le langage Pascal
Le langage PascalLe langage Pascal
Le langage Pascal
 
Manuel 3
Manuel 3Manuel 3
Manuel 3
 
Manuel 3
Manuel 3Manuel 3
Manuel 3
 
gestion de notariat avec openerp
gestion de notariat avec openerpgestion de notariat avec openerp
gestion de notariat avec openerp
 
Complet
CompletComplet
Complet
 
The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88
 
INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE
 
Manuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEMManuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEM
 
Bureautique
BureautiqueBureautique
Bureautique
 
Cadre commun d'urbanisation du SI de l'etat v1.0
Cadre commun d'urbanisation du SI de l'etat v1.0Cadre commun d'urbanisation du SI de l'etat v1.0
Cadre commun d'urbanisation du SI de l'etat v1.0
 
19
1919
19
 
courspython3.pdf
courspython3.pdfcourspython3.pdf
courspython3.pdf
 
The Ring programming language version 1.7 book - Part 1 of 196
The Ring programming language version 1.7 book - Part 1 of 196The Ring programming language version 1.7 book - Part 1 of 196
The Ring programming language version 1.7 book - Part 1 of 196
 
The Ring programming language version 1.4 book - Part 1 of 30
The Ring programming language version 1.4 book - Part 1 of 30The Ring programming language version 1.4 book - Part 1 of 30
The Ring programming language version 1.4 book - Part 1 of 30
 
Cbdsys 2
Cbdsys 2Cbdsys 2
Cbdsys 2
 
Support formation vidéo : Outlook 2016 - Maîtriser les bases
Support formation vidéo : Outlook 2016 - Maîtriser les basesSupport formation vidéo : Outlook 2016 - Maîtriser les bases
Support formation vidéo : Outlook 2016 - Maîtriser les bases
 
Guide administrateur rubedo 3x
Guide administrateur rubedo 3xGuide administrateur rubedo 3x
Guide administrateur rubedo 3x
 
Assembleur et binaire
Assembleur et binaireAssembleur et binaire
Assembleur et binaire
 
Jmetertest
JmetertestJmetertest
Jmetertest
 

Dernier

Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxAsmaa105193
 
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIEBONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIEgharebikram98
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxrababouerdighi
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxMartin M Flynn
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 

Dernier (14)

Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. Marocpptx
 
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIEBONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
BONNES PRATIQUES DE FABRICATION RESUME SIMPLIFIE
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptx
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptx
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 

Opencart

  • 1. Introduction à Opencart F. ABOUZAID 1 Introduction à Opencart Sommaire Sommaire Introduction à Opencart.................................................................................................................. 1 Sommaire ........................................................................................................................................ 1 Solutions Web en commerce électronique..................................................................................... 5 1. Avantages d’un site de commerce électronique................................................................. 5 2. Fonctions d’un logiciel de commerce électronique ............................................................ 5 Magento: magento.com/........................................................................................................ 6 Drupal Commerce : drupalcommerce.org............................................................................... 7 VirtueMart : http://virtuemart.net/........................................................................................ 7 WooCommerce: http://www.woothemes.com/woocommerce/......................................... 8 Prestashop : https://www.prestashop.com/fr ............................................................... 8 OpenCart : www.opencart.com/............................................................................................ 9 Installation d’Opencart.................................................................................................................. 12 Pratique 1 : Installer et configurer OpenCart ........................................................................ 12 Quelques manipulations supplémentaires ............................................................................... 14 Architecture de OpenCart ............................................................................................................. 18 1. La structure de fichiers...................................................................................................... 18 2. Le routage dans Opencart................................................................................................. 18 3. Les bibliothèques............................................................................................................... 19 4. Les Langues........................................................................................................................ 19 Pratique : ................................................................................................................................... 20 Ajouter une langue dans OpenCart....................................................................................... 20 5. MVC ................................................................................................................................... 21 1. Contrôleurs........................................................................................................................ 21
  • 2. Introduction à Opencart F. ABOUZAID 2 2. Modèles............................................................................................................................. 21 3. Vues................................................................................................................................... 21 6. Le modèle MVC dans OpenCart ........................................................................................ 22 1. Les contrôleurs .............................................................................................................. 22 2. Les Vues......................................................................................................................... 23 Les modules : développement ...................................................................................................... 24 1. Le Contrôleur.................................................................................................................. 25 2. La Vue................................................................................................................................ 25 3. Le Modèle.......................................................................................................................... 26 4. Exemple pratique : ............................................................................................................ 27 5. Fonctions de la Base de données : .................................................................................... 28 6. Variables réservées ........................................................................................................... 29 Créer une nouvelle page dans OpenCart ...................................................................................... 30 1. Exemple 1: Simple sans modèle........................................................................................ 30 2. Exemple 2: Avec modèle et accès à la BD ......................................................................... 31 vQmod........................................................................................................................................... 37 OCMOD.......................................................................................................................................... 37 Différences entre OCMOD et VQMOD....................................................................................... 37 Fichiers OCMOD .................................................................................................................... 37 Structure de fichiers .............................................................................................................. 38 XML........................................................................................................................................ 38 Installation et utilisation :...................................................................................................... 39 Balises :.................................................................................................................................. 39 Exercices d'utilisation d’OCMOD............................................................................................... 42 Ajouter une langue dans OpenCart............................................................................................... 43 Activer les URLs SEO dans OpenCart............................................................................................. 45 Gérer les thèmes ........................................................................................................................... 47 1. Changer de thème................................................................................................................. 47
  • 3. Introduction à Opencart F. ABOUZAID 3 2. Structure du répertoire des thèmes...................................................................................... 48 Contenu du répertoire Template .......................................................................................... 48 3. Créer un Thème personnalisé ............................................................................................... 49 Développer le nouveau thème.................................................................................................. 49 4. Comprendre les "Layout Templates" .................................................................................... 52 Templates de module............................................................................................................ 52 Composant communs du Layout Template........................................................................... 52 Assigner un module à partir du Back-End ............................................................................. 54 Changer le Layout de la page d'accueil ................................................................................. 54 Changement dans le fichier Layout....................................................................................... 54 Les layouts dans Opencart ............................................................................................................ 56 Dispositions (Layouts) .............................................................................................................. 56 Dispositions par défaut.............................................................................................................. 56 Créer un nouveau Layout .......................................................................................................... 57 Cas pratique........................................................................................................................... 57 Améliorer la sécurité de OpenCart................................................................................................ 60 1. Supprimer le répertoire d’installation............................................................................... 60 2. Déplacer le répertoire storage comme conseillé à la connexion en mode admin :.......... 60 3. Protéger les fichiers de configuration ............................................................................... 60 4. Changer le repertoire admin............................................................................................. 61 5. Protéger le répertoire admin avec un mot de passe......................................................... 61 6. Enlever l’indication “powered by OpenCart”.................................................................... 63 7. Cacher les erreurs OpenCart ............................................................................................ 63 8. Choisissez le bon hébergeur.............................................................................................. 63 9. D'autres astuces: ............................................................................................................... 63 Paiements...................................................................................................................................... 64 Les évènements............................................................................................................................. 67 Enregistrer un évènement :................................................................................................... 67
  • 4. Introduction à Opencart F. ABOUZAID 4 Ajouter ou supprimer un gestionnaire d'évènements dans un module : ............................. 68 Ajax dans Opencart ....................................................................................................................... 71 Liens............................................................................................................................................... 72
  • 5. Introduction à Opencart F. ABOUZAID 5 Solutions Web en commerce électronique Il est nécessaire d’utiliser un magasin virtuel pour attirer une partie de ses acheteurs et accroître ses ventes Ces solutions sont adaptées aussi bien aux entreprises qui font affaire avec des consommateurs (B2C) ou du commerce interentreprises (B2B). Les logiciels de commerce électronique permettent de créer simplement une boutique en ligne. 1. Avantages d’un site de commerce électronique • Vendre des produits et services en ligne, avec un investissement initial minime • Faciliter, augmenter et accélérer les ventes • Atteindre les clients 24 heures sur 24, sept jours sur sept • Étendre la portée géographique de l’entreprise • Améliorer la visibilité en ligne de l’entreprise • Diminuer les frais de service à la clientèle • Automatiser certaines fonctions et offrir un accès libre-service aux clients • Renforcer la fidélisation de la clientèle • Vendre des produits sans maintenir des stocks physiques 2. Fonctions d’un logiciel de commerce électronique Une vitrine de commerce électronique de base est un système en ligne qui permet aux clients de faire leur magasinage en simplifiant le processus de commandes. Un logiciel de CE de base doit fournir les fonctionnalités suivantes : • Création d’une boutique en ligne avec un panier d’achat virtuel (cart) • Possibilité de recevoir des paiements en ligne par PayPal et/ou avec les principales cartes de crédit • Catalogue de produits en ligne • Optimisation du référencement pour un meilleur classement dans les moteurs de recherche • Contrôle automatique des stocks et mise en place un système de suivi • Rapports et de statistiques pour analyser le rendement • Techniques de marketing en ligne : publicité interactive, le marketing par courriel, les médias sociaux ou le marketing mobile.
  • 6. Introduction à Opencart F. ABOUZAID 6 Présentation de quelques Solutions de e-commerce Magento: magento.com/ Leader mondial sur son marché et propriété d’eBay, Magento est une solution flexible qui permet de répondre à une grande variété de besoins. Riche en extensions et fonctionnalités (plus de 350), Magento offre notamment : - Un outil de suggestion de produits avec commentaires et notations - Mise en avant des promotions et du merchandising en fonction des cibles de client - Segmentation de clients - SEO - Option de paiement et de méthode de livraison multiples Depuis sa création en 2008 aux États-Unis, plus de 262 000 boutiques (à la date de novembre 2017, source Builtwith1 ) ont été créées sous Magento avec des clients célèbres tels que The North Face, Zadig&Votltaire ou encore les boutiques australiennes et anglaises de Nike. Magento est une des solutions open source les plus puissantes et populaires du moment. Mais c’est aussi une des solutions les plus complexes à maîtriser et à paramétrer qui nécessite de nombreuses connaissances techniques voire un spécialiste Magento en interne. Il semble donc judicieux de ne se tourner vers cette solution que pour réaliser des projets ambitieux au budget adapté. Forces • Très personnalisable • Multi-langues, multidevises, multi-boutiques • Idéal pour un usage en entreprise Faiblesses: • Extensions coûteuses • Hébergement coûteux • Difficile à apprendre 1 https://trends.builtwith.com/websitelist/Magento
  • 7. Introduction à Opencart F. ABOUZAID 7 Drupal Commerce : drupalcommerce.org La version 1.0 a été annoncée au DrupalCon de 2011. La dernière version en date (novembre 2017) est la version 2.0 pour Drupal 8. Pour voir les statistiques d’utilisation : https://www.drupal.org/project/usage/commerce Forces: - Repose sur un CMS robuste - Complètement personnalisable (+ 16 000 modules additionnels disponibles). - Solution flexible - La communauté Drupal Inconvénients: - Nécessite de maîtriser Drupal. Statistiques : https://trends.builtwith.com/shop/Drupal-Commerce VirtueMart : http://virtuemart.net/ VirtueMart est une solution open source écrite en PHP, basée sur le framework Joomla! Forces: - Communauté Joomla Faiblesses - Seulement une soixantaine d'extensions - faible en matière de fonctions avancées, surtout en B2B. Statistiques : https://trends.builtwith.com/shop/VirtueMart
  • 8. Introduction à Opencart F. ABOUZAID 8 WooCommerce: http://www.woothemes.com/woocommerce/ Une solution qui fonctionne sous WordPress et qui profite donc de son écosystème: vous avez à votre disposition le très grand nombre de thèmes et plugins WordPress disponibles. WooCommerce est relativement jeune (2011) mais bénéficie de tous les avantages de WordPress. Forces: • Basé sur WordPress • Gratuit • Facilité d'utilisation Faiblesses: • Les extensions de base sont insuffisantes et nécessite l'achat de plugins premium payants. • Nécessite la maîtrise de WordPress. Statistiques WooCommerce : https://trends.builtwith.com/shop/WooCommerce Prestashop : https://www.prestashop.com/fr Avec plus de 250 000 sites de e-commerce utilisant la solution française Prestashop, il s’agit de loin l’outil le plus utilisé en France ! La grande force de l’outil est de proposer un grand nombre de thèmes et de plugins adaptés selon les situations et besoins spécifiques. Le point négatif se trouve au niveau des plugins payants et d’une faible optimisation SEO. Statistiques Prestashop : https://trends.builtwith.com/shop/PrestaShop
  • 9. Introduction à Opencart F. ABOUZAID 9 OpenCart : www.opencart.com/ OpenCart a fait son apparition récemment sur le marché des solutions e-commerce open source et s’est fait remarquer par sa facilité d’installation et ses nombreux avantages : • Multi-langues, multidevises, multi-boutiques • Possibilité de noter et commenter les produits • SEO • Outil de back-up et de restauration de la boutique Crée en 2010 aux États-Unis, OpenCart a par exemple été choisi par The British Red Cross (http://giftshop.redcross.org.uk/ ) et est actuellement la solution open source qui monte. OpenCart est particulièrement adapté pour les projets des start-ups et des petits e- commerçants mais nécessite de bonnes compétences en matière de langage PHP. C'est la solution open source qui monte en ce moment. http://www.opencart.com/index.php?route=feature/liveshop Forces: • Facilité d'utilisation • Extensions et thèmes gratuits ou peu coûteux • Interface d'administration agréable • Documentation Faiblesses: • Qualité du code • Complexe à personnaliser Statistiques Opencart : https://trends.builtwith.com/shop/OpenCart Comparatif OpenCart vs Prestashop vs Magento : https://pmesolution.ca/boutique-en-ligne-opencart-vs-prestashop-vs-magento/
  • 10. Introduction à Opencart F. ABOUZAID 10 Synthèse des performances Solution Faiblesse du coût Facilité de prise en main par un développeur Personnalisation Magento +++ ++ ++ PrestaShop +++++ +++ + Drupal Commerce +++++ ++++ ++ IBM Websphere Commerce ++ ++++ +++ Intershop +++ ++++ +++ Opencart +++++ +++ ++ Oracle ATG Web Commerce + +++++ +++++ VirtueMart +++++ +++ ++ Zen cart +++++ + + Source : http://www.journaldunet.com/solutions/saas-logiciel/comparatif-des-solutions-de-e-commerce/
  • 11. Introduction à Opencart F. ABOUZAID 11 Tendances des logiciels e-commerce : Google Trends http://www.google.com/trends/explore?q=oscommerce%2C+Zen+Cart%2C+Magento%2C+PrestaShop%2 C+OpenCart#q=oscommerce%2C%20Zen%20Cart%2C%20Magento%2C%20PrestaShop%2C%20OpenCart &cmpt=q Quelques références : http://www.ecommerce-nation.fr/quelle-solution-choisir-pour-vous-lancer-dans-le-e- commerce/ https://www.pme-web.com/creer-site-e-commerce-5-outils-incontournables/ https://www.codeur.com/comparatifs/solution/opencart/
  • 12. Introduction à Opencart F. ABOUZAID 12 Installation d’Opencart Pratique 1 : Installer et configurer OpenCart 1. Téléchargez la dernière version d’OpenCart à l’adresse : http://www.opencart.com/index.php?route=download/download 2. Copiez le répertoire Opencart dézippé sur votre serveur 3. Renommez les fichiers config-dist.php dans les répertoires upload et upload/admin en config.php 4. Allez à PhpMyAdmin et créer une BD Opencart 5. Lancez Opencart sur votre navigateur : http://127.0.0.1/projects/opencart-2.x/upload/ important : Si l’erreur ‘Call to undefined function openssl_random_pseudo_bytes()’ apparait , décommentez la ligne extension=php_openssl.dll dans le fichier php.ini. 6. Remplissez les informations demandées. Par mesure de sécurité (dans le cas d’une installation réelle) il faut changer le préfixe des tables dans la BD et éviter d’utiliser admin comme nom d’administrateur 7. Le site est opérationnel. Configuration : 1. Précisez les options de votre boutique: - Nom de la boutique - Nom du propriétaire - Adresse: Adresse physique de la boutique - E-Mail: Par défaut l'adresse de l'administrateur. On peut préciser une adresse propre à la boutique - Téléphone - Fax - Logo : Changer le logo de la boutique - Localisation: Québec - Canada - Devise: Ajouter le dollar canadien - Désactiver la livre anglaise et l'euro, puis mettre le $ canadien comme devise par défaut. o System  Localisation  Currency - Afficher les prix hors-taxe 2. Définissez les zones géographiques pour les taxes: - Québec pour TVQ+TPS - Amérique du Nord pour TPS 3. Définissez le montant de la taxe - TVQ : 10% - TPS: 5%.
  • 13. Introduction à Opencart F. ABOUZAID 13 4. Supprimez les produits et les catégories existants. Puis créer vos propres produits avec leur intitulé et leur description en anglais pour l'instant. - Créez des catégories pour vos produits - Créez des fabricants - Mettez quelques produits en promotion (Rabais sur les prix) - Mettez quelques produits en vedette (featured) 5. Créez un ou 2 utilisateurs et vérifiez que vous pouvez mener une opération de commande jusqu'à la fin. Vérifiez surtout les taxes et le prix de la livraison. Pour la livraison assurez-vous que vous proposez la possibilité de récupérer les produits à la boutique. 6. Assurez le suivi de la commande en la complétant, quand le paiement est reçu. 7. Installez un nouveau thème pour la boutique. - Téléchargez un thème gratuit sur http://www.opencart.com/index.php?route=extension/extension - Lisez install.txt qui vient généralement avec le thème pour copier le thème sur le site. Puis: - System SettingsÉditer la boutique  Onglet StoreTemplate puis changer pour le template installé.
  • 14. Introduction à Opencart F. ABOUZAID 14 Quelques manipulations supplémentaires - Bannières Vous pouvez créer une bannière : Design -> Banners puis cliquez sur + (en haut à droite) puis sur ‘Add Banner’. Donnez un nom à la bannière et remplissez-la des produits que vous désirez y mettre. Pour la placer dans la page d’accueil : Extensions -> Modules. Choisissez le module SlideShow et éditez ‘Home Page’. Choisissez la bannière nouvellement créée et sauvegarder le tout. Elle devrait apparaître dans la page d’accueil. - Modifier le carousel de fabricants Aller à bannières et modifiez la liste des produits dans la bannière ‘manufacturers’.
  • 15. Introduction à Opencart F. ABOUZAID 15 - Produits en vedette (featured) Extensions -> Modules. Éditez le module Home page en y rajoutant les produits que vous voulez mettre en vedette. - Spéciaux Catalog->Produits. Éditez le produit à mettre en spécial en allant dans l’onglet ‘Special’ et entrez le prix promotionnel et les dates de début et de fin :
  • 16. Introduction à Opencart F. ABOUZAID 16 - Dashboard On peut modifier l’affichage dans le Dashboard en activant ou en désactivant ses éléments dans le module de gestion des extensions : - Installer un nouveau thème Téléchargez le thème puis copier les fichiers tel qu’indiqué dans les directives du thème. Ensuite l’installer : Extensions -> Thèmes () puis éditez votre boutique. Choisissez ensuite le répertoire du thème à installer et définissez les paramètres.
  • 17. Introduction à Opencart F. ABOUZAID 17 Custom theme In the 2.3.x version is a bit more complicated. The following is a step by step. 1. Download the files. • admin/controller/theme/theme_default.php • admin/language/english/theme/theme_default.php • admin/view/template/theme/theme_default.tpl • catalog/view/theme/default/* //Download the entire folder 2. Rename files from the folder admin/* of theme_default to "theme_custom". 3. Rename the folder catalog/view/theme/default to custom 4. Open the file admin/controller/theme/theme_default.php and replace all words default tocustom. 5. Create a folder called upload and move all the folders downloaded in step 1 into it. 6. Zip and rename it to custom.ocmod.zip and send through the OC installer. http://stackoverflow.com/questions/39287147/opencart-2-3-0-2-new-custom-theme-not- available-in-the-admin-panel
  • 18. Introduction à Opencart F. ABOUZAID 18 Architecture de OpenCart 1. La structure de fichiers La structure de fichiers d’OpenCart est simple. admin: contient les contrôleurs, modèles, vues et fichier langages pour l‘administration; catalog : contient les mêmes fichiers mais pour le frontend (côté client); images : contient les images du site; system : contient le noyau d’OpenCart. On ne touchera jamais aux fichiers de ce répertoire. Le répertoire install doit être supprimé juste après l’installation. 2. Le routage dans Opencart. Le système de routage est assez simple: les routes d'URL ressemblent à ceci: route=aa/bb. La chaîne de connexion (query string) est constituée d’au moins 2 parties qui indiquent au framework ce qu’il doit charger. Dans une architecture MVC, cela fonctionne comme ceci: D’abord le contrôleur est chargé en mémoire; dans notre cas, il est identifié par les 2 premiers paramètres de la chaîne de connexion. La première partie identifie le répertoire et la seconde le nom du fichier contrôleur (sans son extension). La route donnée en exemple correspond donc au fichier: (STORE ROOT DIRECTORY)/catalog/controller/aa/bb.php On accède ainsi à la page d’accueil par : Opencart30/upload/index.php?route=common/home Ou à un produit par : Opencart30/upload/index.php?route=product/product&product_id=30
  • 19. Introduction à Opencart F. ABOUZAID 19 3. Les bibliothèques Ce sont des bibliothèques prédéfinies qui sont essentielles pour aider au développement d’extensions pour Opencart. La syntaxe générale pour charger en mémoire une bibliothèque est la suivante: $this->library_name. Elles se trouvent dans le répertoire : system/library. Exemple, pour connecter par programme un utilisateur, on écrira: $this->user->login($username,$password); La déconnexion se faisant par $this->user->logout();. Des exemples de bibliothèques souvent utilisées: • cart.php pour gérer le panier; • image.php : fonctions relatives aux images telles que la retouche ou la mise en cache; • customer.php : fonctions relatives aux clients; • config.php est responsable du chargement de tous les paramètres d’OpenCart; • user.php fonctions pour la gestion de l’administrateur et des utilisateurs. Nous reviendrons sur l'utilisation de ces bibliothèques. 4. Les Langues Les fichiers de langues sont dans catalog/language. Ce répertoire contient autant de sous- répertoires qu’il y a de langues pour votre site. Soit par exemple le répertoire en-gb pour l’anglais. Les valeurs utilisées dans toutes les pages du site sont dans le fichier en-gb.php. Pour ajouter une nouvelle valeur on utilise la syntaxe : $_['language_key']='This is test';. Pour certaines pages spéciales, les fichiers de langues sont dans des répertoires particuliers. Par exemple pour la page d’erreurs : catalog/language/en-gb/error/not_found.php . Un fichier de langue est chargé dans le contrôleur de la manière suivante : $this->load->language('common/header'); On utilise alors la fonction "get" pour récupérer une valeur dans le langage choisi : $this->language->get('language_key'); Note: Les valeurs dans le fichier langage global en-gb/en-gb.php sont automatiquement chargées et disponibles sans faire $this->language->load .
  • 20. Introduction à Opencart F. ABOUZAID 20 Pratique : Ajouter une langue dans OpenCart 1. Téléchargez une extension pour la langue souhaitée. 2. Dézippez le fichier téléchargé dans le répertoire principal de votre boutique. Vérifiez s'il y a un répertoire upload dans l'archive ; si c'est le cas, copiez le contenu de ce répertoire. Sinon, recopiez le répertoire de langue dans upload/catalog/language. 3. Allez à Système>Localisation>Langues , puis cliquez sur Ajouter 4. Remplissez le formulaire comme suit (pour le français) : Vous devriez voir apparaître sur votre site une liste déroulante proposant les 2 langues. Vous devez bien entendu fournir toutes les informations sur vos produits et vos catégories dans les 2 langues. Exemple d’extension qui marche pour la version 2.3 et incomplètement pour la version 3. http://www.opencart.com/index.php?route=extension/extension/info&extension_id=26504& filter_search=french&filter_license=0&filter_download_id=44
  • 21. Introduction à Opencart F. ABOUZAID 21 5. MVC C’est un patron d’architecture très utilisé dans les applications modernes et la plupart des CMS. C’est un modèle à 3 couches : contrôleur, modèle et vues qui sont reliées entre elles de la manière suivante : 1. Contrôleurs Un contrôleur gère le flot d’exécution de l’application. C’est la porte d’entrée et toute requête de l’utilisateur passe par un contrôleur. Le contrôleur choisit le modèle à invoquer pour exécuter la requête. A la réception des données, il choisit ensuite la vue qui affichera ces données pour l’utilisateur. 2. Modèles Ils gèrent la logique métier de l’application et fournissent les données récupérées par des requêtes SQL par exemple. Le modèle ne peut pas être directement invoqué. Il faut passer par un contrôleur qui transmet la requête de l’utilisateur au modèle approprié, qui lui retransmet les données en retour. 3. Vues Les vues constituent l’interface utilisateur de l’application. Dans une application web, elles contiennent du HTML, du CSS, du JavaScript, du XML ou du JSON, etc. Les vues sont visibles à l’utilisateur contrairement aux modèles et aux contrôleurs.
  • 22. Introduction à Opencart F. ABOUZAID 22 6. Le modèle MVC dans OpenCart 1. Les contrôleurs Pour comprendre le fonctionnement du contrôleur, nous allons faire quelques manipulations : 1. Créez un répertoire vide appelé test dans le répertoire des contrôleurs : catalog/controller/test. 2. Créez un fichier PHP abc.php dans le répertoire test : i.e.,catalog/controller/test/abc.php. Écrivez le code suivant dans abc.php : <?php class ControllerTestAbc extends Controller{ public function index() { echo 'Bonjour le monde!'; exit; } } ?> Dans cet exemple, il y a un certain nombre de contraintes imposées par le Framework OpenCart que le développeur doit obligatoirement respecter : • Le nom de la classe contrôleur doit suivre le format suivant : Controller(NomRépertoire)(NomFichier). Ces noms doivent obligatoirement commencer par une majuscule et ne pas contenir d’extension. Exemple : class ControllerProductProduct extends Controller • La méthode index() est la fonction principale du contrôleur et sera exécutée automatiquement quand celui-ci sera appelé. • index() doit être publique. • Pas de HTML, JavaScript, ou CSS dans le contrôleur. Dans le navigateur tapez l’URL: http://localhost/Opencart/index.php?route=test/abc Quel est le résultat?
  • 23. Introduction à Opencart F. ABOUZAID 23 2. Les Vues En suivant l'adresse: http://localhost/opencart/index.php?route=common/home on aboutit au code du contrôleur ControllerCommonHome situé dans catalog/controller/common/home.php. Les objets membres du contrôleur notamment document sont initialisés dans index.php. Le titre est initialisé à "config_meta_title" dont la valeur vient du fichier index.php qui a fait un appel à la fonction $this->config->get('config_meta_title') qui le charge à partir de la BD (table setting). Ensuite s'iI existe des vues enfant de cette vue principale, elles sont à leur tour chargées en utilisant le code suivant : Ensuite, le template (la vue) est chargé grâce aux lignes suivantes : On lui transmet les données à afficher dans le paramètre $data.
  • 24. Introduction à Opencart F. ABOUZAID 24 Les modules : développement Hiérarchie des fichiers et répertoires des modules Opencart 2.3 – 3.0: Tous les modules nécessitent au moins un fichier dans les 2 répertoires view et controller. La plupart vont nécessiter un fichier dans les répertoires model et language. Tous ces fichiers ont le même nom sauf la vue qui a un suffixe différent (.tpl pour les versions 2.x et twig depuis la version 3).
  • 25. Introduction à Opencart F. ABOUZAID 25 1. Le Contrôleur Le premier fichier à écrire est le contrôleur pour la page d'interface d'administrateur du module. OpenCart identifie automatiquement les modules existants, simplement en lisant le répertoire admin/controller/extension/module du site. Les modules existants dans ce dossier seront automatiquement affichés sur la page Modules. Le contrôleur est l'endroit où sont chargés les fichiers de langue qui permettent de convertir du texte en variables qui seront utilisées dans le modèle. Une variable $data['text'] est récupérée par le contrôleur, puis envoyée en tant que $text (ou text en twig) à la vue. On peut également utiliser des fichiers de modèles et leurs multiples fonctions ici, y compris le fichier de modèle du module s'il y en a un. On définit généralement une fonction publique install() qui sera déclenchée lors de l'installation du module (page Extensions> Modules). De même, on définira une fonction publique de désinstallation (uninstall()). Ces fonctions seront utilisées pour créer et supprimer des structures (comme les tables de base de données ou des paramètres de configuration) requis par le module. C'est une bonne pratique de créer une fonction de désinstallation qui nettoiera tous les changements que le module a fait. Voir par exemple le fichier admin/controller/extension/module/pp_login.php. URL Le contrôleur est le seul fichier en MVC-L à être accédé par URL. Pour l'administration, l'URL sera /admin/index.php?route=module/mon_module&token. Un lien vers l'administration aura un jeton (token) ajouté à l'URL, alors que le lien vers le catalogue n'en aura pas. Le contrôleur possède une fonction publique index() qui est appelée automatiquement. C'est une «page» accessible au public qui est chargée par l'URL, qui sera affichée lorsque le bouton Modifier est cliqué, et où sera le formulaire qui sera soumis. Les données soumises seront traitées dans cette fonction et enregistrées dans la table Settings de la BD à travers l'objet de configuration du contrôleur. 2. La Vue Le deuxième fichier requis pour l'interface d'administration du module est le fichier de vue. Ce fichier est créé dans le répertoire admin/view/template/extension/module, et aura le suffixe .twig (dans la version 3.0). Dans ce fichier, on peut créer un formulaire qui sera soumis à la fonction index() du contrôleur du module. La meilleure façon de créer un fichier de vue est de copier et coller, un fichier de vue similaire existant et d'en modifier la forme pour l'adapter au module en développement. Dans la vue, on peut accéder aux différents libellés des champs que le contrôleur a stockés comme une variable PHP. Voir par exemple le fichier admin/view/template/extension/module/bestseller.twig.
  • 26. Introduction à Opencart F. ABOUZAID 26 3. Le Modèle Il est rare que les modules nécessitent un fichier de modèle du côté admin. Toutefois, si votre module nécessite sa propre table de base de données ou une requête personnalisée pour créer des données d'un format particulier, alors vous devrez écrire un fichier de modèle pour l'administration du module. Le fichier modèle sera créé dans admin/model/module. Fonctionnalité côté client du module L'interface du module suit le même schéma que l'interface d'administration qui vient d'être décrite. Comme un module peut accéder à tous les fichiers de modèles qui existent déjà dans OpenCart, il n'est pas nécessaire d'écrire vos propres requêtes de base de données si la même requête existe déjà. Par exemple, le fichier catalog/product contient de nombreuses requêtes utiles pour aller chercher les produits. L'utilisation de ces fonctions de modèle doit être préférée à ses propres fonctions. Le fichier de vue sera dans le répertoire catalog/view/theme/<nomtheme>/template/ extension/module. Une boutique OpenCart peut avoir plusieurs thèmes différents côté client, mais un seul modèle d'administration. Création automatique des tables Dans le contrôleur admin du module, il est possible d’utiliser les fonctions install et uninstall pour créer ou supprimer automatiquement les tables du module. Exemples : public function install() { $this->load->model('extension/module/monmodule'); $this->model_extension_module_monmodule->creertables(); } public function uninstall() { $this->load->model('extension/module/monmodule); $this->model_extension_module_monmodule->supprimertables(); }
  • 27. Introduction à Opencart F. ABOUZAID 27 4. Exemple pratique : Pour créer un module "Hello world", on utilisera une copie du module 'Information'. 1. Modifier la partie admin • Copiez le fichier admin/controller/extension/module/information.php dans un fichier salut.php. • Renommez le contrôleur comme suit : class ControllerExtensionModuleSalut extends Controller • Remplacez 'information' par 'salut' dans le fichier. • Allez à admin/language/en-gb/extension/module/ et copier le fichier information.php dans salut.php. • Remplacez 'information' par 'salut' dans le fichier. • Faites la même chose avec le fichier admin/view/template/extension/module/information.twig 2. Modifier la partie client • Copiez le fichier catalog/controller/extension/module/information.php dans salut.php. Enlevez les références au modèle (lignes 6 et 10-15) • Changez le nom de la classe en ControllerInformationSalut • Remplacez 'information' par 'salut' dans le fichier sauf dans les lignes 17 et 18. • Copiez le fichier catalog/language/en-gb/extension/module/information.php dans salut.php et remplacez 'information' par 'salut'. Faites de même pour le fichier du français. • Copiez le fichier catalog/view/theme/default/template/module/information.twig dans salut.twig. Remplacez le code qui s'y trouve par les lignes: <div class="sidebar"> <div class="panel panel-default"> <div class="panel-heading"> {{ heading_title}} </div> </div> </div> 3. Installez le module ( ExtensionsModules) et activez-le (changez disabled en enabled dans le module). Associez le module à un layout (DesignHome, puis ajoutez le module dans la position de votre choix). Vous pouvez voir le résultat dans la page d'accueil du site.
  • 28. Introduction à Opencart F. ABOUZAID 28 5. Fonctions de la Base de données : La classe db aide à interroger la BD pour exécuter des requêtes d’insertion, de suppression et de mise à jour dans la BD. Elle fournit aussi des méthodes pour nettoyer les données par échappement, récupérer le dernier ID inséré ou le nombre de lignes. $result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`"); − DB_PREFIX est le préfixe des tables ; − $result est un objet qui contient le résultat de la requête SELECT. Elle possède les propriétés suivantes: • $result->row contient les données de la première ligne sous la forme d’un tableau associatif. • $result->rows est un tableau de lignes de résultats sur lesquels on peut boucler par un foreach. • $result->num_rows est le nombre de lignes retournées par la requête. L’instruction $this->db->query($sql); exécute la requête passée en paramètre. Exemple: $query = $this->db->query("SHOW COLUMNS FROM `".DB_PREFIX."product` LIKE 'youtube'"); if(!$query->num_rows){ $this->db->query("ALTER TABLE `".DB_PREFIX."product` ADD `youtube` TEXT NOT NULL"); } Ces lignes de code se trouvent soit dans le contrôleur ou le modèle. La requête cherche une colonne YouTube dans la table product. Si elle n’existe pas, la requête insère la colonne dans la table. $this->db->escape($value); Échappe et nettoie la variable avant de l’insérer dans la BD pour éviter les injections SQL. Elle utilise la fonction mysql_real_escape_string() de PHP. $this->db->countAffected($sql); Retourne le nombre de lignes affectées par la requête UPDATE récemment exécutée. $this->db->getLastId($sql); Retourne l’ID de la dernière ligne insérée par la plus récente requête. Elle utilise la fonction mysql_insert_id() de PHP.
  • 29. Introduction à Opencart F. ABOUZAID 29 6. Variables réservées OpenCart a des variables prédéfinies à utiliser à la place des variables standards : $_GET, $_POST, $_SESSION, $_COOKIE, $_FILES, $_REQUEST et $_SERVER $_SESSION est utilisé par $this->session->data où data est un tableau associatif qui représente $_SESSION. Les autres variables peuvent être utilisées par $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 Exercice 1. Créez un module qui affiche tous les produits en promotions (‘Specials’) classés par catégorie. 2. Ajoutez un critère de recherche : Par exemple, pour une fourchette de prix (entre un prix min et un prix max)
  • 30. Introduction à Opencart F. ABOUZAID 30 Créer une nouvelle page dans OpenCart Pour cela, il faut créer les fichiers suivants: • Un fichier Controller • Un fichier Template • Un fichier Model • Un fichier Language 1. Exemple 1: Simple sans modèle 1. On crée une page statique.php dans le répertoire catalogcontrollerinformation On obtient cette page par simple copie d'une page existante dans le même répertoire et en changeant le nom du contrôleur. Le nom du contrôleur devient: ControllerInformationStatique. On modifie le code en conséquence (changez ‘information’ en ‘statique’). 2. On crée une page statique.twig dans catalogviewthemedefaulttemplateinformation On copie la page information.twig on adapte le contenu. Par exemple, on change ‘description’ (ligne 18) en ‘text_content’ qui sera définie dans le fichier langage. 3. Fichier langage: On crée statique.php dans cataloglanguageen-gbinformation avec le contenu suivant: <?php // Text $_['heading_title'] = 'Page statique'; $_['text_content'] = 'Bonjour. Vous &ecirc;tes sur ma page statique.'; $_['text_error'] = 'Information Page Not Found!'; On accède à la page par: /index.php?route=information/statique
  • 31. Introduction à Opencart F. ABOUZAID 31 2. Exemple 2: Avec modèle et accès à la BD On crée une nouvelle fonctionnalité d'affichage de nouvelles. 1. On crée les tables dans la BD (n’oubliez pas de changer le préfixe de la table). CREATE TABLE IF NOT EXISTS `oc_nouvelles` ( `news_id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `description` text NOT NULL, `date_added` datetime NOT NULL, PRIMARY KEY (`news_id`) ) INSERT INTO `oc_nouvelles` (`title`, `description`, `date_added`) VALUES ('Tutoriel de Faysal A.', 'Le tutoriel Opencart est disponible!', '2017-08-23 00:00:00'), ('Mon premier Article.', 'Opencart est sympa!', '2017-08-22 00:00:00'); 2. On crée le modèle dans /catalog/model/catalog/news.php <?php class ModelCatalogNews extends Model { // Model - type du fichier. // Catalog – Le répertoire. // News - le nom du fichier. // Fonction qui retourne la news d’id en paramètre public function getNews($news_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "nouvelles WHERE news_id = '" . $news_id . "'"); // Requête pour retrouver la news. if ($query->num_rows) { // Une news est retournée return $query->row; } else { return false; } } // Fonction pour récupérer toutes les news public function getAllNews() { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "nouvelles ORDER BY date_added DESC"); return $query->rows; } } ?>
  • 32. Introduction à Opencart F. ABOUZAID 32 3. On crée le contrôleur dans /catalog/controller/informations/news.php <?php class ControllerInformationNews extends Controller { // Controller – Fichier du contrôleur. // Information – Son répertoire. // News – nom du fichier news.php // Tous les contrôleur ont une fonction index() public function index() { $this->language->load('information/news'); // Appel au fichier langage $this->load->model('catalog/news'); // Appel au modèle // Titre de la page. $this->document->setTitle($this->language->get('heading_title')); // Fil d’Ariane $data['breadcrumbs'] = array(); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/home'), 'separator' => false ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('heading_title'), 'href' => $this->url->link('information/news'), 'separator' => $this->language->get('text_separator') ); // Texte pris dans le fichier du langage $data['heading_title'] = $this->language->get('heading_title'); $data['text_title'] = $this->language->get('text_title'); $data['text_description'] = $this->language->get('text_description'); $data['text_view'] = $this->language->get('text_view'); // Appel de la fonction getAllNews du modèle $all_news = $this->model_catalog_news->getAllNews(); $data['all_news'] = array(); foreach ($all_news as $news) { $data['all_news'][] = array ( 'title' => $news['title'], 'description' => (strlen(html_entity_decode($news['description'])) > 50 ? substr(strip_tags(html_entity_decode($news['description'])), 0, 50) . '..' : html_entity_decode($news['description'])), 'view' => $this->url->link('information/news/news', 'news_id=' . $news['news_id'])
  • 33. Introduction à Opencart F. ABOUZAID 33 ); } // Requis. Les fichiers contenus dans la page. $data['column_left'] = $this->load->controller('common/column_left'); $data['column_right'] = $this->load->controller('common/column_right'); $data['content_top'] = $this->load->controller('common/content_top'); $data['content_bottom'] = $this->load->controller ('common/content_bottom'); $data['footer'] = $this->load->controller('common/footer'); $data['header'] = $this->load->controller('common/header'); // Appel de la vue $this->response->setOutput($this->load->view('information/news_list ', $data)); } // Fonction pour afficher le detail d’une news donnée par son ID public function news() { $this->load->model('catalog/news'); $this->language->load('information/news'); if (isset($this->request->get['news_id']) && !empty($this->request- >get['news_id'])) { $news_id = $this->request->get['news_id']; } else { $news_id = 0; } $news = $this->model_catalog_news->getNews($news_id); $data['breadcrumbs'] = array(); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/home'), 'separator' => false ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('heading_title'), 'href' => $this->url->link('information/news'), 'separator' => $this->language->get('text_separator') ); if ($news) { $data['breadcrumbs'][] = array(
  • 34. Introduction à Opencart F. ABOUZAID 34 'text' => $news['title'], 'href' => $this->url->link('information/news/news', 'news_id=' . $news_id), 'separator' => $this->language->get('text_separator') ); $this->document->setTitle($news['title']); $data['heading_title'] = $news['title']; $data['description'] = html_entity_decode($news['description']); $data['column_left'] = $this->load->controller('common/column_left'); $data['column_right'] = $this->load->controller('common/column_right'); $data['content_top'] = $this->load->controller('common/content_top'); $data['content_bottom'] = $this->load- >controller('common/content_bottom'); $data['footer'] = $this->load->controller('common/footer'); $data['header'] = $this->load->controller('common/header'); $this->response->setOutput($this->load->view('information/news', $data)); } else { $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_error'), 'href' => $this->url->link('information/news', 'news_id=' . $news_id), 'separator' => $this->language->get('text_separator') ); } } } ?> 4. On crée les 2 vues : • /catalog/view/theme/default/template/information/news_list.twig {{ header }} {{ column_left }} {{ column_right }} <div id="content"> {{ content_top }} <div class="breadcrumb"> {% for breadcrumb in breadcrumbs %} {{ breadcrumb['separator'] }} <a href=" {{ breadcrumb['href'] }}"> {{ breadcrumb['text'] }}</a> {% endfor %} </div>
  • 35. Introduction à Opencart F. ABOUZAID 35 <h1>{{ heading_title }}</h1> <center> <table style="width:80%; border-collapse: collapse; border-left: 1px solid #eeeeee; border-right: 1px solid #eeeeee;"> <tr style="font-weight:bold;"> <td style="width:30%; padding:10px 0px 10px 10px; background:#eeeeee; text-align:left;">{{ text_title }}</td> <td style="width:50%; padding:10px 0px 10px 10px; background:#eeeeee; text-align:left;">{{ text_description }}</td> <td style="width:10%; padding:10px 10px 10px 10px; background:#eeeeee; text-align:right;"></td> </tr> {% for news in all_news %} <tr> <td style="padding:10px 0px 10px 10px; text-align:left; border-bottom: 1px solid #eeeeee;">{{ news['title'] }}</td> <td style="padding:10px 0px 10px 10px; text-align:left; border-bottom: 1px solid #eeeeee; border-left: 1px solid #eeeeee;">{{ news['description'] }}</td> <td style="padding:10px 10px 10px 10px; text-align:right; border-bottom: 1px solid #eeeeee; border-left: 1px solid #eeeeee;"><a href="{{ news['view']}}">{{ text_view }}</a></td> </tr> {% endfor %} </table> </center> {{ content_bottom }} </div> {{ footer }} • /catalog/view/theme/default/template/information/news.twig {{ header }}{{ column_left }}{{ column_right }} <div id="content"> {{ content_top }} <div class="breadcrumb"> {% for breadcrumb in breadcrumbs %} {{ breadcrumb['separator'] }}<a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a> {% endfor %} </div> <h1>{{ heading_title }}</h1> <p>{{ description }}</p> {{ content_bottom }} </div> {{ footer }}
  • 36. Introduction à Opencart F. ABOUZAID 36 5. On crée les fichiers langages : /catalog/language/en-gb/information/news.php <?php // Heading $_['heading_title'] = 'Our Latest News'; // Text $_['text_news'] = 'News'; $_['text_title'] = 'Title'; $_['text_description'] = 'Description'; $_['text_view'] = 'View'; $_['text_error'] = 'The page you are looking for cannot be found.'; $_['text_separator'] = '&gt;'; Idem pour le français 6. On rajoute le lien dans le menu: • aller à /catalog/view/theme/default/template/common/menu.twig • repérer l'endroit où insérer le lien (après la ligne 25): {% set href = 'index.php?route=information/news' %} <li><a href="{{ href }}">{{ text_news }}</a></li> 7. Pour le nom de la variable dans le menu ajoutez les lignes suivantes à : /catalog/controller/common/menu.php // Pour insérer les news dans le menu $this->language->load('information/news'); $data['text_news'] = $this->language->get('text_news');
  • 37. Introduction à Opencart F. ABOUZAID 37 vQmod vQmod est un système conçu pour éviter d'avoir à modifier les fichiers du noyau. Au lieu d'apporter des modifications aux fichiers de base directement, les changements sont créés sous la forme de scripts XML de recherche /remplacement dans les fichiers PHP. En ne modifiant pas les fichiers du noyau, les changements ne seront pas altérés lors d'une mise à jour d’Opencart. Cependant, les fichiers vQmod sont conçus pour fonctionner avec certaines versions d’Opencart. Il y a donc un risque d'incompatibilité lors des mises à jour. L’utilisation de vQmod n’est pas limitée à Opencart. Un nouveau système a été introduit avec Opencart2 : OCMOD. Il comporte certaines simplifications par rapport à vQmod. OCMOD OCMOD est un système qui permet aux administrateurs de boutiques en ligne de modifier le site en télé-versant un fichier compressé qui contient des fichiers XML, SQL et PHP. OCMOD est basé sur vQmod. Différences entre OCMOD et VQMOD OCMOD a été créé comme une version simplifiée de vQmod. Voici les caractéristiques qui y sont présentes : - Replace, Before, After, Regex, Offset, Limit, ignoreif, error Fichiers OCMOD Les fichiers OCMOD sont versés dans la partie admin par : Extensions  Extension Installer L’extension doit obligatoirement être .ocmod.zip. Ceci est pour éviter de verser des fichiers qui ne sont pas des fichiers OCMOD. La version 3.x ne supporte que le fichiers archives. Pour cela, on change le nom du fichier en install.xml puis on le zippe comme install.ocmod.zip.
  • 38. Introduction à Opencart F. ABOUZAID 38 Structure de fichiers Le fichier compressé peut contenir plusieurs fichiers. Un exemple de structure de fichiers OCMOD compressés est : • upload • install.sql • install.php • install.xml upload : Tous les fichiers dans ce répertoire seront versés dans l’installation d’Opencart. install.sql : Contient les requêtes SQL : create, drop, insert et update. Chaque requête doit se terminer avec un ‘;’. install.php : Si la modification requiert du code PHP personnalisé. install.xml : Le fichier XML de modification. XML Il est possible d’utiliser le seul fichier XML pour la modification. Ce fichier crée une copie virtuelle de n’importe quel fichier qui doit être changé. Plutôt que de modifier les fichiers originaux de l’installation, on utilisera cette méthode, qui permet d’appliquer plusieurs modifications sur le même fichier. Exemple de fichier OCMOD : <?xml version="1.0" encoding="utf-8"?> <modification> <name>Test Ocmod</name> <code>Test_Ocmod</code> <version>1.0</version> <author>OpenCart Ltd</author> <link>http://www.opencart.com</link> <file path="catalog/controller/common/home.php"> <operation> <search> <![CDATA[$data['column_left'] = $this->load->controller ('common/column_left');]]> </search> <add position="replace"> <![CDATA[$data['column_left'] = "test123";]]> </add> </operation> </file> </modification>
  • 39. Introduction à Opencart F. ABOUZAID 39 Installation et utilisation :  L’installation d’une extension OCMOD se fait par l’installateur d’extensions : Extension Extension installer, puis chercher le fichier d’extension ocmod.zip à installer. Faire ensuite : Extension Modification puis cliquer sur le bouton de rafraichissement.  La désactivation d’une extension OCMOD se fait par : Extension Modification puis Désactiver l’extension en question. On peut aussi la supprimer en cliquant sur le bouton de suppression. Important : A chaque activation/désactivation, il faut cliquer sur le bouton de rafraichissement pour que cela soit effectif. Balises :  File : permet de spécifier le ou les fichiers à manipuler. Exemples : <file path="catalog/controller/common/home.php"> Plusieurs fichiers: <file path="system/engine/action.php|system/engine/loader.php|system/library /config.php|system/library/language.php"> <file path="system/{engine,library}/{action,loader,config,language}*.php">  Search : permet de rechercher du code dans le fichier Les attributs sont : • trim="(true|false)" : On ignore (ou pas) les espaces (true par défaut). • regex="(true|false)" : On utilise des regex (ou pas) • index="(number)"
  • 40. Introduction à Opencart F. ABOUZAID 40 Exemple: <?xml version="1.0" encoding="utf-8"?> <modification> <name>Modification Default</name> <version>1.0</version> <author>OpenCart Ltd</author> <link>http://www.opencart.com</link> <file path="catalog/controller/common/home.php"> <operation> <search trim="true" index="1"> <![CDATA[$data['column_left'] = $this->load->controller ('common/column_left');]]> </search> <add position="replace" offset="1"> <![CDATA[[CDATA[$data['column_left'] = "test123";]]> </add> </operation> </file> </modification>  Add : Le code qui remplace le résultat du ‘search’. Les attributs sont : • trim="(true|false)" • position="(replace|before|after)" • offset="(number)" Remarque : position ne peut pas être utilisée si regex est à ‘true’ dans l’attribut ‘search’. • L'attribut Optionnel "offset" va de pair avec la position o permet de décaler l'insertion ou le remplacement de "n" lignes de la position donnée par search. Par exemple,  si l’attribut position est before et offset à "3", le texte de add sera inséré 3 lignes au-dessus de la ligne cherchée.  si position est à replace et l'offset 3, il enlèvera le code de la ligne cherchée et les 3 lignes suivantes et le remplacera par le texte de add. o L'attribut Optionnel "index" précise quelle instance de la recherche sera impactée par l'opération.
  • 41. Introduction à Opencart F. ABOUZAID 41 Exemple <?xml version="1.0" encoding="utf-8"?> <modification> <name>Modification Default</name> <code>Modification_Default</code> <version>1.0</version> <author>OpenCart Ltd</author> <link>http://www.opencart.com</link> <file path="catalog/controller/common/home.php"> <operation> <search trim="true"> <![CDATA[$data['column_left'] = $this->load->controller ('common/column_left');]]> </search> <add position="before" trim="true" offset="2"> <![CDATA[[CDATA[$data['column_left'] = "test123";]]> </add> </operation> </file> </modification>  Regex Les attributs sont : • limit="(number)" : le nb d’occurrences concernées par la modification. Exemple: <?xml version="1.0" encoding="utf-8"?> <modification> <name>Regex Example</name> … <file path="system/{engine,library}/{action,loader,config,language}*.php"> <operation> <search regex="true" limit="1"> <![CDATA[~(require|include)(_once)?(([^)]+)~]]> </search> <add> <![CDATA[$1$2(modification($3)]]> </add> </operation> </file> </modification> Quand on utilise regex on ne peut pas utiliser les attributs ‘position’, ‘trim’ ou ‘offset’ car ils sont traités par le code de l’expression régulière. L’attribut ‘limit’ est lui utilisable.
  • 42. Introduction à Opencart F. ABOUZAID 42 Exemple: pour changer le 3ème 'foo' en 'bar' dans cette ligne: lorem ifoopsum foo lor foor ipsum foo dolor foo ^1 ^2 ^3 ^4 ^5 On exécutera : s/(.{-}zsfoo){3}/bar/ Qui donnera : lorem ifoopsum foo lor barr ipsum foo dolor foo ^1 ^2 ^3=bar ^4 ^5 Exercices d'utilisation d’OCMOD • Utiliser OCMOD pour enlever le texte ‘powered by Opencart’ • Forcer les utilisateurs à utiliser des mots de passe forts (6 lettres au moins et une majuscule) • Enlever la fonctionnalité de comparaison des produits.
  • 43. Introduction à Opencart F. ABOUZAID 43 Ajouter une langue dans OpenCart2 5. Télécharger une extension pour le langue souhaitée. Vous pouvez consulter: OpenCart marketplace. 6. Dézipper le fichier téléchargé dans le répertoire principal de votre boutique. it an upload the files to your main shop directory. Vérifiez s'il y a un répertoire upload dans l'archive; si c'est le cas archive, copier le contenu de ce répertoire. 7. Allez à Système>Localisation>Langues 8. Rentrez les valeurs demandées pour la langue. Elles sont généralement fournies avec le package téléchargé 2 http://omframework.com/2014/11/21/how-to-add-a-language-pack-in-opencart/
  • 44. Introduction à Opencart F. ABOUZAID 44 5. La nouvelle langue devrait apparaître dans l'entête de vos pages.
  • 45. Introduction à Opencart F. ABOUZAID 45 Activer les URLs SEO dans OpenCart 1. A partir de la console administration, allez à Système > Paramètres et cliquez sur le lien pour modifier la boutique. 2. Dans l'onglet "Serveur" mettez le bouton radio "Utiliser des URL’s SEO " à "Oui" et sauvegarder les changements. 3. Dans le répertoire principal de OpenCart il y a un fichier.htaccess.txt qu'il faut renommer en .htaccess. Si ce fichier existe déjà, il faut y ajouter les lignes suivantes: # SEO URL Settings RewriteEngine On # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ RewriteBase / RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L] RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L] RewriteRule ^download/(.*) /index.php?route=error/not_found [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*.(ico|gif|jpg|jpeg|png|js|css) RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] RewriteBase / : indique le répertoire racine du site. Exemple: RewriteBase /boutique/ La barre / à la fin est obligatoire. Ajouter les mots-clés pour les produits et les catégories La fonctionnalité par défaut ne marche pas pour les boutiques multiples. Il ne faut pas utiliser d'espaces dans les mots-clés. Les mots-clés doivent être uniques et différents entre les produits et les catégories.
  • 46. Introduction à Opencart F. ABOUZAID 46 Pour ajouter les mots-clés : Allez à Catalogue > Produits Cliquez pour modifier un produit Dans l'onglet "Données" remplissez le champs SEO Allez à Catalogue > Catégories et répétez le même processus pour les catégories.
  • 47. Introduction à Opencart F. ABOUZAID 47 Gérer les thèmes 1. Changer de thème 1. Télécharger un thème et le copier dans le répertoire catalog/view/theme 2. L’activer à partir de : Extensions->Themes -> Edit Default Store theme. System-> Settings Choisir le magasin -> Edit Dans l'onglet Store choisir la valeur de Template puis le thème que vous voulez activer.
  • 48. Introduction à Opencart F. ABOUZAID 48 2. Structure du répertoire des thèmes Dans le répertoire view il y a un thème par défaut (view -> theme -> default). Il contient les répertoires suivants : 1. Image: contient les images du thème; 2. Stylesheet: contient les feuilles de style; 3. Template: Contient les fichiers template du front-end. Ce répertoire est organisé par fonctionnalités. Contenu du répertoire Template 1. Common. Contient les fichiers Template pour les éléments communs aux différentes pages: header, footer, sidebar, … Il peut contenir vos propres fichiers que vous comptez utiliser dans plusieurs pages. 2. Error Contient les fichiers template pour la page d'erreur. 3. Information. Contient les templates pour les pages Contact et Sitemap et les pages statiques d'information. 4. Extension. Contient entre autres le dossier Module qui lui-même contient les templates pour les modules personnalisés que vous développerez. D'autres répertoires contiennent les templates spécifiques à certaines pages. Par exemple, quand on visite la page "Mon Compte" on invoque le template qui lui est associé qui se trouve ici: catalog/view/theme/default/template/account.
  • 49. Introduction à Opencart F. ABOUZAID 49 3. Créer un Thème personnalisé Deux possibilités s'offrent à vous : 1. Remplacer totalement l'interface du front-end ; 2. Changer certains aspects de l'interface comme la combinaison des couleurs ou la disposition des éléments qui la composent. Dans les 2 cas, il faut créer un nouveau thème et ne pas toucher au thème par défaut. Pour cela, on va créer un nouveau répertoire que l'on appellera monthemeperso. Copiez-y ensuite les fichiers suivants : • catalogviewthemedefaultstylesheet*.* • catalogviewthemedefaultimage*.* • catalogviewthemedefaulttemplatecommonheader.twig Dans header.twig remplacez le nom du thème (default) par le nom du nouveau thème (ligne 25). Appliquez différentes modifications à la feuille de style et constatez-en l'effet sur votre site. Vous avez déjà la structure d'un thème fonctionnel que vous pouvez activer à partir de la console d'administration où monThemePerso doit normalement apparaître. En revenant à la boutique, on remarque que le nouveau thème est identique au thème par défaut. Ceci est dû au mécanisme de surcharge (overriding) d’OpenCart. Quand le système essaie d'appliquer un template du nouveau thème et qu'il ne le trouve pas, il va prendre le template correspondant dans le thème par défaut. Ce mécanisme permet d'apporter des modifications partielles au thème par défaut, sans créer un nouveau thème complet. Développer le nouveau thème Dans le répertoire monthemeperso/template/common, copiez les fichiers home.twig et header.twig du répertoire default/template/common. Remarque : On ne copie que les fichiers que l'on souhaite personnaliser. Inutile de recopier tous les autres. Dans le nouveau thème ouvrez le fichier template/common/header.twig. Mettez à jour la référence à la feuille de style. Vous devriez obtenir ceci: <link rel="stylesheet" type="text/css" href="catalog/view/theme/ monthemeperso/stylesheet/stylesheet.css" />
  • 50. Introduction à Opencart F. ABOUZAID 50 Ouvrez le fichier template/common/home.twig et Ajoutez la ligne suivante avant la ligne 11 : <div style="background: #00F;color: #FFF;font-weight: bold;padding-left: 10px;">Si cette ligne apparait, c'est que le nouveau thème est en marche!</div><br/> En retournant à la page d'accueil, on devrait voir les changements. Vous pouvez bien entendu apporter tous les changements que vous jugez nécessaires pour votre nouveau thème. Pour initialiser tous les réglages CSS, on peut créer une nouvelle feuille de style : catalogviewthememonthemepersostylesheetreset.css et y insérer les lignes suivantes : html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } 6. On y rajoute quelques modifications comme suit : body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } :focus { outline: 0; } ins { text-decoration: none;
  • 51. Introduction à Opencart F. ABOUZAID 51 } del { text-decoration: line-through; } table { border-collapse: collapse; border-spacing: 0; } Et on modifie le fichier header.twig en lui rajoutant la ligne suivante au bon endroit: <link rel="stylesheet" href="catalog/view/theme/monthemeperso/stylesheet/reset.css" />
  • 52. Introduction à Opencart F. ABOUZAID 52 4. Comprendre les "Layout Templates" Un "layout template" est un template qui collecte le contenu de différentes zones de la page, l'insère dans le layout correspondant et génère une page complète. Templates de module Un module est un bloc qui est affiché dans une région spécifique du "layout template". Par défaut, il y a 4 positions différentes dans le layout template: 1. Content Top 2. Content Bottom 3. Column Left 4. Column Right On peut donc assigner un module à chacune de ces positions. Les templates de Module sont dans le répertoire template/extension/module. Ainsi, à la création d'un nouveau module, on doit placer le template qui lui est associé dans ce répertoire. Comment repérer le template associé à une page dont on veut changer l'apparence? Prédiction basée sur la structure Soit l'url suivante : http://www.monsite.com/index.php?route=account/login. account/login est la valeur du paramètre "route" et qui nous indiquera quel sera le répertoire template du thème par défaut qui sera utilisé. Dans ce cas, ce sera: catalog/view/theme/default/template/account/login.tpl Cas particuliers Dans certains cas, il sera nécessaire de consulter le fichier contrôleur. Exemple: http://www.monsite.com/index.php?route=account/login Dans ce cas, le contrôleur sera catalog/controller/account/login.php Dans ce fichier se trouve ce code qui est le moyen par lequel le contrôleur indique le template à utiliser: $this->template = 'default/template/account/login.tpl'; Composant communs du Layout Template Ouvrez le fichier: default/template/account/login.tpl, par exemple. Voilà la signification des principales variables:
  • 53. Introduction à Opencart F. ABOUZAID 53 La sortie d'un module spécifique se trouve dans : default/template/module/{modulename.tpl}. Par exemple, pour le module "Account", le fichier est: default/template/module/account.tpl. Dans ce fichier, la signification des principales variables est la suivante:
  • 54. Introduction à Opencart F. ABOUZAID 54 Assigner un module à partir du Back-End Exemple du module "Slideshow": Avec cette configuration le module "Slideshow" sera affiché dans la partie "Content Top" du layout "Home". Changer le Layout de la page d'accueil Allez à Extension -> Modules Supprimez les modules "Slideshow", "Carousel" et "En vedette". La page d'accueil devrait être presque vide à l'exception du header et du footer. Installez le module "Category" dans le Layout "Home" à la Position "Colonne gauche". Ajoutez le module "Compte" dans le même layout à la position "colonne droite". Vérifiez votre page d'accueil. Changement dans le fichier Layout Pour ajouter du texte dans un template, il faut passer par le fichier langage du template. Exemple pour personnaliser la page d’accueil, au lieu de mettre le texte directement dans la page, on suit les étapes suivantes: - Ouvrir le fichier catalog/language/en-gb/en-gb.php et ajouter la ligne suivante, à la fin du fichier.
  • 55. Introduction à Opencart F. ABOUZAID 55 $_['welcome_text'] = " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vestibulum dui sit amet semper porta. Sed in enim quam. Etiam cursus ante eu turpis consectetur, eu tincidunt diam mattis. Cras euismod faucibus eros volutpat efficitur. "; - Ouvrir le fichier catalog/controller/common/home.php. On y ajoute la variable que l’on a inséré dans en-gb.php pour qu’elle soit disponible lors de l’affichage de home.twig. Dans "home.php" juste avant la ligne : $this->response->setOutput($this->load->view('common/home', $data)); On ajoute le code suivant: $data['welcome_text'] = $this->language->get('welcome_text'); - Ajouter la variable $welcome_text dans home.twig. Ce fichier devrait alors ressembler à ceci: <?php echo $header; ?> <div class="container"> <div class="row"><?php echo $column_left; ?> <?php if ($column_left && $column_right) { ?> <?php $class = 'col-sm-6'; ?> <?php } elseif ($column_left || $column_right) { ?> <?php $class = 'col-sm-9'; ?> <?php } else { ?> <?php $class = 'col-sm-12'; ?> <?php } ?> <div id="content" class="<?php echo $class; ?>"><?php echo $content_top; ?> <div><?php echo $welcome_text; ?></div> <?php echo $content_bottom; ?></div> <?php echo $column_right; ?></div> </div> <?php echo $footer; ?> Les modifications que l’on a fait directement dans les fichiers en-gb.php et home.php devraient être faites par OCMOD.
  • 56. Introduction à Opencart F. ABOUZAID 56 Les layouts dans Opencart Dispositions (Layouts) Une disposition (layout) est une distribution des différents modules pour une ou plusieurs pages du site. On peut donc répartir les modules de plusieurs façons comme dans les exemples suivants : Dispositions par défaut Il y a des dispositions pré-configurées qui sont suffisantes dans la plupart des cas, puisqu’ils prennent en charge les différentes sections d’un magasin: • Account • Affiliate • Category • Checkout • Contact • Default • Home • Information • Manufacturer • Product • Sitemap Avec les dispositions on peut : - Indiquer qu’un module doit s’afficher sur toutes les pages - Afficher différents modules sur les différentes pages (basé sur le chemin) - Afficher différent module (comme bannière) sur différentes catégories, produit et page d’information - Si vous avez plusieurs boutiques, vous pouvez faire les réglages ci-dessus pour chacune des boutiques.
  • 57. Introduction à Opencart F. ABOUZAID 57 Créer un nouveau Layout En faisant : "System  Design  Layouts", on affiche une liste des différents layouts prédéfinis ou personnalisés. On peut créer un nouveau layout en cliquant sur "Add New". Cas pratique Nous allons mettre en évidence un produit particulier en lui créant le design suivant : Étape 1 : créer un layout et nommez-le « Meilleur produit ». On ne précise pas de route particulière. Opencart utilisera la route par défaut de ce produit. Étape 2 : aller à la page du produit en question et dans l’onglet design choisissez comme layout, « Meilleur produit » Étape 3 : il faut configurer chaque module séparément Pour créer un module, on commence par lui associer une bannière (Banner) 1. Les bannières sont gérées (créées) à partir de Design  Banners, puis cliquer sur le bouton Add. Appellez la bannière : Meilleur produit et Ajouter le produit en question à la bannière comme indiqué dans la figure suivante. Assurez-vous de mettre l’image correspondant au produit.
  • 58. Introduction à Opencart F. ABOUZAID 58 2. Pour associer la bannière au module banner, on fait : Extensions  Modules  Banner puis cliquer sur le bouton ADD près de Banner et remplir les champs comme suit : Une fois sauvegardée, la bannière devrait apparaître dans la liste des modules.
  • 59. Introduction à Opencart F. ABOUZAID 59 3. Pour associer le module créé avec un layout, on fait : Design > Layouts En affichant le produit choisi comme ‘meilleur produit’ on voit apparaître le layout créé. A vous de terminer le cas pratique pour obtenir un design qui ressemble à ceci :
  • 60. Introduction à Opencart F. ABOUZAID 60 Améliorer la sécurité de OpenCart 1. Supprimer le répertoire d’installation Un intrus qui accède à votre site et à ce répertoire peut facilement remettre à zéro votre installation. Ne courez pas de risque et supprimez ce répertoire. 2. Déplacer le répertoire storage comme conseillé à la connexion en mode admin : En cas de problème, les 2 fichiers config.php et admin/config.php contiennent une référence vers le répertoire storage de votre installation, que vous pouvez rectifier manuellement : define('DIR_STORAGE', '/var/www/vhosts/fabouzaid/www/storage/'); 3. Protéger les fichiers de configuration Changez les permissions d’accès aux fichiers de configuration (444 ou 644) • Config.php • Index.php • Admin/config.php • Admin/index.php • system/startup.php On peut le faire dans WinSCP à partir de la fenêtre de propriétés :
  • 61. Introduction à Opencart F. ABOUZAID 61 4. Changer le repertoire admin Le répertoire par défaut est : www.monsite.com/admin. On peut changer facilement l’emplacement de ce répertoire et indiquer à OpenCart où il se trouve. Renommez votre répertoire admin en quelque chose de plus difficile à deviner. Par exemple : www.monsite.com/xyz_admin Ouvrez les 2 fichiers : • config.php • admin/config.php Remplacez toutes les instances de ‘admin’ par le nouveau nom. De plus il faut aussi vérifier que les extensions OCMOD installées fonctionnent, sinon, il faut les modifier en conséquence. 5. Protéger le répertoire admin avec un mot de passe 1. créer un fichier .htaccess et copier le code suivant: AuthUserFile [chemin du fichier .htpasswd] AuthName "Entrer un identifiant et un mot de passe" AuthType Basic require valid-user 2. créer le fichier .htpasswd en utilisant l'utilitaire htpasswd qui se trouve dans le répertoire : EasyPHP-DevServer-13.1VC11binariesapachebin
  • 62. Introduction à Opencart F. ABOUZAID 62 La commande à entrer est la suivante : La première fois (pour créer le fichier) htpasswd -cb nomFichier utilisateur motDePasse Pour les autres utilisateurs : htpasswd -b nomFichier utilisateur motDePasse On peut aussi protéger certains types de fichiers : <FilesMatch ".(php|twig|txt)$"> Order Deny,Allow Deny from all allow from YY.YY.YY.YY </FilesMatch> On peut aussi limiter l’accès au répertoire en autorisant seulement certaines adresses IP. Pour cela on peut ajouter au fichier .htaccess les lignes suivantes : # Interdire l’acces par IP <Limit GET POST> order deny,allow deny from all allow from XX.XX.XX.XX allow from YY.YY.YY.YY </Limit> Il faut cependant faire attention aux adresses dynamiques qui peuvent changer.
  • 63. Introduction à Opencart F. ABOUZAID 63 On peut aussi restreindre les accès par ftp en créant un fichier .ftpaccess qui fonctionne comme un fichier .htaccess mais qui restreint la visibilité de certains répertoires à certains visiteurs par ftp. Le contenu du fichier .ftpaccess ressemble à ceci : DenyAll Allow XX.XX.XX.XX Allow YY.YY.YY.YY 6. Enlever l’indication “powered by OpenCart” Cette précaution n’éloignera pas un pirate un tant soit peu informé, mais l’obligera à utiliser d’autres moyens pour deviner le logiciel utilisé (http://builtwith.com/ par exemple). 7. Cacher les erreurs OpenCart Les messages d’erreur sont utiles pour déboguer l’application. Mais à l’utilisation, ils peuvent donner des indications aux pirates sur votre code. Pour désactiver les messages, on fait : System->Settings->Edit Settings->Server changer "Display Errors" à "No". 8. Choisissez le bon hébergeur Un hébergeur pas cher ne garantit certainement pas un haut niveau de sécurité! 9. D'autres astuces: http://www.sitefixit.com/scripts/opencart/how-to-secure-your-opencart-website-improve- opencart-security.php
  • 64. Introduction à Opencart F. ABOUZAID 64 Paiements 3. Allez dans Paypal à l’adresse https://developer.paypal.com/ et créez-vous 2 comptes en Sandbox : Un business (pour le vendeur) et un autre personal (pour l’acheteur). Vous devez auparavant avoir un compte Paypal réel. 2. Activez le module Paypal Standard dans ‘Payments’ : Dans ce module , entrez vos données Paypal :
  • 65. Introduction à Opencart F. ABOUZAID 65 Changez le statut des commandes payées par Paypal : Vous êtes prêt a réaliser une commande payée avec Paypal.
  • 66. Introduction à Opencart F. ABOUZAID 66 Une fois la commande terminée, allez à Sales->Orders. Vous devriez voir votre commande et son statut. Vous pouvez éditer la commande pour lui changer de statut, par exemple pour la faire passer de ‘pending’ à ‘completed’. Si dans ce processus vous avez un message d’erreur du style ‘Warning: You do not have permission to access the API!’, réinitialisez les permissions de votre groupe : System > Users > User Groups > Administrator [edit] > choisissez ‘all Access and Permissions’ et cliquez sur ‘save’.
  • 67. Introduction à Opencart F. ABOUZAID 67 Les évènements Les évènements (events) sont des méthodes appelées quand une action a lieu. En d'autres mots, il est possible de définir spécifiquement le moment auquel la fonction personnalisée doit s'exécuter dans l'application Ce système évite les conflits qui peuvent être causés par OCMOD car il n'y a pas de manipulation de fichiers existants. Enregistrer un évènement : La classe event est définie dans system/engine/event.php. Elle propose 3 méthodes : 1. register pour enregistrer les évènements ; 2. unregister pour supprimer les évènements. 3. trigger pour déclencher un évènement. Un évènement peut avoir plusieurs gestionnaires. Par exemple, 2 modules peuvent exécuter un évènement dans une file (queue). Les évènements sont ajoutés ainsi : // Évènement $event = new Event($registry); $registry->set('event', $event); $query = $db->query("SELECT * FROM " . DB_PREFIX . "event"); foreach ($query->rows as $result) { $event->register($result['trigger'], $result['action']); } Les évènements sont déclenchés à chaque fois que le code suivant est exécuté : $this->event->trigger('event_name', $args); Ce qui veut dire que les gestionnaires pour cet évènement seront exécutés. Par exemple, regardez à la ligne 98 du fichier : catalog/model/extension/openbay/ebay_order.php: $this->event- >trigger('model/checkout/order/addOrderHistory/after', array('model/checkout/order/addOrderHistory/after', array($order_id, $this->default_paid_id)));
  • 68. Introduction à Opencart F. ABOUZAID 68 Ajouter ou supprimer un gestionnaire d'évènements dans un module : Si vous regardez admin/model/setting/event.php, il y un modèle qui expose plusieurs méthodes dont : addEvent : pour ajouter un nouveau gestionnaire d'évènements qui a 3 paramètres: - $code : code ou identifiant du gestionnaire (habituellement le nom du module). Il sert aussi à supprimer l'évènement. Il doit être unique à votre module. - $trigger : C'est l'appel fait aux fichiers contrôleur, modèle, vue, langage ou config qui va être appelé ou chargé. Il a la forme suivante : application/type/folder/file/method/before ou after Où : o application est catalog ou admin o type est : controller, model, view, language, config o folder est optionnel et indique le chemin pour trouver le fichier o file est le fichier appelé o method est uniquement utilisé avec controller ou model o before/after indique si l'évènement est exécuté avant ou après que le fichier ou la méthode sont chargés - $action : Le gestionnaire qui sera appelé quand l'évènement sera déclenché. C'est un objet qui contient dans son constructeur la route vers le contrôleur appelé. Dans ce contrôleur il est possible de manipuler la route, les données, les arguments et les valeurs de retour du contrôleur, modèle et vues appelées. Exemple : $this->model_setting_event->addEvent('bonjour', 'catalog/view/common/header/before','extension/module/bonjour/before _view'); deleteEvent - pour supprimer le gestionnaire d'évènements. Exemple : $this->model_setting_event->deleteEvent('bonjour'); Il y a aussi : getEvent, enableEvent ou disableEvent. On ajoutera ou supprimera le gestionnaire d'évènements dans les méthodes install et uninstall du module.
  • 69. Introduction à Opencart F. ABOUZAID 69 Exemples d'utilisation : • Exécuter une fonction avant que le header ne soit chargé, • Ajouter du code html avant l'affichage du header, ... Pratique : Remplacer le twig d'un layout par un autre. En OCMOD on ferait: <file name="catalog/controller/common/header.php"> <operation> <search position="replace"><![CDATA return $this->load- >view('common/header', $data);]]></search> <add><![CDATA return $this->load->view('common/mon_header_perso', $data);]]></add> </operation> </file> Pour utiliser les évènements, on écrit 2 les fonctions suivantes : - Code à exécuter quand l’évènement sera déclenché ; - Code pour l’enregistrement et la suppression de l’évènement. Le code à exécuter quand l’évènement sera déclenché, sera mis dans un contrôleur côté catalog : Fichier : catalog/controller/extension/module/bonjour.php <?php class ControllerExtensionModuleBonjour extends Controller { … … … public function before_view(&$route, &$data, &$output){ $route = str_replace('common/header', 'common/mon_header_perso', $route); } } L'évènement est déclenché par le trigger suivant qui est contenu dans une fonction install du contrôleur du module.
  • 70. Introduction à Opencart F. ABOUZAID 70 Dans le fichier admin/controller/extension/module/bonjour.php, on rajoute la fonction : public function install() { $this->load->model('setting/event'); $this->model_setting_event->addEvent('mon_header_perso', 'catalog/view/common/header/before', 'extension/module/bonjour/before_view'); } Il est possible de vérifier que l'évènement est bien enregistré en allant à : Extension-> Events L'évènement est supprimé de l'application grâce à une méthode uninstall définie elle aussi dans le contrôleur : public function uninstall() { $this->load->model ('setting/event'); $this->model_setting_event->deleteEvent('mon_header_perso'); }
  • 71. Introduction à Opencart F. ABOUZAID 71 Ajax dans Opencart Exemple Simple : Créez une copie du fichier : catalog/view/theme/default/template/common/header_perso.twig Et nommez-la : header_perso.twig Dans ce fichier 1. Ajouter la ligne suivante <a onClick="helloworld()" title="Test Hello World ">Cliquez!</a> Après la ligne 78 2. Ajoutez le script suivant à la fin du fichier : <script type="text/javascript"> function helloworld(){ $.ajax({ type: 'POST', url: 'index.php?route=common/header/helloworld', dataType: 'json', success: function(json) { if (json['error']) { alert(json['error']); } if (json['message']) { alert( json['message']); } } }); } // Fin de helloworld() </script> A la fin du fichier catalog/controller/common/header.php, ajoutez le code suivant : // Fonction pour tester Ajax public function helloworld(){ $json = array(); $json["message"] = "Salut Toi!"; $this->response->setOutput(json_encode($json)); } La page d’accueil devrait afficher un lien hypertexte qui cliqué, affiche le message.
  • 72. Introduction à Opencart F. ABOUZAID 72 Liens http://www.transpacific-software.com/guide_install_opencart_extensions.html http://code.tutsplus.com/tutorials/altering-the-core-of-opencart-using-vqmod--cms-22330 http://www.freshdesignweb.com/free-responsive-opencart-themes.html http://www.opencartworld.com/ : Recherche améliorée d'extensions. Ajouter une position http://www.dynamicwebsoft.net/opencart-thems-free/ https://www.mywork.com.au/blog/create-new-module-layout-position-opencart-1-5/ Développer une extension http://code.tutsplus.com/articles/from-beginner-to-advanced-in-opencart-more-module- development--cms-22289 Liste des fonctions : http://cartadvisor.com/blog/2013/12/04/opencart-global-functions-developer-cheatsheet/ Technologies utilisées http://builtwith.com/ Expressions régulières http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/ Site de la maison du café (idée de thème à développer) http://www.lamaisonduboncafe.com/the-blanc-imperial.html Ajouter une table à l'installation http://www.kvcodes.com/2013/11/creating-table-while-installing-module-in-opencart/ Créer un formulaire de saisie http://forum.opencart.com/viewtopic.php?t=53452