it-swarm.com.de

Programmgesteuertes Festlegen von "created_by" beim Erstellen einer neuen Kategorie

Während ich ein Importskript schreibe, muss ich Kategorien für die Daten erstellen, und das gelingt mir mit dem folgenden Code. Ich kann jedoch nicht feststellen, wie der created_user_id Spalte der Tabelle.

Das Skript meldet sich nicht an, aber das created_user_id wird immer ignoriert und der Kategoriedatensatz mit 0 erstellt.

UPDATE Ursprünglich nach path gefragt, aber hinzugefügt -> rebuildPath () `- immer noch kein Glück mit der 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

Um das Problem zu umgehen, haben wir vor dem Speichern $ app-> login () verwendet. Dies schien die sauberste Antwort für unsere Situation zu sein, da eine große Anzahl anderer Kategorien- und Inhaltselemente gleichzeitig hinzugefügt wurden.

2
GDP

JTableCategory legt diese Eigenschaft in der Store-Funktion fest, sodass Sie einen kleinen Hack ausführen müssen, um sie zum Laufen zu bringen.

Sie können entweder den Benutzer festlegen, für den die ID in der Sitzung verwendet werden soll:

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

Füge das buchstäblich anstelle dieser Zeile hinzu: $data['created_user_id'] = 123456;. Es sollte dann automatisch eingestellt werden für die created_user_id.


Alternativ müssten Sie den Store zweimal wie folgt ausführen:

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

Die Kategorietabellenklasse setzt die created_user_id nur, wenn es sich um ein neues Objekt handelt. Der erste Speicher erstellt den Datensatz in der Datenbank und speichert die ID wieder in $table. Anschließend können Sie den gewünschten Wert zurücksetzen und erneut speichern. (Beachten Sie, dass auf diese Weise das modified_time und modified_user_id falsch ...)

1
David Fritsch