web-dev-qa-db-fra.com

Joomla 3.x "Echec de l'extraction de l'erreur avec l'erreur suivante" - sans plus d'informations

J'ai écrit un tas de composants personnalisés et un seul d'entre eux a le problème suivant. Lorsque je clique sur une ligne individuelle dans la liste des administrateurs du composant pour la modifier, je reçois l'infâme:

"Erreur d'extraction a échoué avec l'erreur suivante:"

Maintenant, bien sûr, nous avons tous eu cette erreur dans Joomla, cependant, elle contient généralement plus d'informations, telles que, je ne sais pas, UNE ERREUR ??? J'ai augmenté le niveau d'erreur au maximum, recherché dans les journaux PHP, activé le système de débogage et il n'y a toujours rien à trouver. Notez que "l'erreur" ne fonctionne pas vraiment m'empêche de faire la modification, à l'exception du fait que lorsque je clique sur Enregistrer et fermer, les données sont enregistrées bien que le flux de pages ne revienne pas dans la liste des administrateurs. Je dois cliquer sur le bouton Annuler/Fermer pour revenir en arrière.

J'ai créé cela et d'autres composants de travail à l'aide de Component Creator. Je ne remplace aucune des méthodes de table et uniquement la méthode de sauvegarde du modèle.

Il convient également de noter que j’ai effectué un enregistrement global ainsi que j’ai parcouru la base de données à la recherche de valeurs extraites connexes, sans en trouver aucune. Je pense que le "Check-out" est un hareng rouge.

Toutes les idées sur la façon de déboguer ce problème sont les bienvenues.

Classe de table:

<?php
 defined('_JEXEC') or die;
 /**  * clubofficer Table class  */ 

class Curling_org_dataTableclubofficer extends JTable {
    /**
     * Constructor
     *
     * @param JDatabase A database connector object
     */
    public function __construct(&$db) {
       parent::__construct('#__curling_club_officers', 'id', $db);
    }
}

Cordialement, Rob

1
Rob

Cette erreur s’affiche lorsque vous essayez d’éditer une ligne et de la laisser sans être archivée. Vérifiez votre contrôleur principal (c'est-à-dire la classe ComponentNameController dans votre controller.php), avec le code suivant:

if ($vName == 'form' && !$layout && ! $this->checkEditId('com_componentname.edit.itemname', $id))
{
    // Somehow the person just went to the form - we don't allow that.
    throw new Exception(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id), 403);
}

Vous voudrez peut-être ajouter un bouton d’archivage dans votre liste pour archiver rapidement ces lignes.

<?php if ($item->checked_out) : ?>
    <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'itemname.', $canCheckin); ?>
<?php endif; ?>

Et enfin, voici la configuration requise pour utiliser correctement les fonctionnalités de formulaire de Joomla.

  1. Vous devez avoir deux colonnes dans votre table de base de données - "vérifié_out", "vérifié_out_time"
  2. Remplacez JControllerForm dans votre sous-contrôleur (pour la page de formulaire).
  3. Vous pouvez remplacer allowEdit de JControllerForm pour empêcher l'utilisateur d'extraire la ligne si vous devez vérifier certaines autorisations, etc.

Enfin, utilisez la méthode yourcontroller.save (paramètre "task" de votre action de formulaire ou un champ masqué) pour vérifier correctement la ligne. Si vous utilisez la méthode yourcontroller.apply, la ligne restera extraite jusqu'à ce que vous sauvegardiez.

par exemple

<button type="button" onclick="Joomla.submitbutton('controllername.save')">Save</button>

ou dans votre vue de formulaire d'administration, ajoutez le bouton de la barre d'outils pour enregistrer

JToolbarHelper::save('controllername.save');

pdate: Voici quelques cas possibles pour que cette erreur se produise:

  1. Impossible de charger la ligne dans votre classe jtable (vérifiez si la classe JTable est définie correctement pour votre article)
  2. Vous essayez d'extraire une ligne qu'un autre utilisateur a déjà extraite (ce n'est peut-être pas le cas, car vous avez indiqué que toutes les lignes de votre table ont une valeur de check_out égale à 0).

Donc, je crois que le problème est avec votre classe de table.

1
Nagarjun