it-swarm-es.tech

Cómo configurar mediante programación 'created_by' al crear una nueva categoría

Mientras escribo un script de importación, necesito crear categorías para los datos, y lo estoy logrando con éxito con el siguiente código. Sin embargo, no puedo determinar cómo establecer el created_user_id columna de la tabla.

El script no está iniciando sesión, pero el created_user_id siempre se ignora, creando el registro de categoría con 0.

UPDATE Originalmente se le preguntó acerca de path, pero agregó -> rebuildPath () `- todavía no hubo suerte con 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

Para solucionar el problema, usamos $ app-> login () antes de guardar. Esta parecía ser la respuesta más clara para nuestra situación, ya que se estaba agregando una gran cantidad de otras categorías y elementos de contenido al mismo tiempo.

2
GDP

JTableCategory establece esa propiedad en la función de tienda, por lo que tendrá que hacer un poco de pirateo para que funcione.

Puede configurar el usuario que desea que sea la identificación en la sesión:

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

Literalmente solo agregue eso en lugar de esta línea: $data['created_user_id'] = 123456;. Entonces debería configurarse automáticamente para created_user_id.


Alternativamente, tendría que ejecutar la tienda dos veces así:

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

La clase de tabla de categorías solo establece el created_user_id si es un objeto nuevo. La primera tienda crea el registro en la base de datos y almacenará la identificación nuevamente en $table. Luego puede restablecer el valor que desea y almacenar nuevamente. (Tenga en cuenta que de esta manera se establecerá modified_time y modified_user_id incorrectamente ...)

1
David Fritsch