it-swarm.dev

Come impostare a livello di codice "Created_by" durante la creazione di una nuova categoria

Mentre scrivo uno script di importazione, ho bisogno di creare categorie per i dati e lo sto realizzando con successo con il codice seguente. Tuttavia, non riesco a determinare come impostare created_user_id colonna della tabella.

Lo script non sta effettuando l'accesso, ma il created_user_id viene sempre ignorato, creando il record di categoria con 0.

UPDATE Inizialmente chiesto di path, ma ha aggiunto -> rebuildPath () `- ancora nessuna fortuna con il creato_utente_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

Per aggirare il problema, abbiamo usato $ app-> login () prima di salvare. Questa sembrava essere la risposta più chiara alla nostra situazione, dato che un gran numero di altre categorie e contenuti venivano aggiunti contemporaneamente.

2
GDP

JTableCategory imposta quella proprietà nella funzione store, quindi dovrai fare un po 'di hack per farlo funzionare.

Puoi impostare l'utente che desideri che l'id sia nella sessione:

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

Aggiungilo letteralmente al posto di questa riga: $data['created_user_id'] = 123456;. Dovrebbe quindi essere automaticamente impostato per created_user_id.


In alternativa, dovresti eseguire il negozio due volte in questo modo:

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

La classe della tabella delle categorie imposta il valore_utente_utente solo se si tratta di un nuovo oggetto. Il primo archivio crea il record nel database e memorizzerà l'id in $table. Quindi è possibile ripristinare il valore desiderato e memorizzare nuovamente. (Nota che in questo modo imposterai modified_time e modified_user_id erroneamente ...)

1
David Fritsch