Merci pour ton temps et pour tes informations.
Finalement, j'ai réussi à gérer les insertions de catégories, avec gestion auto des lft, rtg et des assets en utilisant les classes Joomla : joomla remplit et met a jour "automatiquement" les autres données. Même s'il ne les utilise pas, j'obtient une structure "Joomla officielle".
Pour ceux qui comme moi (peu nombreux a priori, vu le peu de nombre de sujets) pouraient en avoir besoin, je vous file mon code :
Code PHP:
try {
$pdo = new PDO(
'mysql:host=localhost;dbname=monanciennebase,
'root',''
);
}
catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
/*
Je crée un tableau associatif qui contient les information des catégories de ma base d'origine. Différente selon votre structure. Le plus important est que :
- les catégories soient classées dans l'ordre croissant
- la hiérarchie obtenue soit la même que celle que vous souhaitez dans Joomla
- récupérer id, nom de la rubrique, id du parent
on obtient un tableau du type :
$rubrique = array(
array('id_rubr'=>1, 'nom_rubr'=>'Actualités', 'id_srub'=>0),
array('id_rubr'=>2, 'nom_rubr'=>'Actualités de la région', 'id_srub'=>1),
...
);
*/
unset($pdo);
try {
$pdo = new PDO(
'mysql:host=localhost;dbname=mabasejoomla,
'root',''
);
}
catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
$path2joomla = '/../INSTALLATION/joomla2';//A modifier selon la position du script par raport à la racine de Joomla
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);
if (file_exists(dirname(__FILE__).$path2joomla . '/defines.php')) {
include_once dirname(__FILE__).$path2joomla . '/defines.php';
}
if (!defined('_JDEFINES')) {
define('JPATH_BASE', dirname(__FILE__).$path2joomla);
require_once JPATH_BASE.'/includes/defines.php';
}
require_once JPATH_BASE.'/includes/framework.php';
require_once JPATH_BASE.'/libraries/joomla/database/tablenested.php';
require_once JPATH_BASE.'/libraries/joomla/database/table/category.php';
$db =& JFactory::getDBO();
$table = new JTableCategory($db);
$user_id = 42;//votre valeur
$now = date('Y-m-d H:i:s');
$rubid = array();
for ($i=0;$i<count($rubrique);$i++)
{
$data_array = array(
'extension' => 'com_content',
'title' => cleantitle($rubrique[$i]['nom_rubr']),
'alias' => nettoieNom($rubrique[$i]['nom_rubr']),
'published' => '1',
'access' => '1',
'params' => '{\"category_layout\":\"\", \"image\":\"\"}',
'metadata' => '{\"author\":\"\", \"robots\":\"\"}',
'created_user_id' => $user_id,
'created_time' => '$now',
'language' => '*'
);
//si c'est un élément racine
if ($rubrique[$i]['id_srub'] == 0)
{
$reference_id = 1;
}
//sinon
else
{
$reference_id = $rubid[$rubrique[$i]['id_srub']];
}
$rubid[$rubrique[$i]['id_rubr']] = Jaddnode($table, $reference_id, $data_array, 'last-child');
}
function Jaddnode($table, $reference_id, $data_array, $whereto='first-child')
{
$table->setLocation( $reference_id, $whereto );
// Bind data to the table object.
$table->bind( $data_array );
// Force a new node to be created.
$table->id = 0;
// Check that the node data is valid.
$table->check();
// Store the node in the database table.
$table->store();
//Récupère l'id créé
return $table->id;
}
Laisser un commentaire: