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 23) Configuration - Côté client


Dans cette partie,  nous allons utiliser les paramètres de configuration sur le site côté client. Toute cette partie se passe 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 | Partie 16 | Partie 17 | Partie 18 | Partie 19 | Partie 20 | Partie 21 | Partie 22

1 - Introduction

Dans le précédent tutoriel, nous avons mis en place les paramètres de configuration. Ici nous allons tenir compte de ces paramètres sur le site (côté client).

On est plus dans le dossier administrator!

 

2 - Le modèle guitaristes.php

Ici nous allons récupérer la valeur du paramètre orderby et décider de la façon dont les éléments vont être ordonnés. La modification se ferra uniquement dans la méthode getListQuery()

Nous passerons par la classe JComponentHelper pour récupérer les paramètres de configuration. La méthode get permet de récupérer un seul élément.

$params = JComponentHelper::getParams('com_djguitariste');
$orderby = $params->get('oderby', 'rdate');

rdate sera retourné par la méthode get() comme valeur par défaut.

Nous allons définir dans un bloc switch{} les différente valeur de orderby et mettre le code correspondant pour ordonner les éléments.

switch($orderby){
      case 'ordering':
           $query->order('a.ordering ASC');
           break;
      case 'rdate':
           $query->order('a.created DESC');
           break;
      case 'date':
           $query->order('a.created ASC');
           break;
      case 'alpha':
           $query->order('a.name ASC');
           break;
      case 'ralpha':
           $query->order('a.name DESC');
           break;
    }

Donc au final, le contenu du modèle liste (guitaristes.php) devrait ressembler à ceci:

<?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.')');
    
    //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');
    
    $case_when = ' CASE WHEN ';
    $case_when .= $query->charLength('a.alias', '!=', '0');
    $case_when .= ' THEN ';
    $a_id = $query->castAsChar('a.id');
    $case_when .= $query->concatenate(array($a_id, 'a.alias'), ':');
    $case_when .= ' ELSE ';
    $case_when .= $a_id.' END as slug';
    $query->select($case_when);
        
    $case_when2 = ' CASE WHEN ';
    $case_when2 .= $query->charLength('c.alias', '!=', '0');
    $case_when2 .= ' THEN ';
    $c_id = $query->castAsChar('c.id');
    $case_when2 .= $query->concatenate(array($c_id, 'c.alias'), ':');
    $case_when2 .= ' ELSE ';
    $case_when2 .= $c_id.' END as catslug';
    $query->select($case_when2);   
       
    $params = JComponentHelper::getParams('com_djguitariste');
    $orderby = $params->get('oderby', 'rdate');
    
    switch($orderby){
      case 'ordering':
           $query->order('a.ordering ASC');
           break;
      case 'rdate':
           $query->order('a.created DESC');
           break;
      case 'date':
           $query->order('a.created ASC');
           break;
      case 'alpha':
           $query->order('a.name ASC');
           break;
      case 'ralpha':
           $query->order('a.name DESC');
           break;
    }
    
    return $query;
  }
  
}

Voilà maintenant si dans l'administration depuis la vue liste, on clique sur le boutons "Paramètres" et on modifie la valeur du champ "Ordre des guitaristes", la liste sur le site changera d'ordre en fonction de la valeur.

Paramètre du composant, champ orderby qui affecte la vue liste côté client

 

3 - La vue détail

La vue détail va tenir compte des valeurs qui sont dans l'onglet "Affichage".  

3 - 1 Le fichier view.html.php

Dans la méthode display(), nous allons récupérer les paramètre afin de les utiliser plus tard dans notre layout. Donc dans views/guitariste, ouvrons le fichier view.html.php et ajoutons la ligne suivante dans la méthode display():

$params = JComponentHelper::getParams('com_djguitariste');
$this->params = &$params;

Le contenu de ce fichier devrait ressembler à ceci :

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

class DJGuitaristeViewGuitariste extends JViewLegacy
{
  public function display($tpl = null)
  {
    $app = JFactory::getApplication();
    
    $guitariste = $this->get('Item');
    $this->guitariste = &$guitariste;
    
    $params = JComponentHelper::getParams('com_djguitariste');
    $this->params = &$params;
    
    //meta description
    if($guitariste->metadesc){
      $this->document->setDescription($guitariste->metadesc);
    }
    
    //mots clés
    if($guitariste->metakey){
      $this->document->setMetadata('keywords',$guitariste->metakey);
    }
    
    //Ajouter le nom du guitariste dans le title
    $title = $guitariste->name . " - " .  $this->document->getTitle();
    $this->document->setTitle($title);
    
    parent::display($tpl);
    
  }
}

3 - 2 Le layout (default.php)

Dans views/guitariste/tmpl, nous allons ouvrir le fichier default.php et mettre une vérification avant l'affichage de la catégorie, du nom de l'auteur et de la date de création.

La catégorie:

<?php if($this->params->get('show_category')){ ?>
	<p class="dg-category"><?php echo JText::_('JCATEGORY').': '. $this->guitariste->category_title; ?></p>
<?php } ?>

 Le nom de l'auteur et la date de création:

<div class="dj-publishing-info">
  <?php if($this->params->get('show_author')){ ?>
  <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>
  <?php } ?>
  <?php if($this->params->get('show_created')){ ?>
  <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>
  <?php } ?>
</div>

Voilà nous venons de terminer cette partie. Si vous avez des questions, veuillez utiliser le formulaire de contact ou notre page Facebook.

Lire la suite...


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