NAV
php

Introduction

C'est quoi MineWeb ?

MineWeb est un CMS. Un CMS est un système de gestion de contenu. Plus précisément il vous permet de vous créer rapidement et facilement un site complètement personnalisable. MineWeb est la version 2 de l'ancien CMS LapisCraft de Eywek. Celui-ci n'étant plus stable et mal développé (cf. raisons ici).

MineWeb est développé sous un framework PHP nommé CakePHP permettant un développement plus rapide, sécurisé et optimisé. Le projet a été lancé il y a maintenant plus d’1 an en compagnie de Mac’ permettant de convenir entièrement à vos besoins.

Pré-requis

Pour installer le CMS MineWeb votre hébergeur doit avoir :

Pour plus de simplicité vous pouvez télécharger le fichier de compatibilité ici. Vous avez juste à extraire cette archive sur votre FTP pour voir si votre hébergeur est compatible.

Licence hébergée MineWeb

Vous ne souhaitez pas vous embêter à chercher un hébergeur compatible ? Alors n'attendez plus et utilisez nos licences hébergées, votre licence sera installée automatiquement et sans aucun effort. Tous les prix et informations sont disponibles ici.

Installation

Étape 1 - Configuration de la base de données

Sautez cette étape si vous utilisez l'hébergeur MineWeb

Vous devez avoir une page demandant vos identifiants de base de données, vous devez entrez ceux-ci et tester la connexion, puis il vous faudra cliquer sur un bouton qui installera la base de données automatiquement.

Étape 2 - Mise en place de la licence

Une fois la connexion à la base de données effectuée, le CMS vous demandera alors votre clé d'activation. Celle-ci est disponible sur votre profil. Si vous obtenez des erreurs, voici leurs explications et résolutions.

Erreur Explication Résolution
Licence inconnue Votre licence n'est pas trouvée dans notre base de données Téléchargez à nouveau les fichiers du CMS
Site d'installation non valide L'URL que vous utilisez pour accèder à votre site ne correspond pas à celle configurée Rendez-vous sur votre profil et changez l'URL de votre licence
Licence désactivée La licence n'est pas activée Rendez-vous sur votre profil et réactivez votre licence. Celle-ci peut être désactivée par l'administration si un problème survient, une explication est alors affichée
L'API de MineWeb.org est temporairement indisponible Le système de vérification de licence n'est pas disponible Patientez, si ce problème survient nous travaillons à la résolution du problème

Étape 3 - Création de l'administrateur

Voici la troisième et dernière étape de l'installation du CMS, vous allez créer votre compte administrateur qui permettra d'accéder au panel admin du CMS. Vous avez juste à remplir les champs qui vous sont présentés et à soumettre vos informations en cliquant sur le bouton “Suivant”.

Installation terminée

Une fois l'installation du CMS complétée vous pouvez passer à l'utilisation du CMS en lui-même. Pour configurer votre CMS il vous faut vous connecter en cliquant sur le bouton en haut à gauche de la barre de navigation. Vous cliquez sur connexion puis entrez vos informations pour vous connecter. Vous cliquez ensuite sur Panel administrateur, vous serez redirigé et vous pourrez ensuite cliquer sur Général puis Préférences générales.

Aide externe et problèmes fréquents

Problème avec ionCube

Il est possible que vous obteniez une erreur dans ce style là :

/app/Controller/Component/UpdateComponent.php cannot be decoded by this version of the ionCube Loader. If you are the administrator of this site then please install the latest version of the ionCube Loader.

Cela signifie que votre hébergeur n'a pas installé la bonne version du ionCube Loader, il faut alors voir avec leur support. À noter que la version de PHP ne doit pas être supérieur à la version 7.

Problème chez livehost

Il est possible que vous obteniez une erreur dans ce style là :

Warning: include(Cake/bootstrap.php): failed to open stream: No such file or directory in

Pour résoudre ce problème, rendez-vous dans app/webroot, ouvrez le fichier index.php et allez à la ligne 64

//define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');

Retirez les deux slashs

define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');

Sauvegardez et rechargez la page.

Autres

Lier serveur-site

Configuration préalable

Rendez-vous sur la page de liaison site-serveur sur le panel admin de votre CMS. Vous devez dans un premier temps configurer le temps d’exécution maximum (appelé aussi timeout), il est conseillé de mettre 1 (secondes).

Liaison à un serveur Bukkit/Spigot

Maintenant nous allons lier votre serveur Minecraft au CMS. Pour cela vous devez avoir installé sur votre serveur le plugin MineWeb disponible à cette adresse. Une fois le plugin téléchargé, placez-le dans votre dossier plugins de votre serveur et redémarrez celui-ci. Vous n’avez pas à toucher à la configuration du plugin. Quand votre serveur est en ligne, configurez le port que va utiliser le plugin pour communiquer avec le site, pour cela tapez la commande /mineweb port PORT en remplaçant bien sur PORT par un port disponible, non utilisé et ouvert.

Une fois que cette commande est effectuée tapez /mineweb setup. Et rendez-vous sur la page de liaison site-serveur dans le panel admin.

Maintenant que vous avez configuré le serveur vous pouvez ajouter un serveur et remplir les informations nécessaires :

Cliquez ensuite sur Connexion pour tester la connexion, si celle-ci échoue, votre port n’est pas ouvert ou non disponible.

Liaison à un serveur BungeeCord

Même processus que pour la liaison Bukkit/Spigot mais avec le plugin BungeeCord et vous devez mettre comme type de connexion Bungeecord.

Liaison par Ping

Vous n’avez pas besoin de plugin pour cette liaison, il vous suffit juste de configurer un serveur comme ceci depuis la page de liaison :

Cliquez ensuite sur Connexion pour tester la connexion.

La connexion échoue

Dans un premier temps, vérifiez que vous n'avez pas d’erreur dans la console de votre serveur en rapport avec le plugin MineWeb.

Dans un second temps, vérifiez que le port que vous avez configuré est ouvert et non utilisé (demandez à votre hébergeur minecraft si vous ne savez pas lequel utiliser).

Ensuite, essayez de redémarrer votre serveur juste après avoir fait les commandes, puis testez la connexion à nouveau.

Si la connexion échoue toujours, contactez le support avec un maximum d'explications et d'informations, et répondez à ces questions :

Créer un plugin

Introduction

Un plugin (aussi appelé extension), c’est des fichiers qui sont ajoutés à votre CMS pour y ajouter plusieurs fonctionnalités ou modifier certains comportement par défaut. Différents plugins “officiels” sont déjà disponibles sur le site de MineWeb. D’autres peuvent être développés par la communauté et c’est le but de ce tutoriel.

Création

Création des fichiers/dossiers

Dans un premier temps, il va falloir créer le dossier de votre plugin, ce dossier doit être créé dans le dossier app/Plugin/. Le nom du dossier doit être le nom de votre plugin.

Par exemple si je veux créer un plugin de boutique, je vais l’appeler : Shop.

Une fois ce dossier créé, il faut créer différents autres dossiers et fichiers :

C’est tout pour les dossiers, il nous reste maintenant encore des fichiers à créer tels que :

Explications et configuration

Maintenant que vous avez créé tout ces fichiers, nous allons passer à la configuration de votre plugin. Pour cela, ouvrez le fichier config.json, c'est dans ce fichier que toute la configuration sera située.

Configuration par défaut (à remplir)

{
  "name":"NAME",
  "slug":"SLUG",
  "nav":true,
  "admin":true,
  "admin_group_menu":"customisation",
  "admin_name":"Boutique",
  "admin_icon":"shopping-cart",
  "admin_route": "/admin/shop",
  "author":"AUTHOR",
  "version":"0.1.0",
  "apiID":1,
  "useEvents":true,
  "permissions" : {
    "available" : [],
    "default" : {
      "0" : [],
      "2" : []
    }
  },
  "requirements" : {
    "CMS" : ">= 1.1.0"
  }
}

Maintenant, vous allez pouvoir configurer. Remplacez NAME par le nom de votre plugin, SLUG par le nom du dossier et puis AUTHOR par votre pseudo. Ensuite voici une explication des autres lignes :

Valeur Explication
general Correspondant au menu ‘Général’ du panel admin
customisation Correspondant au menu 'Personnalisation’ du panel admin
server Correspondant au menu 'Serveur’ du panel admin
other / default Correspondant au menu 'Autres’ du panel admin

Les sous-menu du panel admin

Vous pouvez, si vous le souhaitez, avoir un menu au niveau du panel admin avec des sous-liens (comme pour la boutique). Pour ceci, il vous suffit d'ajouter la clé admin_menus dans la configuration du plugin juste après admin_icon (Et donc la clé admin_route devient optionnelle).

Associez-lui comme valeur un tableau avec vos sous-lien, comme ceci par exemple :

{
  "name":"NAME",
  "slug":"SLUG",
  "nav":true,
  "admin":true,
  "admin_group_menu":"customisation",
  "admin_name":"Boutique",
  "admin_icon":"shopping-cart",
  "admin_menus": [
    {
        "name": "Gérer les articles",
        "icon": "shopping-basket",
        "url": "/admin/shop",
        "permission": "SHOP__ADMIN_MANAGE_ITEMS"
    },
    {
        "name": "Gérer les promotions",
        "icon": "percent",
        "url": "/admin/shop/shop/vouchers",
        "permission": "SHOP__ADMIN_MANAGE_VOUCHERS"
    },
    {
        "name": "Gérer les paiements",
        "icon": "credit-card",
        "url": "/admin/shop/payment",
        "permission": "SHOP__ADMIN_MANAGE_PAYMENT"
    }
  ],
  "author":"AUTHOR",
  "version":"0.1.0",
  "apiID":1,
  "useEvents":true,
  "permissions" : {
    "available" : [],
    "default" : {
      "0" : [],
      "2" : []
    }
  },
  "requirements" : {
    "CMS" : ">= 1.1.0"
  }
}

La clé permission dans chaque lien est optionnelle, elle permet d'afficher le lien seulement si la permission est accordée au groupe de l'utilisateur.

Les tables SQL

Les tables dont vous avez besoin pour votre plugin vont être générées automatiquement par un Shell. Dans un premier temps, toutes les tables de votre plugin doivent être préfixé par le nom de votre plugin. Par exemple, pour le plugin Shop les tables doivent être préfixés par shop__.

Pour générer vos tables automatiquement dans un schema (qui sera indispensable pour avoir un plugin valide) il vous faut vous rendre sur le ssh de votre VPS/Ordinateur/Dédié pour pouvoir utiliser la console de CakePHP. Il vous faut ensuite vous rendre dans le dossier contenant les fichiers du CMS puis, il vous faudra taper app/Console/cake schema generate plugin-shop Un fichier schema.php sera automatiquement créé dans le dossier SQL de votre plugin.

Si vous ne pouvez pas accéder à la console de CakePHP, vous pouvez toujours créer votre fichier SQL/schema.php manuellement.

Vous devez commençer le fichier comme ceci

<?php
class ShopAppSchema extends CakeSchema {

    public $file = 'schema.php';

    public function before($event = array()) {
        return true;
    }

    public function after($event = array()) {}
}

Il vous faut ensuite suivre la documentation ici

Callbacks

Les callbacks sont des fonctions appelées automatiquement par le CMS lors de certaines actions.

Vous pouvez, si vous le souhaitez, créer un fichier MainComponent.php dans le dossier Controller/Component de votre plugin.

Dans ce fichier vous pouvez y ajouter :

<?php
class MainComponent extends Object {

    public function onEnable() {
    }

    public function onDisable() {
    }

}

Ces fonctions onEnable et onDisable seront automatiquement appelées par le CMS lors de l’installation, l’activation (pour le onEnable), et pour la désinstallation et la désactivation (pour le onDisable) du plugin.

Fonctions disponibles

Toutes les fonctions/variables présentes ici, sont celles du EyPluginComponent.

Fonctions

Tout comme les variables, certaines méthodes/fonctions sont disponibles pour vous permettre d’interagir avec les plugins installés. Tout d’abord vous avez la fonction loadPlugins() qui vous retournera tout comme la variable $pluginsLoaded (voir ci-dessous) les plugins chargés et installés, cette méthode/fonction vous donne simplement les données à jour si celle-ci ont été modifiés depuis le chargement du Component des plugins.

Vous avez ensuite la fonction getPluginConfig($slug) qui vous retourne le JSON de la configuration d’un plugin. Vous devez spécifier le slug du plugin, par exemple, pour Boutique c’est Shop.

Vous pouvez savoir si un plugin est installé avec isInstalled($id), qui retourne un boolean, sachant que $id est l’ID au format auteur.nom.apiID.

Vous pouvez rechercher un plugin avec différentes fonctions :

Qui vous retournerons ou un objet contenant les données du/des plugin(s) trouvé(s) (selon la fonction) avec comme clé l’ID du plugin. Ou la fonction vous retournera objet vide si aucun plugin ne correspond à la recherche.

Variables

Les plugins sont chargés dès le chargement de votre site, en effet le CMS installe automatiquement les plugins qui sont valides dans le dossier /app/Plugin/ et qui ne sont pas encore présent dans la base de données. Et celui-ci supprime aussi automatiquement les plugins qui sont encore en base de données mais plus dans le dossier.

Après ces opérations effectuées, le CMS rafraichi les permissions (pour pouvoir supprimer/ajouter les permissions des plugins installés/supprimés). Une fois cela fais, vous pouvez accèder à une variable automatiquement initialisée nommée $pluginsLoaded. Celle-ci contient les différents plugins chargés et installés en base de données.

Vous pouvez l’utilisez comme ceci :

<?php
debug($this->EyPlugin->pluginsLoaded); // Dans un controller

Ce qui retournera :

object(stdClass) {
  eywek.support.2 => object(stdClass) {
      name => 'Support'
      slug => 'support'
      nav => true
      admin => false
      author => 'Eywek'
      version => '0.2.0'
      apiID => (int) 2
      useEvents => false
      permissions => object(stdClass) {
          available => array(
              (int) 0 => 'POST_TICKET',
              (int) 1 => 'VIEW_TICKETS',
              (int) 2 => 'VIEW_ALL_TICKETS',
              (int) 3 => 'DELETE_ALL_TICKETS',
              (int) 4 => 'DELETE_HIS_TICKET',
              (int) 5 => 'RESOLVE_HIS_TICKET',
              (int) 6 => 'RESOLVE_ALL_TICKETS',
              (int) 7 => 'SHOW_TICKETS_ANWSERS',
              (int) 8 => 'REPLY_TO_HIS_TICKETS',
              (int) 9 => 'REPLY_TO_ALL_TICKETS'
          )
          default => object(stdClass) {
              0 => array(
                  (int) 0 => 'POST_TICKET',
                  (int) 1 => 'VIEW_TICKETS',
                  (int) 2 => 'DELETE_HIS_TICKET',
                  (int) 3 => 'RESOLVE_HIS_TICKET',
                  (int) 4 => 'SHOW_TICKETS_ANWSERS',
                  (int) 5 => 'REPLY_TO_HIS_TICKETS'
              )
              2 => array(
                  (int) 0 => 'POST_TICKET',
                  (int) 1 => 'VIEW_TICKETS',
                  (int) 2 => 'DELETE_HIS_TICKET',
                  (int) 3 => 'RESOLVE_HIS_TICKET',
                  (int) 4 => 'SHOW_TICKETS_ANWSERS',
                  (int) 5 => 'REPLY_TO_HIS_TICKETS'
              )
          }
      }
      tables => array(
          (int) 0 => 'support__tickets',
          (int) 1 => 'support__reply_tickets'
      )
  }
  eywek.shop.1 => object(stdClass) {
      name => 'Boutique'
      slug => 'shop'
      nav => true
      admin => false
      author => 'Eywek'
      version => '0.3.1'
      apiID => (int) 1
      useEvents => false
      permissions => object(stdClass) {
          available => array(
              (int) 0 => 'CREDIT_ACCOUNT',
              (int) 1 => 'CAN_BUY'
          )
          default => object(stdClass) {
              0 => array(
                  (int) 0 => 'CREDIT_ACCOUNT',
                  (int) 1 => 'CAN_BUY'
              )
              2 => array(
                  (int) 0 => 'CREDIT_ACCOUNT',
                  (int) 1 => 'CAN_BUY'
              )
          }
      }
      tables => array(
          (int) 0 => 'shop__items',
          (int) 1 => 'shop__categories',
          (int) 2 => 'shop__vouchers',
          (int) 3 => 'shop__paypals',
          (int) 4 => 'shop__paysafecards',
          (int) 5 => 'shop__paysafecard_messages',
          (int) 6 => 'shop__starpasses'
      )
  }
}

Les plugins sont différencier avec un ID propre à eux-même qui se compose comme ceci : auteur.slug.apiID Où le slug est le nom du dossier de votre plugin.

Vous avez aussi accès aux variables $pluginsInFolder et $pluginsInDB qui vous retourne un array des plugins contenus dans leur dossier ou en base de données (donc installés). Ces listes ne sont pas rafraîchi après la suppression et/ou installation de nouveaux plugins. Il y a donc de forte chance que celles-ci ne soient pas à jour.

Utiliser les events

Dans la config.json du plugin, passez useEvents à true.

Pour créer un écouteur (Listener), il vous faut créer un fichier dans le dossier /Event/ de votre plugin. Le fichier doit être appelé de la manière suivante {PLUGIN_NAME}{NOM}EventListener.php (préfixé par le slug de votre plugin).

Exemple: ShopBuyEventListener Et son contenu doit être comme ceci :

<?php
  App::uses('CakeEventListener', 'Event');

  class {PLUGIN_NAME}{NOM}EventListener implements CakeEventListener {

    private $controller;

    public function __construct($request, $response, $controller) {
      $this->controller = $controller;
    }

    public function implementedEvents() {
        return array();
    }
  }

Pour écouter un event il vous faut l'ajouter dans l'array retourné par la fonction implementedEvents() avec votre fonction comme valeur. Et il vous faut ensuite créer votre fonction. Exemple :

<?php
  App::uses('CakeEventListener', 'Event');

  class NAMEEventListener implements CakeEventListener {

    public function implementedEvents() {
        return array(
          'requestPage' => 'mafonction'
        );
    }

    public function mafonction($event) {

    }
  }

Liste des events disponibles

Global

Fonction particulière

News

User

[PLUGIN] Shop

[PLUGIN] Vote

Utiliser les modules

C'est quoi ?

Les modules permettent aux développeurs de plugins d'ajouter du code HTML ou du code PHP … facilement depuis des pages du CMS.

Liste des modules

Les modules disponibles sont :

Comment les utiliser ?

Pour utiliser un module dans votre plugin, il vous suffit de créer un dossier /Modules/ dans le dossier de votre plugin. Il vous faut ensuite créer un fichier nommé par le nom du module que vous voulez utilisez et avec l'extension .ctp.

Par exemple pour utiliser le module user_profile il vous faut créer le fichier /Modules/user_profile.ctp.

Dans ce fichier, vous pouvez ajouter le code que vous souhaitez, HTML, PHP ou encore JS ou CSS.

Créer des thèmes

Introduction

Un thème, c’est des fichiers qui sont ajoutés à votre CMS pour transformer l'apparence de celui-ci. Différents thèmes “officiels” sont déjà disponibles sur le site de MineWeb. D’autres peuvent être développés par la communauté et c’est le but de ce tutoriel.

Il faut savoir que les thèmes sont une couche supplémentaire, c'est à dire que si votre thème ne s'occupe pas d'une page du site, c'est le thème par défaut qui prendra la relève.

Création des dossiers & fichiers

Dans un premier temps, il va falloir créer le dossier de votre thème, ce dossier doit être créé dans le dossier app/View/Themed/. Le nom du dossier doit être le nom de votre thème. Par exemple si je veux créer un thème de démonstration, je vais l’appeler : Demo (évitez les accents, les espaces et les tirets, essayez d'utiliser des mots anglais pour le nom du dossier).

Une fois ce dossier créé, il faut créer différents autres dossiers et fichiers :

C’est tout pour les dossiers, il nous reste maintenant encore des fichiers à créer tels que :

Config/config.json.

Utilisation de la configuration

Pour que votre thème soit valide, celui-ci doit contenir un fichier config.json dans le dossier Config/ du thème. Ce fichier doit contenir des informations bien précises au format JSON.

{
    "name": "",
    "slug": "",
    "author": "",
    "version": "",
    "apiID": 0,
    "configurations": {},
    "supported": {}
}

Vous allez devoir configurer les informations les plus importantes. Tout d'abord le name qui est le nom de votre thème, vous pouvez à cet endroit écrire le nom de votre thème en français, avec des accents, espaces ou autre si vous le souhaitez. Ce nom sera affiché sur le panel admin du CMS. (Exemple: Démonstration) Après, il faut configurer le slug, il faut ici insérer le nom du dossier du thème précédemment choisi (exemple: Demo). Pour la colonne author, mettez ici votre pseudo. Pour la version du thème, la version doit être au format 0.0.0 comme expliqué ici. Pour apiID, laissez ceci à 0, ne vous en souciez pas, il sera automatiquement rempli quand vous soumettrez votre thème au market de mineweb.org. Ne vous occupez pas non plus de configurations et supported, nous verrons cela plus tard.

Modifier la disposition globale du site

Nous allons dans cet étape voir comment modifier la disposition du site, tous les éléments qui seront affichés sur chaque page (head, footer …) Pour modifier ceci, il vous faut créer un fichier default.ctp dans le dossier Layouts.

Pour le contenu du fichier default.ctp vous pouvez prendre exemple sur les thèmes déjà existants ou sur le thème par défaut (le fichier default.ctp se trouverai alors dans /app/View/Layouts/default.ctp). Certaines parties de code contenu dans le default.ctp doivent être conservées, comme par exemple ceci en fin de page :

<?= $this->Html->script('app.js') ?>
<?= $this->Html->script('form.js') ?>
<script>
// Config FORM/APP.JS

var LIKE_URL = "<?= $this->Html->url(array('controller' => 'news', 'action' => 'like')) ?>";
var DISLIKE_URL = "<?= $this->Html->url(array('controller' => 'news', 'action' => 'dislike')) ?>";

var LOADING_MSG = "<?= $Lang->get('GLOBAL__LOADING') ?>";
var ERROR_MSG = "<?= $Lang->get('GLOBAL__ERROR') ?>";
var INTERNAL_ERROR_MSG = "<?= $Lang->get('ERROR__INTERNAL_ERROR') ?>";
var FORBIDDEN_ERROR_MSG = "<?= $Lang->get('ERROR__FORBIDDEN') ?>"
var SUCCESS_MSG = "<?= $Lang->get('GLOBAL__SUCCESS') ?>";

var CSRF_TOKEN = "<?= $csrfToken ?>";
</script>

<?php if(isset($google_analytics) && !empty($google_analytics)) { ?>
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

    ga('create', '<?= $google_analytics ?>', 'auto');
    ga('send', 'pageview');
  </script>
<?php } ?>
<?= (isset($configuration_end_code)) ? $configuration_end_code : '' ?>

Vous pouvez trouver plus d'informations sur la documentation officiel de CakePHP (Framework PHP utilisé pour MineWeb).

Ce code permet de faire fonctionner correctement MineWeb notamment les formulaires en AJAX ou d'afficher les paramètres configurées sur le panel admin.

Modifier les différentes pages

Pour modifier les différentes pages du CMS il vous faudra créer un dossier avec le nom du Controller et un fichier .ctp avec le nom de l'action. Si vous ne comprenez pas ou que vous ne pouvez pas vous embêter, prenez exemples sur des thèmes déjà fait (app/View/Themed si vous en avez téléchargé depuis votre panel admin) ou sur le thème de base (app/View/).

Par exemple, pour modifier la page affichée quand vous lisez une news/un article, il vous faudra créer un fichier News/index.ctp et y insérer le contenu que vous souhaitez selon le modèle du thème par défaut (pour utiliser les bonnes variables).

Modifier les différentes pages d'un plugin

Pour modifier les pages d'un plugin il vous faudra tout comme à l'étape précédente créer un dossier avec le nom du Controller et un fichier avec le nom de l'action, sauf que il vous faudra placer ce dossier dans un autre dossier appelé Plugin.

Il est mieux aussi de préciser dans la configuration si vous supporter (stylisé) des plugins. Pour cela, revenons dans le fichier Config/config.json et nous allons toucher à supported. En effet, vous aller devoir écrire l’ID du plugin et la ou les versions supportées. Par exemple :

{
    ...
    "supported": {
        "eywek.shop.1": "1.0.0"
    }
}

Vous pouvez voir que l’ID du plugin est spécial, en effet celui-ci se compose de la manière suivante : auteur.nomdudossier.apiID, vous pouvez donc trouver cet ID vous même facilement en regardant l'intérieur du config.json d'un plugin. Pour la version, nous avons ici mis la version du plugin, mais vous pouvez très bien la faire précéder d'un outil de comparaison. Comme ceci :

{
    ...
    "supported": {
        "eywek.shop.1": ">= 1.0.0"
    }
}

A ce moment là, vous indiquez que votre thème supporte uniquement les versions du plugin “Boutique” au dessus et incluant la 1.0.0.

Utiliser des fichiers CSS, JS ou images personnalisés

Il est utile quand vous créer un thème de pouvoir utiliser des fichiers CSS/JS personnalisés ou même des images. Pour cela, il vous suffit de créer un dossier webroot contenant les sous-dossiers :

Ces donc dans ces dossiers que vous glisserez vos fichiers. Pour pouvoir les inclure facilement, il vous suffit de faire ceci dans vos fichiers .ctp :

<?= $this->Html->css('NomDuDossierDuTheme.votrefichier.css') ?>
<?= $this->Html->script('NomDuDossierDuTheme.votrefichier.js') ?>
<?= $this->Html->img('votreimage.ext', array('alt' => 'Ce que je veux')) ?>

Vous pouvez avoir plus d'informations ici.

La personnalisation

php