• Programmation des widgets

    Avant de commencer, j'indique que les « modules » qui composent chaque partie des pages du CMS de vBulletin sont appelés des « widgets ».

    Introduction

    Ceci est plus réalisé pour les personnes ayant déjà une certaine expérience avec le code PHP dans la programmation de vBulletin.Vous devez avoir au moins une compréhension basique du système de templates de vB ainsi que du système d'expressions. Si cela n'est pas le cas, il est recommandé de vous entraîner à comprendre les systèmes évoqués avant de tenter de programmer un gadget. L'exemple qui sera utilisé ici est un widget avec code HTML statique.

    Ceci est rédigé bien avant l'heure (la première phase de test alpha des forums uniquement vient de commencer à l'heure de la rédaction de cet article). Néanmoins, il est possible de fournir quelques informations. Un fichier compressé est disponible à la source anglaise de cet article.

    Le widget en code HTML statique est le plus simple, ce pourquoi il est utilisé ici. Si vous comprenez toute la suite, il vous manquera que 2 choses. Vous pouvez appeler $this->content->getNodeId() pour obtenir l'identifiant unique de la page où vous vous trouvez. Ceci vous permet par exemple de créer des widgets de navigation qui ont dépendants de la page. Aucun de ces widgets ont besoin de cela. Aussi, la plupart des widgets doivent être mis en cache. Il y a un algorithme générique de mise en cache - le premier paramètre est une valeur ou un tableau de valeurs qui forme une clef. vB_Cache::instance()->write et vB_Cache::instance()->read effectuent cela pour vous.

    Au risque de se répéter, voici quelques explications sur la hiérarchie.

    Dans le système CMS, vous définissez des grilles. Les grilles divisent la page en colonnes, avec des paramètres pour un en-tête et une barre latérale optionnels.

    Ensuite, vous créez des widgets. Les widgets sont une combinaison d'un type de widget (par exemple : HTML statique), plus une configuration. Si vous souhaitez dix vidéos de Youtube différentes par exemple, cela fera dix instances du widget HTML statique. Si vous souhaitez cinq widgets Google différents, cela fera cinq instances du widget HTML statique.

    Ensuite, vous définissez la mise en page. Les mises en page incluent le contenu principal dans une grille, et de façon optionnelle, de placer un ou plusieurs widgets à des endroits spécifiques. Vous appliquez une mise en page et un style à chaque section (les sections sont la principale organisation dans le CMS, mais pas la seule). Toutes les pages de cette section utiliseront cette mise en page.

    Ceci dit, vous pouvez avoir une sorte de formulaire où les utilisateurs peuvent insérer des informations à propos de chaque article. Vous pouvez créer votre propre table dans votre base de données et vous en servir. Ou vous pouvez utiliser la méthode de stockage des widgets que nous avons développé. Dans ce cas, vous pouvez vouloir utiliser une configuration par page.

    Exemple de code

    Fichiers

    Vous avez besoin de deux fichiers. Vous devez définir un paquetage et une classe. Le paquetage doit être quelque chose d'unique. La classe peut être tout ce que vous voulez, mais c'est généralement quelque chose de descriptif. Vous devez créer la structure de fichiers suivante :

    <répertoire vBulletin>
    /packages (déjà présent)
    /<Votre paquetage>
    /item
    /content
    /<votre classe>
    /content
    /<votre classe>
    Remarquez que tous les noms de fichiers et chemins sont en minuscule. Le widget HTML statique a sont paquetage appelé « vBCms » et la classe « Static ». Les fichiers sont les suivants :

    • /packages/vbcms/item/content/static.php
    • /packages/vbcms/content/static.php

    Base de données

    Vous devez créer deux entrées dans la base de données pour utiliser votre widget. Dans la table TABLE_PREFIXpackage, vous devez insérer un enregistrement avec package = <votre paquetage>. Dans la table TABLE_PREFIXwidgettype, vous avez besoin de créer une entrée avec class = <votre classe>, packageid = <l'identifiant de votre paquetage dans la table package>.

    Fichier de l'objet

    Ce fichier est simple. C'est uniquement pour la commodité du CMS. Vous déclarez une classe, et vous définissez le paquetage et la classe. si vous avez un paramètre de configuration par défaut, vous pouvez l'insérer ici. Voici le contenu du fichier pour le widget HTML statique.

    Code PHP:
    <?php if (!defined('VB_ENTRY')) die('Access denied.');

    class 
    vBCms_Item_Widget_Static extends vBCms_Item_Widget
    {
        protected 
    $package 'vBCms';
        protected 
    $class 'Static';
        protected 
    $config = array('html' => 'Insérez votre code HTML  ici.')
    }
    ?>
    Fichier du contenu

    C'est le fichier qui fait tout le travail. Vous devez, au minimum, créer deux fonctions : getConfigView et getPageView. Le premier est appelée pour configurer votre widget, et le second est appelée pour afficher le contenu. Avec la plupart des widgets, vous souhaiterez mettre en cache le contenu. Pour le widget HTML statique, il y a qu'une requête pour récupérer les données.

    Voici le contenu de ce fichier. Le texte en bleu n'existe pas dans le fichier, il est là pour vous donner des explications sur sa conception.

    --------------------------------------------------------

    Ce fichier PHP ne doit jamais être appelé directement, uniquement à partir d'une page proprement initialisée. Le code à droite de <?php s'en assure.

    <?php
    if (!defined('VB_ENTRY')) die('Access denied.');

    Informations sur la licence

    /*================================================= =====================*\
    || ################################################## ################## ||
    || # vBulletin [#]version[#] - Licence Number [#]license[#]
    || # ---------------------------------------------------------------- # ||
    || # Copyright ©2000-[#]year[#] vBulletin Solutions, Inc. All Rights Reserved. ||
    || # This file may not be redistributed in whole or significant part. # ||
    || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
    || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
    || ################################################## ################## ||
    \*================================================ ======================*/

    /**
    * Static HTML Widget Controller
    *
    * @package vBulletin
    * @author vBulletin Development Team
    * @version $Revision: 32974 $
    * @since $Date: 2009-10-30 13:19:39 -0500 (Fri, 30 Oct 2009) $
    * @copyright vBulletin Solutions, Inc.
    */

    Déclaration de la classe

    class vBCms_Widget_Static extends vBCms_Widget
    {
    /*Properties======================================= =============================*/

    /**
    * A package identifier.
    * This is used to resolve any related class names.
    * It is also used by client code to resolve the class name of this widget.
    *
    * @var string
    */

    Déclaration du paquetage et la classe. Vous devez effectuer ceci afin que les gestionnaires de données et les autres composants sachent comment interpréter les insertions

    protected $package = 'vBCms';

    /**
    * A class identifier.
    * This is used to resolve any related class names.
    * It is also used by client code to resolve the class name of this widget.
    *
    * @var string
    */
    protected $class = 'Static';

    /*Render=========================================== =============================*/

    /**
    * Returns the config view for the widget.
    *
    * @return vBCms_View_Widget - The view result
    */

    Voici la première fonction essentielle. Ceci crée l'interface de configuration et enregistre la sauvegarde. Il y a un template appelé vbcms_widget_static_config.

    public function getConfigView()
    {
    Ceci s'assure que tout a bien été chargé. Les classes sont lentes à charger.

    $this->assertWidget();

    Vérifie et stocke les variables du formulaire que nous voulons.

    vB::$vbulletin->input->clean_array_gpc('r', array(
    'do' => vB_Input::TYPE_STR,
    'html' => vB_Input::TYPE_STR,
    'template_name' => vB_Input::TYPE_STR
    ));

    Obtention de l'affichage du template. Cette méthode de rendu des templates est nouveau pour le CMS. Vous pouvez utiliser les anciennes méthodes, mais ceci est un peu plus rapide.

    $view = new vB_View_AJAXHTML('cms_widget_config');

    Définition de l'intitulé

    $view->title = new vB_Phrase('vbcms', 'configuring_widget_x', $this->widget->getTitle());

    Chargement de la configuration

    $config = $this->widget->getConfig();

    Vérifions si nous avons des données à enregistrer. La fonction verifyPostId, avec la fonction addPostId, ajoute une couche de sécurité.

    if (('config' == vB::$vbulletin->GPC['do']) AND $this->verifyPostId())
    {
    Obtention du gestionnaire de données et définition des valeurs.

    $config['html'] = str_replace('%u0025', '%' , vB::$vbulletin->GPC['html']);
    if (vB::$vbulletin->GPC_exists['template_name'])
    {
    $config['template_name'] = vB::$vbulletin->GPC['template_name'];
    }

    $widgetdm = $this->widget->getDM();
    $widgetdm->set('config', $config);

    Nous n'avons pas vraiment besoin de cet appel dans ce widget. Nous avons la possibilité de définir des widgets qui ont une configuration par page. Pour ce widget, nous avons une simple configuration. Si vous souhaitez un widget HTML statique différent, vous devez créer une nouvelle instance du widget. Nous laissons ceci ici au cas où nous souhaiterions étendre ceci plus tard.

    if ($this->content)
    {
    $widgetdm->setConfigNode($this->content->getNodeId());
    }

    Enregistrement

    $widgetdm->save();

    Vérification des erreurs, et afficher un message si il y en a le besoin.

    if (!$widgetdm->hasErrors())
    {
    if ($this->content)
    {
    $segments = array('node' => $this->content->getNodeURLSegment(),
    'action' => vB_Router::getUserAction('vBCms_Controller_Content ', 'EditPage'));
    $view->setUrl(vB_View_AJAXHTML::URL_FINISHED, vBCms_Route_Content::getURL($segments));
    }

    Afficher que nous avons fini

    $view->setStatus(vB_View_AJAXHTML::STATUS_FINISHED, new vB_Phrase('vbcms', 'configuration_saved'));
    }
    else
    {
    if (vB::$vbulletin->debug)
    {
    $view->addErrors($widgetdm->getErrors());
    }

    Envoi unique d'un message

    $view->setStatus(vB_View_AJAXHTML::STATUS_MESSAGE, new vB_Phrase('vbcms', 'configuration_failed'));
    }
    }
    else
    {
    Maintenant, créons l'interface de configuration. On crée en premier l'affichage.

    // add the config content
    $configview = $this->createView('config');

    if (!isset($config['template_name']) or ('' == $config['template_name']) )
    {
    $config['template_name'] = 'vbcms_widget_static_page';
    }

    Ajout du code HTML

    $configview->html = $config['html'] ? htmlspecialchars_uni($config['html']) : '';

    // item id to ensure form is submitted to us

    Définition des variables du formulaire pour la sécurité.

    $this->addPostId($configview);

    Chargement de la configuration et de l'état.

    // send the view
    $view->setStatus(vB_View_AJAXHTML::STATUS_VIEW, new vB_Phrase('vbcms', 'configuring_widget'));
    }

    Et retourne l'affichage.
    return $view;
    }

    Et la seconde fonction. Ceci crée le widget.

    /**
    * Fetches the standard page view for a widget.
    *
    * @return vBCms_View_Widget - The resolved view, or array of views
    */
    public function getPageView()
    {
    S'assure que le widget est bien chargé.

    $this->assertWidget();

    Obtention de la configuration - dans ce cas, c'est le code HTML et le template.

    $config = $this->widget->getConfig();

    if (!isset($config['template_name']) or ('' == $config['template_name']) )
    {
    $config['template_name'] = 'vbcms_widget_static_page';
    }

    Création de l'affichage.

    // Create view
    $view = new vBCms_View_Widget($config['template_name']);

    Définition de la classe, l'intitulé et la description.

    $view->class = $this->widget->getClass();
    $view->title = $this->widget->getTitle();
    $view->description = $this->widget->getDescription();

    Chargement de l'affichage.

    $view->static_html = $config['html'];

    Et on retourne l'affichage.

    return $view;
    }
    /*================================================= =====================*\
    || ################################################## ##################
    || # Downloaded: [#]zipbuilddate[#]
    || # SVN: $Revision: 32974 $
    || ################################################## ##################
    \*================================================ ======================*/
  • Donations Dons

    Si vous aimez ce site et que vous souhaitez nous supporter, vous pouvez effectuer un don. Tous les dons sont gracieusement acceptés.

    Indiquez la valeur souhaitée au format « xx.xx ».


    Sélectionnez votre monnaie et le montant du don que vous souhaitez effectuer, puis cliquez sur l'image ci-dessous.

  • Horloge

  • Calendrier

    Mars   2024
    Di Lu Ma Me Je Ve Sa
    1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    31
  • Derniers mods Derniers mods

    [Additions majeures] - vbBux &...
    - par Dadoo

    [Chat] - Demande de...
    - par lasilix

    [Portails] - vBadvanced...
    - par Dadoo

    [Additions majeures] - Librairie de...
    - par Dadoo

    [Additions majeures] - microNEWSLETTER...
    - par Dadoo

    [Additions majeures] - Tournois &...
    - par Dadoo

    [Additions majeures] - Clavier Virtuel
    - par Greggg

    [Outils d'administration] - Envoyer un...
    - par Greggg

    [Outils de modération] - Outils de...
    - par Greggg

    [Add-ons] - Copyright...
    - par Greggg