Bonjour à tous,
Je suis en train de créer un petit script qui viendra effacer la BDD d'un site propulsé avec SPIP (rubrique et articles), et qui recréera le nouveau contenu (article et rubrique et donc aussi arborescence) à partir d'un fichier XML.
Je suis très loin d'être un expert en PHP. J'ai cependant à moitié réussi à obtenir le résultat souhaité. Cependant deux problèmes persistes et j'ai peur qu'ils caches un gros défaut de conception.
Le premier problème étant que tout les articles sont créés en double. Pourtant quand je fais un var_dump sur ma requête final tout semble ok.
Voici la partie du code incriminé :
Mon deuxième problème, c'est que j'ai essayer de mettre dans un tableau les nouvelles rubriques créer pour tester leurs existence à chaque tour de boucle. Malheureusement la condition "if($cat_exist == $arme->Type)" n'est jamais vrai. Pourtant le script crée quand même les 3000 articles, de plus je ne vois pas le rapport avec le fait qu'il crée tout les articles deux fois.
Voilà j'espère avoir été clair. Je sais que c'est pas toujours évident de plonger dans le code de quelqu'un d'autre sans trop connaitre le contexte (surtout quand c'est un code aussi barbare). Je tire donc mon chapeau à celui qui aura le courage de se pencher sur mon problème ^^.
Merci d'avance.
Modifié par Gili (22 Jun 2012 - 14:55)
Je suis en train de créer un petit script qui viendra effacer la BDD d'un site propulsé avec SPIP (rubrique et articles), et qui recréera le nouveau contenu (article et rubrique et donc aussi arborescence) à partir d'un fichier XML.
Je suis très loin d'être un expert en PHP. J'ai cependant à moitié réussi à obtenir le résultat souhaité. Cependant deux problèmes persistes et j'ai peur qu'ils caches un gros défaut de conception.
Le premier problème étant que tout les articles sont créés en double. Pourtant quand je fais un var_dump sur ma requête final tout semble ok.
Voici la partie du code incriminé :
// on créer une variable qui contiendra tous les updates des articles
$req_articles = array();
$req_articles[0] = "INSERT INTO `spip_moulinette`.`spip_articles` (`id_article`, `surtitre`, `titre`, `soustitre`, `id_rubrique`, `descriptif`, `chapo`, `texte`, `ps`, `date`, `statut`, `id_secteur`, `maj`, `export`, `date_redac`, `visites`, `referers`, `popularite`, `accepter_forum`, `date_modif`, `lang`, `langue_choisie`, `id_trad`, `extra`, `id_version`, `nom_site`, `url_site`) VALUES ";
$categorie_existantes = array();
$sous_categorie_existantes = array();
$i = 0;
$j = 0;
$k = 1;
foreach ($armes as $arme) {
/* les rubriques */
// si il existe déjà une rubrique de ce nom
foreach($categorie_existantes as $cat_exist)
{
if($cat_exist == $arme->Type)
{
$test_existence_categorie = true;
}
}
// si il est négatif
if(!$test_existence_categorie) {
$req = "SELECT * FROM spip_rubriques WHERE `titre` = :titre;";
$res = $cnx -> prepare($req);
$res -> bindParam(':titre', $arme->Type);
$res -> execute();
$rubriquePremierNiv = $res -> fetch();
$id_rubrique_parente = $rubriquePremierNiv['id_rubrique'];
if(!$rubriquePremierNiv['titre']) {
$req = "INSERT INTO `spip_moulinette`.`spip_rubriques`
(`id_rubrique`, `id_parent`, `titre`, `descriptif`, `texte`, `id_secteur`, `maj`, `export`, `id_import`, `statut`, `date`, `lang`, `langue_choisie`, `extra`, `statut_tmp`, `date_tmp`)
VALUES
(NULL, '0', :nomRubrique, '', '', '0', CURRENT_TIMESTAMP, 'oui', '0', 'publie', '0000-00-00 00:00:00', '', 'non', NULL, '0', '0000-00-00 00:00:00');";
$res = $cnx -> prepare($req);
$res -> bindParam(':nomRubrique', $arme->Type);
$res -> execute();
$categorie_existantes[$i] = $arme->Type;
$i++;
}
}
/* les sous rubriques */
foreach($sous_categorie_existantes as $sous_cat_exist)
{
// le test est positif
if($sous_cat_exist == $arme->Marque)
{
$test_existence_sous_categorie = true;
}
}
// si il est négatif
if(!$test_existence_categorie) {
$req = "SELECT * FROM spip_rubriques WHERE `titre` = :titre;";
$res = $cnx -> prepare($req);
$res -> bindParam(':titre', $arme->Marque);
$res -> execute();
$rubriquePremierNiv = $res -> fetch();
$id_rubrique_article = $rubriquePremierNiv['id_rubrique'];
if(!$rubriquePremierNiv['titre']) {
$req = "INSERT INTO `spip_moulinette`.`spip_rubriques`
(`id_rubrique`, `id_parent`, `titre`, `descriptif`, `texte`, `id_secteur`, `maj`, `export`, `id_import`, `statut`, `date`, `lang`, `langue_choisie`, `extra`, `statut_tmp`, `date_tmp`)
VALUES
(NULL, :id_rubrique_parent, :nomRubrique, '', '', '0', CURRENT_TIMESTAMP, 'oui', '0', 'publie', '0000-00-00 00:00:00', '', 'non', NULL, '0', '0000-00-00 00:00:00');";
$res = $cnx -> prepare($req);
$res -> bindParam(':id_rubrique_parent', $id_rubrique_parente);
$res -> bindParam(':nomRubrique', $arme->Marque);
$res -> execute();
$sous_categorie_existantes[$j] = $arme->Marque;
$j++;
}
}
$test = "'<multi> [fr]" . mysql_escape_string($arme->LibelleFR) . " [nl] " . mysql_escape_string($arme->LibelleVL) . "</multi>'";
$req_articles[$k] = "(NULL, '', $test, '" . mysql_escape_string($arme->CdART) . "', '" . $id_rubrique_article . "', '".mysql_escape_string($arme->PV)."', '', '', '', '0000-00-00 00:00:00', 'publie', '0', CURRENT_TIMESTAMP, 'oui', '0000-00-00 00:00:00', '0', '0', '0', '', '0000-00-00 00:00:00', '', 'non', '0', NULL, '0', '', ''),";
$k++;
}
$string = implode(" ", $req_articles);
//supprimer la dernière virgule
$resultat = substr($string,0,strlen($string)-1);
//echo $resultat;
$res = $cnx -> query($resultat);
$res -> execute();
Mon deuxième problème, c'est que j'ai essayer de mettre dans un tableau les nouvelles rubriques créer pour tester leurs existence à chaque tour de boucle. Malheureusement la condition "if($cat_exist == $arme->Type)" n'est jamais vrai. Pourtant le script crée quand même les 3000 articles, de plus je ne vois pas le rapport avec le fait qu'il crée tout les articles deux fois.
Voilà j'espère avoir été clair. Je sais que c'est pas toujours évident de plonger dans le code de quelqu'un d'autre sans trop connaitre le contexte (surtout quand c'est un code aussi barbare). Je tire donc mon chapeau à celui qui aura le courage de se pencher sur mon problème ^^.
Merci d'avance.
Modifié par Gili (22 Jun 2012 - 14:55)