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 27) Traitement par lot ou batch processing


Dans cette partie,  nous allons mettre en place le traitement par lot (batch processing) dans l'administration de notre composant. Toute cette partie se passera au 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 | Partie 19 | Partie 20 | Partie 21 | Partie 22 | Partie 23 | Partie 24 | Partie 25 | Partie 26

1 - Introduction

Nous avons déjà mis en place une partie du traitement par lot (batch processing). Nous pouvons sélectionner plusieurs éléments et les publier, les dépublier ou encore les déverrouiller. Ici nous allons mettre en place la possibilité de sélectionner plusieurs éléments et de changer leur catégorie ou de les copier dans une autre catégorie. Le traitement par lot peut faire plus que ça mais dans le cadre de notre composant, on va se limiter juste à la catégorie.

 

2 - Modification du contrôleur guitariste.php

Nous allons redéfinir la méthode batch() dans la classe DJGuitaristeControllerGuitariste (notre contrôleur) pour assigner le bon objet modèle à la classe parente pour que Joomla puisse bien sauvegarder les modifications. Le contenu du fichier devrait donc ressembler à ceci (la nouvelle méthode rajoutée est la partie en couleur rouge) :

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

class DJGuitaristeControllerGuitariste extends JControllerForm
{
  public function __construct( $config = array()){
    parent::__construct($config);    
  }
  
  public function batch($model = null){
    JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
    
    $model = $this->getModel('Guitariste', '', array());
    //Url de redirection après la sauvegarde
    $this->setRedirect(JRoute::_('index.php?option=com_djguitariste&view=guitaristes'.$this->getRedirectToListAppend(), false));
    
    return parent::batch($model);
  } 
  
}

Notons que dans la méthode batch(), nous commençons par vérifié la présence du token de Joomla pour éviter le cross-site scripting. 

3 - Ajout du bouton "traitement" dans la barre d'outils

Ouvrons le fichier view.html.php qui se trouve dans views/guitaristes/ pour y ajouter le bouton dans la méthode  addToolbar().

La méthode addToolbar() devrait ressembler à ceci après l'ajout du bouton (la partie en rouge) :

protected function addToolbar(){
    JToolbarHelper::title(JText::_('COM_DJGUITARISTE_MANAGE_GUITARISTES'));
    
    $user = JFactory::getUser();
    if($user->authorise('core.create', 'com_djguitariste')){
      JToolbarHelper::addNew('guitariste.add');  
    }
    
    if($user->authorise('core.edit', 'com_djguitariste') || $user->authorise('core.edit.own', 'com_djguitariste')){
      JToolbarHelper::editList('guitariste.edit');
    }
    
    if($user->authorise('core.edit.state', 'com_djguitariste')){
      JToolbarHelper::publish('guitaristes.publish');
      JToolbarHelper::unpublish('guitaristes.unpublish');
      JToolbarHelper::checkin('guitaristes.checkin');
    }
    
    if($user->authorise('core.delete', 'com_djguitariste') || $user->authorise('core.delete.own', 'com_djguitariste')){
      JToolbarHelper::deleteList('', 'guitaristes.delete');
    }
	
    if($user->authorise('core.edit')){
      
      JHtml::_('bootstrap.modal', 'collapseModal');
      
      $title = JText::_('JTOOLBAR_BATCH');
      $dhtml = "<button data-toggle=\"modal\" data-target=\"#collapseModal\"
               class=\"btn btn-small\">
               <i class=\"icon-checkbox-partial\" title=\"$title\"></i>
               $title</button>";
      JToolBar::getInstance('toolbar')->appendButton('Custom', $dhtml, 'batch');
    }
    
    if($user->authorise('core.admin', 'com_djguitariste')){
      JToolbarHelper::preferences('com_djguitariste');
    }
    
    JToolbarHelper::divider();
    
    //Un lien externe pour la page d'aide
    $external_url = "http://docteurjoomla.com";
    JToolbarHelper::help('JHELP_COMPONENTS_DJGUITARISTE_GUITARISTES_EDIT', false, $external_url);
  }

À partir de maintenant si vous regarder la vue liste, le bouton "traitement" devait apparaître mais le fonctionnement n'est pas encore en place.

4 - Création d'un calque de vue (layout) pour le batch processing

Nous allons créer un nouveau fichier layout nommé default_batch.php dans le dossier views/guitaristes/tmpl pour y mettre le code d'affichage du pop-up qui va permettre de faire le traitement par lot. 

Dans un formulaire, nous allons mettre des boutons radios pour choisir entre "copier" ou "déplacer" les éléments sélectionnés. Puis  un select liste pour choisir la catégorie vers laquelle on veut copier ou déplacer les éléments. Et enfin des boutons annuler et Traitement.

Voici le contenu du fichier default_batch.php

<?php
defined('_JEXEC') or die;
?>
<div class="modal hide fade" id="collapseModal">
  <div class="modal-header">
    <button type="button" role="presentation" class="close" data-dismiss="modal">x</button>
    <h3><?php echo JText::_('COM_DJGUITARISTE_CHOOSE_CATEGORY_TO_COPY_OR_MOVE_INTO'); ?></h3>
  </div>
  <div class="modal-body">
    <div class="control-group">
      <div class="controls">
      <div id="batch-move-copy" class="control-group radio">
        <div class="controls">
          <label for="batch[move_copy]c" id="batch[move_copy]c-lbl" class="radio">
          <input type="radio" name="batch[move_copy]" id="batch[move_copy]c" value="c">
            <?php echo JText::_('COM_DJGUITARISTE_COPY'); ?>
          </label>
          <label for="batch[move_copy]m" id="batch[move_copy]m-lbl" class="radio">
          <input type="radio" name="batch[move_copy]" id="batch[move_copy]m" value="m" checked="checked">
            <?php echo JText::_('COM_DJGUITARISTE_MOVE'); ?>  
          </label>
        </div>
      </div>
      <hr />
        <select name="batch[category_id]" class="inputbox"
                id="batch-category-id">
          <option value="">
            <?php echo JText::_('JSELECT'); ?>
          </option>
          <?php 
            $categories = JHtml::_('category.options', 'com_djguitariste');
            echo JHtml::_('select.options', $categories, 'value', 'text'); ?>        
        </select>
        
      </div>
    </div>     
  </div>
  <div class="modal-footer">
    <button class="btn" type="button" 
            onclick="document.id('batch-category-id').value='';
            document.id('batch-access').value=''; document.id('batch-language-id').value=''"
            data-dismiss="modal">
      <?php echo JText::_('JCANCEL'); ?>        
    </button>
    <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('guitariste.batch');">
      <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?>
    </button>
  </div>
  
</div>

5 - Modification du layout default.php

Juste avant la fermeture da la balise <form> dans le fichier default.php, nous allons charger le fichier default_batch.php de la façon suivante :

<?php echo $this->loadTemplate('batch'); ?>

6 - Modification du fichier de langue

Il nous reste à ajouter dans notre fichier de langue les nouveaux clés que nous avons utilisées dans cette partie. Ouvrons le fichier fr-FR.com_djguitariste.ini qui se trouve dans language/fr-FR/ pour y ajouter les lignes suivantes :

COM_DJGUITARISTE_CHOOSE_CATEGORY_TO_COPY_OR_MOVE_INTO="Copier ou déplacer les éléments vers une autre catégorie"
COM_DJGUITARISTE_COPY="Copier"
COM_DJGUITARISTE_MOVE="Déplacer"

 Voilà, nous venons de terminer cette partie. Pour le tester, allez sur la page de la vue liste des  guitaristes, sélectionnez quelques éléments dans la liste et cliquer sur le bouton "traitement" dans la barre d'outils...

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

Lire la suite...


  • Dernière modification le jeudi, 21 décembre 2017 15:35
  • 325
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.