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 20) Suport pour multi-administrateurs


Dans cette partie,  nous allons mettre en place le mécanisme que Joomla propose pour éviter que deux administrateurs modifient un même élément en même temps ce qui conduit normalement à la perde des modifications de celui qui sauvegarde en premier. 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 | Partie 19

1 - Introduction

Nous allons nous servir de deux des champs standards que nous avons rajouter dans la partie précédente. Le champ checked_out va contenir l'id de l'utilisateur qui est en train procéder à la modification et le champ checked_out_time la date et l'heure de modification. Donc on va bloquer l'accès à l'élément aux autres administrateur jusqu'à ce que celui qui l'a ouvert en premier clique sur le bouton "Enregistrer et Fermer" ou "Enregistrer une copie" ou encore "Annuler". Dans la vue liste, la présence d'un petit cadenas à côté du nom d'un élément signifie normalement que l'élément est en train d'être modifier par un administrateur. Nous allons implémenter cette fonctionnalité dans notre composant.

Nous avons la chance que Joomla l'implémente déjà en partie. Dès que nous avons créé ces champs, à chaque fois qu'un administrateur modifie un guitariste, ces champs seront remplis par Joomla.   

2 - Modification du modèle

Rajoutons ces deux champs dans la liste des champs sélectionnés dans la méthode getListQuery(). La modification ici concerne les parties en couleur.

public function getListQuery()
{
	$db = $this->getDbo();
	$query = $db->getQuery(true);
	$query->select('a.id, a.name, a.state, a.publish_up, a.publish_down, a.catid, a.created, a.created_by, a.ordering, a.checked_out, a.checked_out_time');
	$query->from($db->quoteName('#__djguitariste_items').' AS a');
        
	// Join over the users for the checked out user.
	$query->select('uc.name AS editor')
	  ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out');

	$query->select('c.title AS category');
	$query->join('LEFT', $db->quoteName('#__categories').' AS c ON c.id = a.catid');

	return $query;
}

3 - Modification du contrôleur central

Le fichier controller.php est à la racine du dossier du composant.  Nous allons modifier la méthode display() qui est la seule dans la classe DJGuitaristeController. Nous vérifions si l'id du guitariste est déjà en train d'être modifier grâce à la méthode checkEditId(). Si la méthode retourne false, on redirige l'administrateur avec un message d'erreur vers la vue liste. Voici le contenu du fichier controller.php la modification à apporter est la section en couleur :


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

class DJGuitaristeController extends JControllerLegacy
{
  public function display($cachable = false, $urlparams = false)
  {
    //$document = JFactory::getDocument();
    require_once JPATH_COMPONENT.'/helpers/djguitariste.php';
    //Nous récupérons l'id du guitariste
    $id = $this->input->getInt('id');
    
    //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);
    $layout = $this->input->get('layout');
    
    $safeurlparams = array(
      'id'=>'INT',
    );
    
    // Check for edit form.
    if ($vName == 'guitariste' && $layout == 'edit' && !$this->checkEditId('com_djguitariste.edit.guitariste', $id))
    {
      // Somehow the person just went to the form - we don't allow that.
      $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
      $this->setMessage($this->getError(), 'error');
      $this->setRedirect(JRoute::_('index.php?option=com_djguitariste&view=guitaristes', false));

      return false;
    } 
    
    parent::display($cachable, $safeurlparams);
    
    return $this;    
  }
}

4 - Modification de la vue liste

Nous allons modifier le fichier default.php pour afficher un cadenas devant le nom des guitaristes qui sont en train d'être modifier par d'autres administrateurs. Ce fichier se trouve dans views/guitaristes/tmpl. Dans la balise td qui contient l'affichage du nom et de la catégorie, nous vérifions si le champ checked_out est rempli si oui, on affiche le cadenas.


<td class="nowrap">
	<?php if ($item->checked_out) :?>
	  <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'guitaristes.', $canCheckin); ?>
	<?php endif; ?>
	
	<a href="/<?php echo JRoute::_('index.php?option=com_djguitariste&task=guitariste.edit&layout=edit&id='.(int)$item->id); ?>">
	  <?php echo $item->name; ?>
	</a>
	<p class="small">
	  <?php echo $this->escape($item->category); ?>
	</p>
</td>

Voilà nous venons de finir cette partie. Pour le tester, allez sur la page de la vue liste, cliquez sur le nom d'un guitariste pour le modifier. Une fois le formulaire afficher, cliquez sur le bouton retour de votre navigateur. Un cadenas devrait apparaître devant le nom sur lequel vous avez cliqué.

N'importe quel administrateur peut cliquer sur le cadenas à n'importe quel moment pour déverrouiller l'élément et ensuite pouvoir le modifier. 

Si vous avez des questions, utilisez le formulaire de contact ou la page Facebook.

Lire la suite...


  • Dernière modification le dimanche, 27 mai 2018 09:50
  • 282
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.