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 16) Options de publication côté client


Dans cette partie,  nous allons utiliser les options de publications sur le site (côté client). Tout se passera au côté client donc on sort du 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

1 - Introduction

Nous allons mettre des vérifications dans les différents modèles pour ne sélectionner que les éléments dont la date de début et de fin sont nulls ou ceux dont la date de début de publication est passée et pas la date de fin de publication. Autrement dit la date de début de publication doit être inférieur à la date présente et la date de fin de publication doit être supérieur à la date présente. Nous allons aussi afficher le nom de l'auteur en vérifiant si le champ alias de l'auteur est rempli, on l'affiche sinon on affichera le nom venant de son compte d'utilisateur. On va se rendre dans le dossier components/com_djguitariste depuis la racine de votre site Joomla pour travailler sur cette partie.

2 - Modèle catégorie

Dans le dossier models, ouvrons le fichier categorie.php. Dans la méthode getListQuery, nous allons ajouter le code colorié pour effectuer la vérification des dates : 


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

class DJGuitaristeModelCategorie extends JModelList
{
  
  public function getListQuery()
  {
    
    $app = JFactory::getApplication();
    $id = $app->input->getInt('id', 0);
    
    $db = $this->getDbo();
    $query = $db->getQuery(true);
    $query->select('a.id, a.name, a.state, a.publish_up, a.publish_down');
    $query->from($db->quoteName('#__djguitariste_items').' AS a');
    
    $query->select('c.title AS category');
    $query->join('LEFT', $db->quoteName('#__categories').' AS c ON c.id = a.catid');
    $query->where('a.catid = '.(int)$id);
    $query->where('a.state = 1');
    
    $dateNull = $db->Quote($db->getNullDate());
    $now = $db->Quote(JFactory::getDate()->toSql());
    $query->where('(a.publish_up = '. $dateNull .' OR a.publish_up <= '.$now.')');
    $query->where('(a.publish_down = '. $dateNull .' OR a.publish_down >= '. $now.')');
    
    return $query;
  }
  
}

3 - Le modèle guitaristes 

Dans le dossier models, ouvrons le fichier guitaristes.php. Dans la méthode getListQuery, nous allons ajouter le code colorié pour effectuer la vérification des dates : 


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

class DJGuitaristeModelGuitaristes extends JModelList
{
  
  public function getListQuery()
  {
    $db = $this->getDbo();
    $query = $db->getQuery(true);
    $query->select('a.id, a.name, a.state, a.publish_up, a.publish_down');
    $query->from($db->quoteName('#__djguitariste_items').' AS a');
    
    $query->select('c.title AS category');
    $query->join('LEFT', $db->quoteName('#__categories').' AS c ON c.id = a.catid');
    $query->where('a.state = 1');
    
    $dateNull = $db->Quote($db->getNullDate());
    $now = $db->Quote(JFactory::getDate()->toSql());
    $query->where('(a.publish_up = '. $dateNull .' OR a.publish_up <= '.$now.')');
    $query->where('(a.publish_down = '. $dateNull .' OR a.publish_down >= '. $now.')');
    
    return $query;
  }
  
}

4 - Le modèle guitariste

dans ce modèle nous allons apporter plus de modifications que dans les deux premiers. Nous avons besoin de modifier aussi la vue pour afficher le nom de l'auteur, la date de création et la catégorie du guitariste. Le fichier de modèle ici est guitariste.php et se trouve bien sûr dans le dossier models. Nous allons modifier la méthode getItem pour qu'elle retourne le titre de la catégorie, le nom de l'auteur et aussi pour vérifier les dates :


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

class DJGuitaristeModelGuitariste extends JModelItem
{
  
  public function getItem()
  {
    $app = JFactory::getApplication();
    $id = $app->input->getInt('id');
    
    $db = $this->getDbo();
    $query = $db->getQuery(true);
    $query->select('a.*');
    $query->from($db->quoteName('#__djguitariste_items'). ' AS a');
    $query->where('a.id = '.$id);
    
    //Jointure avec catégorie pour prendre le titre à partir du catid
    $query->select('c.title AS category_title');
    $query->join('LEFT', $db->quoteName('#__categories').' AS c ON c.id = a.catid');
    
    //Sélection du nom l'auteur
    $query->select("CASE WHEN a.created_by_alias > '' THEN a.created_by_alias
                    ELSE ua.name END AS author");
    $query->join('LEFT', $db->quoteName('#__users').' AS ua ON ua.id = a.created_by');
                    
    //Vérification des dates
    $dateNull = $db->Quote($db->getNullDate());
    $now = $db->Quote(JFactory::getDate()->toSql());
    $query->where('(a.publish_up = '. $dateNull .' OR a.publish_up <= '.$now.')');
    $query->where('(a.publish_down = '. $dateNull .' OR a.publish_down >= '. $now.')');
    
    $db->setQuery($query);
    $result = $db->loadObject();
    
    return $result;
  }
  
}

4.1 - Le calque de vue guitariste (default.php)

 Juste en dessous de l'affichage du nom dans le fichier default.php qui se trouve dans views/guitariste/tmpl, nous allons ajouter la ligne suivante pour afficher la catégorie :

<p class="dj-category"><?php echo JText::_('JCATEGORY').': '. $this->guitariste->category_title; ?></p>

 Et en bas de la page, nous allons ajouter un bloc dans lequel nous seront affichés le nom de l'auteur et la date de création :


<div class="dj-publishing-info">
  <div class="guitarist-author">
    <span class="label">
      <?php echo JText::_('COM_DJGUITARISTE_AUTHOR_NAME'); ?>
    </span>
    <span class="dj-data">
      <?php echo $this->guitariste->author; ?>
    </span>
  </div>
  
  <div class="dj-creation-date">
    <span class="label">
      <?php echo JText::_('COM_DJGUITARISTE_CREATION_DATE'); ?>
    </span>
    <span class="dj-data">
      <?php echo date('M j, Y', strtotime($this->guitariste->created)); ?>
    </span>
  </div>
</div>

Au final, le contenu du fichier default.php devrait ressembler à ceci (les dernières modifications sont en couleur) :


<?php
defined('_JEXEC') or die;
?>
<div class="item-page guitaristes">
<?php
  if(empty($this->guitariste)) { ?>
    <p><?php echo JText::_('COM_DJGUITARISTE_NO_GUITARISTE_FOUND'); ?></p>  
  <?php  
  }
  else {
    ?>
      <?php
        //Nous essayons d'afficher la photo si elle n'est pas vide
       if(!empty($this->guitariste->picture)){ ?>
        <img src="/<?php echo $this->guitariste->picture; ?>" class="photo-guitariste" />
       <?php } ?>
      <h3><?php echo JText::_('COM_DJGUITARISTE_NAME').': '. $this->guitariste->name; ?></h3>
      <p class="dg-category"><?php echo JText::_('JCATEGORY').': '. $this->guitariste->category_title; ?></p>
      <?php 
      //Nous affichons son site uniquement s'il en a un.
      if(!empty($this->guitariste->website)){ ?>
        <p><?php echo JText::_('COM_DJGUITARISTE_WEBSITE').' :'. $this->guitariste->website; ?></p>
      <?php } ?>
      
      <?php if(!empty($this->guitariste->facebook)){ ?>
        <p><a href="/<?php echo $this->guitariste->facebook; ?>"><?php echo JText::_('COM_DJGUITARISTE_FACEBOOK'); ?></a></p>
      <?php } ?>
      
      <?php if(!empty($this->guitariste->youtube_video)){ ?>
        <iframe width="560" height="315" src="https://www.youtube.com/embed/<?php echo $this->guitariste->youtube_video; ?>" frameborder="0" allowfullscreen></iframe>
      <?php } ?>
      <div>
        <h4><?php echo JText::_('COM_DJGUITARISTE_BIOGRAPHY') ?></h4>
        <?php echo $this->guitariste->biography; ?>
      </div>
    <?php  
    }
?>
</div>
<div class="dj-publishing-info">
  <div class="guitarist-author">
    <span class="label">
      <?php echo JText::_('COM_DJGUITARISTE_AUTHOR_NAME'); ?>
    </span>
    <span class="dj-data">
      <?php echo $this->guitariste->author; ?>
    </span>
  </div>
  
  <div class="dj-creation-date">
    <span class="label">
      <?php echo JText::_('COM_DJGUITARISTE_CREATION_DATE'); ?>
    </span>
    <span class="dj-data">
      <?php echo date('M j, Y', strtotime($this->guitariste->created)); ?>
    </span>
  </div>
</div> 

5 - Le fichier de langue

Nous avons ajouté quelques clés dans notre calque de vue précédemment, il reste à rajouter ces clés dans le fichier de langue et de définir le texte à afficher pour chacune. Donc ouvrons le fichier de langue fr-FR.com_djguitariste.ini qui devrait se trouver dans language/fr-FR et rajoutons les deux ligne suivante :


COM_DJGUITARISTE_AUTHOR_NAME="Auteur: "
COM_DJGUITARISTE_CREATION_DATE="Date de création: "

Voilà nous venons de terminer cette partie pour tester les dates, rendez-vous dans l'administration de votre site, donner une date passée comme date de fin de publication à un guitariste (si tout est bon), le guitariste ne s'affichera pas dans la liste des guitaristes sur le site. Donnez une date future comme date de début de publication à un guitariste et là encore le guitariste ne devrait pas s'afficher dans la liste sur le site.

La vue d'une page de guitariste devrait ressembler à ceci:

 

Si vous avez des questions, veuillez utiliser le formulaire de contact ou notre page Facebook.

 

6 - Exercice

Créez une vue nommée auteur qui permettra d'afficher tous les guitariste ajouter par le même auteur. Mettez un lien sur le nom de l'auteur que nous avons affiché dans ce tutoriel pour conduire vers la vue auteur. Si vous avez des questions, veuillez me contacter par la page Facebook.

 

Lire la suite...


  • Dernière modification le jeudi, 28 septembre 2017 15:19
  • 317
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.