Connexion S'inscrire

Connectez-vous

Login *
Mot de passe *
Se souvenir de moi

Créer un compte

Les champs marqués d'un astérisque (*) sont requis.
Nom *
Login *
Mot de passe *
Vérification mot de passe *
Email *
Vérification email *
Captcha *

Création d'un composant Joomla (partie 2) - La base de données


Dans cette partie du tutoriel, nous allons ajouter une table dans la base de données pour notre composant avec quelques données d'exemple. Cette table sera utilisé pour sauvegarder les informations sur chaque guitariste. Pour comprendre ce tutoriel, vous devez d'abord lire la partie 1, Cliquez ici pour lire la partie 1.

1 - Création de la table

Allez dans le dossier du composant en administration et créer un dossier nommé "sql" (administrator/components/com_djguitariste/sql). N'oubliez pas d'y a ajouter un fichier index.html vide. Nous allons y créer un fichier sql que Joomla utilisera pour créer notre table. Créez un fichier nommé "install.mysql.sql". Voici le contenu de ce fichier:


CREATE TABLE IF NOT EXISTS `#__djguitariste_items` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(250) NOT NULL DEFAULT '',
  `picture` varchar(250) NOT NULL DEFAULT '',
  `intro` mediumtext NOT NULL,
  `biography` text NOT NULL,
  `youtube_video` varchar(255) NOT NULL DEFAULT '',
  `website` varchar(255) NOT NULL DEFAULT '',
  `facebook` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8;


---Nous ajoutons juste les données importantes. Le reste se fera plus tard en administration
INSERT IGNORE INTO `#__djguitariste_items` (`id`, `name`, `picture`, `intro`, `biography`, `youtube_video`, `website`, `facebook`) VALUES
(1, 'Chet Atkins', '', 'Un très bon guitariste un des pilier du fingerstyle', '<p>Voici la biographie de Chet Atkins</p>', 'Cyiq6lewgOk', 'http://www.misterguitar.us/', ''),
(2, 'Martin Taylor', '', 'Un Jazzman très fort', '<p>Voici la biographie de Martin Taylor</p>', '56Ers_n0oMM', 'http://martintaylor.com/', 'https://www.facebook.com/martintaylorMBE/'),
(3, 'Tommy Emmanuel', '', 'Un autre guitariste', '<p>Voici la biographie de Tommy Emmanuel</p>', 'cPkQn5nDTZs', 'http://tommyemmanuel.com/', 'https://www.facebook.com/tommyemmanuel/'),
(4, 'Salif Keita', '', 'Un des meilleurs guitaristes de Mali', '<p>La biographie de Salif Keita</p>', 'gXaJbu6M5e0', 'http://www.salifkeita.net/', 'https://www.facebook.com/pages/Salif-Keïta/112759028735347');

 

Nous allons aussi créer un autre fichier sql nommé "uninstall.mysql.sql" pour la suppression de la table lorsque Joomla désinstalle notre composant. Voici le contenu du fichier:


DROP TABLE IF EXISTS `#__djguitariste_items`;

Lors de l'installation, Joomla remplace automatiquement les caractères "#__" par le préfixe des tables (le préfixe peut être consulté dans le fichier configuration.php à la racine de votre site Joomla).

1 - a Création d'une archive d'installation

Pour que Joomla créé notre table dans base de données, nous avons besoin de le lui demander. Modifier le fichier xml d'installation (/administrator/components/com_djguitariste/dgguitariste.xml) et ajoutez ces lignes :


<install>
  <sql>
	<file driver="mysql" charset="utf8">sql/install.mysql.sql</file>
  </sql>
</install>
<uninstall>
  <sql>
	<file driver="mysql" charset="utf8">sql/uninstall.mysql.sql</file>
  </sql>
</uninstall>

Au final, votre fichier djguitariste.xml devrait contenir ceci:


<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.0" method="upgrade">
    <name>com_djguitariste</name>
    <author>Docteur Joomla</author>
    <creationDate>December 2016</creationDate>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
    <authorEmail>Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</authorEmail>
    <authorUrl>www.docteurjoomla.com</authorUrl>
    <version>1.0</version>
    <description>COM_DJGUITARISTE_XML_DESCRIPTION</description>
    
    <install>
      <sql>
        <file driver="mysql" charset="utf8">sql/install.mysql.sql</file>
      </sql>
    </install>
    <uninstall>
      <sql>
        <file driver="mysql" charset="utf8">sql/uninstall.mysql.sql</file>
      </sql>
    </uninstall>
    
    <files folder="site">
        <filename>djguitariste.php</filename>
        <filename>index.html</filename>
    </files>
    
    <administration>
        <menu>COM_DJGUITARISTE</menu>
        <submenu>
            
        </submenu>
        
        <files folder="admin">
            <filename>djguitariste.php</filename>
            <filename>index.html</filename>
            <folder>sql</folder>
        </files>
    </administration>
</extension>

Créez un dossier sur votre bureau ou à l'emplacement de votre choix. Créez 2 sous-dossiers "admin" et "site". Copiez tous les fichiers du composant en admin dans le dossier admin (ses fichiers se trouvent dans /administrator/components/com_djguitariste/). Copiez les fichiers du composant frontend dans le dossier site (ses fichiers se trouvent dans /components/com_djguitariste). Compressez le dossier dans un des format supportés par Joomla.

Maintenant, connectez-vous à l'administration de votre site de test, désinstallez la version antérieur du composant et installez la nouvelle. Maintenant, si vous allez dans la base de données, vous verrez la table la table dont le nom se termine par djguitariste_items.

 

2 - Affichage des données venant de la table

À partir d'ici, nous ne réinstallerons plus le composant mais nous ajouterons les nouveau fichiers directement dans les repertoires du composant. À la fin du tutoriel, nous allons créer une archive d'installation finale. Vous pouvez modifier directement les fichiers sur le site de test pour gagner du temps

Nous allons mettre en place les Modèles, la Vues et le Contrôleurs (MVC) afin d'afficher les données sur le site. Allez dans le répertoire components/com_djguitariste dans le dossier principal de votre site et ouvrez le fichier djguitariste.php. Nous allons effacer le texte "Bonjour le monde!!!" pour le remplacer par l'instanciation du contrôleur. Le contenu du fichier devient:


<?php
defined('_JEXEC') or die;
  
$controller = JControllerLegacy::getInstance('DJGuitariste');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();

Nous allons créer le fichier contrôleur au même emplacement que le fichier djguitariste.php. Créez un fichier nommé "controller.php". Ouvrez le fichier "controller.php" avec un éditeur de code pour créer la classe de contrôleur. Dans la méthode display qui gère l'affichage, nous allons récupérer la vue dans l'url grâce à la propriété input qui est une instance de la classe JInput (la classe qui gère l'accès aux données en post, get). La vue est prise dans l'url. Si elle est manquante, La vue par défaut sera utilisée. Voici le contenu du fichier "controller.php":


<?php
defined('_JEXEC') or die;

class DJGuitaristeController extends JControllerLegacy
{
  public function display($cachable = false, $urlparams = false)
  {
    $document = JFactory::getDocument();
    
    //La vue par défaut est guitaristes la page qui va afficher la liste
    $vName = $this->input->get('view', 'guitaristes');
    $this->input->set('view', $vName);
    
    $safeurlparams = array(
      'id'=>'INT',
    );
    
    parent::display($cachable, $safeurlparams);
    
    return $this;    
  }
} 

Maintenant nous allons créer le dossier de vue. Toujours au même emplacement, créez un dossier nommé "views". Dans le dossier views, créez un sous dossier "guitaristes". Dans le dossier "guitaristes", créer un fichier nommé "view.html.php" et un dossier nommé "tmpl". Votre architecture devrait ressemblé à cet image:

Voici le contenu du fichier "view.html.php":


<?php
defined('_JEXEC') or die;

class DJGuitaristeViewGuitaristes extends JViewLegacy
{
  public function display($tpl = null)
  {
//Nous récupérons les enregistrement en faisant appel au modèle $guitaristes = $this->get('Items'); $this->guitaristes = &$guitaristes; parent::display($tpl); } }

Dans le dossier tmpl, nous allons créer le fichier "default.php" qui contiendra le code html de la page liste de guitaristes. Rajoutez aussi un fichier index.html vide dans ce dossier. Dans le fichier "default.php", nous allons mettre le code suivant qui va juste afficher la liste des noms de guitaristes venant de la base de données.


<?php
defined('_JEXEC') or die;
?>
<div class="item-page guitaristes">
<?php
  if(empty($this->guitaristes)) { ?>
    <p><?php echo JText::_('COM_DJGUITARISTE_NO_GUITARISTES_FOUND'); ?></p>  
  <?php  
  }
  else {
    foreach($this->guitaristes as $i=>$guitariste){?>
      <p><?php echo $guitariste->name; ?></p>
    <?php  
    }
  }
?>
</div>

 Nous allons mettre en place le modèle pour la récupération des données. Créer un dossier nommé "models" dans le dossier du composant au même niveau que le dossier "views". à l'intérieur du dossier models, créez un fichier nommé "guitaristes.php". Ouvrez le fichier guitaristes.php avec un éditeur de code et ajoutez le code suivant pour créer la classe de model et la méthode getListQuery que Joomla va utiliser pour récupérer la liste des éléments dans la base de données. Voici le contenu de ce fichier:


<?php
defined('_JEXEC') or die;

class DJGuitaristeModelGuitaristes extends JModelList
{
  
  public function getListQuery()
  {
    $db = $this->getDbo();
    $query = $db->getQuery(true);
    $query->select('id,name');
    $query->from('#__djguitariste_items');
    
    return $query;
  }
  
}

Maintenant si vous accédez à la page url/index.php?option=com_djguitariste, vous verez la liste des noms de guitaristes venant de la base de données.

Dans la troisième partie, nous verrons comment créer une page de détail qui listera les informations de chaque guitariste. La liste des noms que nous venons d'afficher sera donc des liens pour aller vers cette page. Cliquez ici pour lire la 3ième partie.


  • Dernière modification le jeudi, 28 septembre 2017 15:08
  • 1230
Docteur Joomla

Après plus de 10 ans d'expérience en Joomla, je lance ce Blog pour partager mes connaissances avec les autres développeurs Joomla.