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 19) Champs standards - modifier et modifier par


Dans cette partie, nous allons rajouter de nouveaux champs standards dans notre base de données. Tout se passera côté administrateur donc dans le dossier administrator. Si vous êtes arrivés directement sur cette page, peut-être que vous aimeriez commencer par le début: Partie 1 | Partie 2 | Partie 3 | Partie 4 | Partie 5 | Partie 6 | Partie 7 | Partie 8 | Partie 9 | Partie 10 | Partie 11 | Partie 12 | Partie 13 | Partie 14 | Partie 15 | Partie 16 | Partie 17 | Partie 18

1 - Introduction

Nous avons ajouté quelques champs standards dans la partie 9. Ici nous allons en rajouter d'autres pour rendre notre composant plus complet. Notons qu'on aurait pu mettre tous ces champs au début en créant notre table. Mais l'expérience de rajouter des tables au fur et à mesure vous sera utile plus tard car souvent les clients font des demandes de modification qui nous emmènent à ajouter de nouveaux champs voir même de nouvelles tables. Voici les champs que nous allons ajouter:

- modified : la date et l'heure de modification

- modified_by : l'id de l'utilisateur qui a effectué la modification

- checked_out : l'id de l'utilisateur qui est en train de de modifier l'élément

- checked_out_time : La date et l'heure de la modification en cours

- ordering : ce champ sert à ordonner les éléments afin de les afficher sur le site dans l'ordre désiré

 

Notons que les champs checked_out et checked_out_time servent à éviter que plusieurs administrateurs modifient un même élément au même moment. Le premier à ouvrir l'élément aura son id dans le champ checked_out et la date et l'heure à laquelle il l'a ouvert seront enregistrées dans checked_out_time. Tous les autres administrateur verrons apparaître un cadenas devant le nom et ne pourrons pas modifier l'élément. Un administrateur peut cliquer sur le cadenas pour le déverrouiller l'élément et ainsi pouvoir accéder au formulaire de modification. 

2 - Modification de la table #__djguitariste_items

Nous allons exécuter le script SQL suivant dans phpmyadmin pour ajouter les 5 nouveaux champs dans notre table (remplacez #_ par le préfixe des tables de votre site Joomla sinon vous ferez face à des erreurs. le préfixe est le groupe de caractères qui vient avant le premier _ )


alter table #__djguitariste_items ADD modified DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
alter table #__djguitariste_items ADD modified_by INTEGER(10) unsigned NOT NULL DEFAULT 0;
alter table #__djguitariste_items ADD checked_out INTEGER(10) unsigned NOT NULL DEFAULT 0;
alter table #__djguitariste_items ADD checked_out_time DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
alter table #__djguitariste_items ADD ordering INTEGER(10) unsigned NOT NULL DEFAULT 0;

3 - Sauvegarde de modified et modified_by

La modification pour sauvegarder ces deux champs est assez simple. Dans la méthode store du fichier de table guitariste.php, nous vérifions si l'id existe, on sauvegarde l'id de l'utilisateur qui fait la modification dans modified_by sinon on ne fait rien. La date de modification est sauvegardé dans tous les cas. Le fichier de table guitariste.php se trouve dans le dossier tables. Voici la méthode store() après la modification (la section concernée est en couleur).


public function store($updateNulls = false){
    $date = JFactory::getDate();
    $user = JFactory::getUser();
    
    if(!$this->id){
      if(!(int)$this->created){
        $this->created = $date->toSql();
      }
      
      if(empty($this->created_by)){
        $this->created_by = $user->get('id');
      }
    }else{
      $this->modified_by = $user->get('id');
    }
    
    $this->modified = $date->toSql();
    
    if(empty($this->publish_up)){
      $this->publish_up = $this->_db->getNullDate();
    }
    
    if(empty($this->publish_down)){
      $this->publish_down = $this->_db->getNullDate();
    }
    
    return parent::store($updateNulls);
    
}

Maintenant si vous modifiez un guitariste, vous pouvez voir dans la base de données que la date de modification et l'ID de l'utilisateur sont sauvegardés.

4 - Mise à jour du fichier SQL d'installation

Évidement nous devons mettre à jour le fichier SQL d'installation pour que tous ces champs soient disponible dès l'installation de notre composant. Ouvrons le fichier install.mysql.sql qui se trouve dans le dossier sql. Voici la version modifiée du code qui sera exécuté pour la création de notre table:


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 '',
  `alias` varchar(255) NOT NULL,
  `metadesc` varchar(1024) DEFAULT NULL,
  `metakey` varchar(1024) DEFAULT NULL,
  `catid` int(10) unsigned NOT NULL DEFAULT '0',
  `ordering` int(11) NOT NULL DEFAULT '0',
  `created_by` int(10) unsigned NOT NULL DEFAULT '0',
  `created_by_alias` varchar(255) NOT NULL,
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified_by` int(10) unsigned NOT NULL DEFAULT '0',
  `checked_out` int(10) unsigned NOT NULL DEFAULT '0',
  `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `state` tinyint(2) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

5 - Exercice

Afficher la date de création dans la vue liste.

Le champ created est celui qui contient la date de création des éléments donc vous devez l'ajouter dans la liste des éléments à sélection dans la méthode getListQuery() du modèle (guitaristes.php).

Dans le tableau de la vue liste, ajoutez un th dans la section head juste avant le dernier th qui contient l'ID. Affiché "Date de création" dans la balise th en passant par JText::_('VOTRE_CLE') et en vous servant du fichier de langue.

Évidement vous devez aussi ajouter une balise td qui contiendra la date de création. Si vous afficher la date vous aurez la date et l'heure de création. Si vous voulez afficher juste la date, vous pouvez faire appel à la classe JHtml comme ceci:

<td class="nowrap"><?php echo JHtml::_('date', $this->escape($item->created), JText::_('DATE_FORMAT_LC4')); ?></td> 

Si vous avez des questions, vous pouvez vous servir du formulaire de contact ou de notre page Facebook.

Lire la suite...


  • Dernière modification le lundi, 16 octobre 2017 16:18
  • 280
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.