Je suis allé éditer les articles et les modules de mon site, où j'ai vu des articles ayant un cadenas à côté de leurs titres.
Lorsque je clique sur ces éléments pour les modifier, le message d'erreur suivant s'affiche:
Erreur
Echec de l'extraction avec l'erreur suivante: L'utilisateur extrait ne correspond pas à l'utilisateur qui a extrait l'élément.
Vous n'êtes pas autorisé à utiliser ce lien pour accéder directement à cette page (n ° 145).
Pourquoi mes articles sont verrouillés et comment les déverrouiller?
Les composants Joomla Core, tels que le contenu (articles), les catégories, les menus, les modules, les extensions, etc., contiennent dans leur structure de table de base de données un champ appelé "extrait", qui peut prendre 2 valeurs: "0" pour le statut Checked-In, ou l'ID utilisateur réel pour le statut Checked-Out.
Lorsqu'un utilisateur modifie un élément spécifique, par exemple un article, le système de Joomla change la valeur "extrait" de cet élément de 0 à l'ID de cet utilisateur, ce qui signifie que l'élément est actuellement en statut "extrait".
L'élément reviendra à son statut "Checked-In" (Checked_Out = 0), lorsque l'utilisateur cliquera sur le "Enregistrer" ou "Fermer "boutons de l'article.
Au cours de l’état de l’enregistrement, Joomla affiche cette icône cadenas à côté du titre de l’élément dans la liste des éléments, pour indiquer que cet élément est en cours de modification par un utilisateur.
En outre, Joomla ne permettra à aucun autre utilisateur d'accéder simultanément au même élément.
Cela évite les résultats indésirables et la confusion dans le backend, car si plus d'un utilisateur pouvait éditer le même élément avec le même élément, seules les modifications du dernier utilisateur ayant cliqué sur le bouton "Enregistrer" auraient lieu.
ne note latérale intéressante ici:
Un cadenas peut apparaître même si aucun autre utilisateur administrateur n'est connecté ou même si le site ne compte qu'un administrateur.
Comme cela a été dit, un élément entrera dans le statut Checked-Out en mode Édition. L’état ne redeviendra enregistré que lorsque l’utilisateur clique sur le bouton Enregistrer ou Fermer.
Ces boutons déclenchent les fonctions pour mettre à jour la base de données. Si, pour une raison quelconque, l'utilisateur quitte le mode d'édition de cet élément sans cliquer sur ces boutons, l'élément conservera la valeur ID utilisateur du champ Checked_Out de la base de données, ce qui fera Joomla pense que cet élément est toujours en mode édition.
Habituellement, dans environnements multi-utilisateurs, vous souhaiterez attendez que l'autre utilisateur ait terminé son travail sur cet élément. Il est recommandé de le contacter et de lui demander quel est le statut de son travail.
Vous pouvez trouver qui est l'utilisateur qui édite l'élément, en survolant le cadenas avec la souris, et un info-bulle avec les informations appropriées apparaîtra.
Pour déverrouiller l'élément, vous devez disposer de accès administrateur et du autorisations requises pour accéder à la fonctionnalité Enregistrement.
1 article enregistré
Dans la liste des éléments d’administration d’arrière-plan (liste d’articles, par exemple), vous pouvez soit cliquer sur le cadenas icône pour déverrouiller cet élément spécifique.
Enregistrement de plusieurs articles de la même liste
S'il y a plus de 1 éléments verrouillés que vous souhaitez déverrouiller dans la liste, vous pouvez cocher leur case à cocher puis cliquer sur le bouton Check-In, sur le barre d'outils.
enregistrement dans la base de données globale
Enfin, il existe un enregistrement global, sous le menu "Système", dans lequel vous pouvez archiver toutes les tables de base de données prenant en charge la fonctionnalité extraite à la fois.
Sachez que, cependant, cela doit être utilisé avec prudence, en particulier sur les sites multi-utilisateurs, pour éviter tout problème/confusion comme décrit ci-dessus.
J'ai construit un composant qui peut être édité par plusieurs utilisateurs. La méthode edit
de JControllerForm
recherche cette propriété comme ceci:
// Get the previous record id (if any) and the current record id.
$recordId = (int) (count($cid) ? $cid[0] : $this->input->getInt($urlVar));
$checkin = property_exists($table, 'checked_out'); // <---
// ....
// Attempt to check-out the new record for editing and redirect.
if ($checkin && !$model->checkout($recordId)) // <---
{
// Check-out failed, display a notice but allow the user to see the record.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKOUT_FAILED', $model->getError()));
$this->setMessage($this->getError(), 'error');
// ....
}
Donc, un moyen facile d’éviter cette fonctionnalité consiste simplement à supprimer le checked_out
champ de la table associée donc $checkin
est toujours FALSE
Remarque: Il ne s'agit pas d'une suggestion de modification du code Joomla ou de toute base de données associée. Je suis venu ici à la recherche d’informations sur Joomla cheking
feature. Cette solution est appropriée pour développer des composants multi-utilisateurs, c'est-à-dire être édités par plusieurs utilisateurs.