web-dev-qa-db-fra.com

JTable - Méthode de remplacement de magasin ()

Je remplace la méthode store pour ajouter les colonnes "created" et "created_by" dans la base de données. La colonne modifiée est insérée correctement avec la date du jour. Mais, pour une nouvelle demande, les colonnes created et created_by ne sont pas insérées avec la date actuelle et l'ID utilisateur actuel.

J'insère une nouvelle ligne, il s'agit donc d'une nouvelle demande. Dans ce cas, $ this-> id ne devrait pas être là. J'ai essayé de faire écho $ this-> id et il n'est en effet pas défini.

Mon code est:

public function store($updateNulls = false)
    {
        $date = JFactory::getDate();
        $user = JFactory::getUser();

        $this->modified = $date->toSql();

        if (isset($this->id))
        {
            // Existing item
            $this->modified_by = $user->get('id');
        }
        else
        {
            // New Request. Set "created" column to current date and "created_by" to current userid
            if (!(int) $this->created)
            {
                $this->created = $date->toSql();
            }

            if (empty($this->created_by))
            {
                $this->created_by = $user->get('id');
            }
        }

        return parent::store($updateNulls);
    }
1
Sahil Purav

Je l'ai compris:

J'avais ajouté les variables suivantes dans la classe JTable étendue (classe MyComponentTableMyTableName):

/**
     * Current date for created column in #__helpdesk
     * @var Current Date to SQL format 
     */
    protected $created;

    /**
     * User id for created_by column in #__helpdesk
     * @var integer
     */
    protected $created_by;

Je viens de l'enlever. Gogglers, cela sera utile. Il ne faut ajouter aucune variable personnalisée si nous redéfinissons les méthodes JTable.

0
Sahil Purav

Il n'y a rien de mal à avoir des propriétés personnalisées dans les classes enfants basées sur JTable. Je l'ai fait et ça marche. Il vous suffit de choisir judicieusement vos noms de propriété et de vous assurer qu'ils n'entrent pas en conflit avec les noms de colonne de la table ou les noms de table Joomla réservés.

0
asiby

Pour clarifier, avez-vous modifié la classe wrapper JTable de votre composant ou la classe Joomla JTable principale? Vous devriez éviter ce dernier (classe principale) à tout prix, car la prochaine mise à jour du système de gestion de contenu Joomla pourrait supprimer toutes les modifications apportées aux fichiers principaux.

Dans ces cas, la réponse est généralement liée à un champ obligatoire dans le fichier de définition XML du formulaire, le rendu des champs et le paramètre de tâche. J'ai moi-même rencontré ce problème plusieurs fois et c'est généralement le résultat de l'une des choses suivantes:

  1. Oublier d'inclure un champ masqué mais obligatoire
  2. Ne pas définir la valeur du champ id à 0 enregistrements
  3. Combinaison incorrecte du champ de saisie de tâche masquée et d'inclusion dans les paramètres d'URL d'action de formulaire

Il est difficile de déterminer avec certitude quel est le problème exact avec les informations disponibles, mais je suis assez confiant.

J'espère que cela t'aides.

0
Brian Bolli