web-dev-qa-db-fra.com

Comment définir par programme 'created_by' lors de la création d'une nouvelle catégorie

Lors de l'écriture d'un script d'importation, je dois créer des catégories pour les données et je réussis à le faire avec le code ci-dessous. Cependant, je ne peux pas déterminer comment définir le created_user_id colonne du tableau.

Le script ne se connecte pas, mais le created_user_id est toujours ignoré, créant l’enregistrement de catégorie avec 0.

UPDATE Initialement demandé à propos de path, mais ajouté -> rebuildPath () `- toujours pas de chance avec le created_user_id

function createCategory( $title, $parent_id, $note=null ) {
    $table = JTable::getInstance('category');
    $data = array();
    $data['title'] = $title;
    $data['parent_id'] = $parent_id;
    $data['extension'] = 'com_content';
    $data['published'] = 1;
    $data['created_user_id'] = 123456;
    $table->setLocation($data['parent_id'], 'last-child');
    $table->bind($data);
    if ($table->check()) {
        $table->store();
        $table->rebuildPath($table->id);
        // Success
    } else {
        // Error
    }
}
3
GDP

Pour résoudre le problème, nous avons utilisé $ app-> login () avant de sauvegarder. Cela semblait être la réponse la plus nette à notre situation, puisqu'un grand nombre d'autres éléments de contenu et de catégorie étaient ajoutés en même temps.

2
GDP

JTableCategory définit cette propriété dans la fonction store, vous devrez donc faire quelques manipulations pour la faire fonctionner.

Vous pouvez soit définir l'utilisateur que vous souhaitez que l'identifiant soit dans la session:

$session = JFactory::getSession();
$user = JFactory::getUser($user_id);
$session->set('user', $user);

Littéralement, ajoutez simplement cela à la place de cette ligne: $data['created_user_id'] = 123456;. Il devrait alors se préparer automatiquement pour le created_user_id.


Alternativement, vous devriez exécuter le magasin deux fois comme ceci:

$table->store();
$table->created_user_id = 123456;
$table->store();

La classe de table de catégories ne définit l'ID utilisateur_créé que s'il s'agit d'un nouvel objet. Le premier magasin crée l’enregistrement dans la base de données et enregistre l’identifiant dans $table. Ensuite, vous pouvez réinitialiser la valeur souhaitée et la stocker à nouveau. (Notez que de cette façon, le paramètre modified_time et modified_user_id incorrectement ...)

1
David Fritsch