Ernestine Posté 3 Septembre 2003 Posté 3 Septembre 2003 Bonjour, Je souhaite transformer mon site qui est statique en HTML pour qu'il fonctionne sous SPIP. SPIP est installé sur mon site, tout est prêt, y compris l'url rewriting pour conserver de belles URLs. Le problème, c'est qu'il me reste à faire un copier-coller de toutes les pages pour créer les articles SPIP correspondant. Sachant que pour chaque article je renseigne tous les champs et qu'il y en a en tout plus de 250, ça me fait une bonne quinzaine d'heures de cliquages de souris Sans parler des petits liens ici et là, des quelques images, etc etc... Y aurait-il un moyen de faire tout ça automatiquement ? J'avais pensé à un script PHP qui irait lire toutes mes pages une par une (à la limite je lui file les 250 urls), et qui irait les inserrer directement dans les tables SPIP. Je suppose que ça n'existe pas, car chaque site est différent, mais si c'est pas trop dur à programmer je peux peut-être essayer. Auriez-vous des pistes ?
Anonymus Posté 4 Septembre 2003 Posté 4 Septembre 2003 (modifié) Bonjour, pour ce qui est des url de ton site, il faudra les rentrer les unes après les autres,dans la mesure où elles ne sont pas chronologiques. Pour ce qui est du texte, il commence toujours par : <!-- #BeginEditable "texte" --> et se termine toujours par : <!-- #EndEditable --></p> Il faut donc dire : Ouvrir le fichier, aller à <!-- #BeginEditable "texte" -->, commencer à copier tant qu'il n'y a pas : <!-- #EndEditable --></p>. Ca donne : // ===================================== <? if ( ! $REQUEST_METHOD==$_POST ){ ?> <form name='truc' method=POST> URL à analyser :<br> <input type=text name='machin' value='http://www.mon-site.com/' size=150> <p> <input type=submit name='post' value='Envoyer' > </form> <? } else{ $begin_text=FALSE; $texte=""; $begin_titre=FALSE; $titre=""; $webpage = $_POST['machin']; $fp= fopen($webpage,"r") or die("impossible d'ouvrir $webpage..."); // boucle while, on lit les lignes les unes après les autres : while ( ! feof( $fp )){ $line=fgets($fp,1024); if (substr_count($line,"<h1 align=\"center\"><!-- #BeginEditable \"titre\" -->") > 0 OR $begin_titre){ $titre .= $line.""; $begin_titre=TRUE; if (substr_count($line,"<!-- #EndEditable --></h1>") > 0 ){ $begin_titre=FALSE; } } if (substr_count($line," <p><!-- #BeginEditable \"texte\" -->") > 0 OR $begin_text){ $texte .= $line.""; $begin_text=TRUE; if (substr_count($line,"<!-- #EndEditable --></p>") > 0 ){ $begin_text=FALSE; } } } $titre=substr($titre,80,-27); $texte=substr($texte,64,-26); // Le texte est en place, on l'affiche... ( ou on en fait ce qu'on veut...) // Attention, ca ne marche qu'avec les pages formatées du style http://www.journal-Ernestine.com/decembre/...t-agreable.html echo"<center><H1>".$titre."</h1></center><br>"; echo $texte; } ?> // ======================================= Bon courage ) Voilà, A+, Anonymus. ps : il est possible de faire beaucoup plus de choses, notamment l'insert dans la base. ps1 : N'hésites pas à redemander, c'est cadeau ps2 : Il faut peut etre mettre ce post dans php/programmation, non ? Modifié 13 Septembre 2003 par anonymus
Cariboo Posté 4 Septembre 2003 Posté 4 Septembre 2003 Il faut peut etre mettre ce post dans php/programmation, non ? Je pense qu'on peut le laisser là. C'est une solution en php à un problème SPIP, d'ailleurs assez courant. J'ai reçu pas mal de messages l'année dernière pour me demander comment j'avais fait pour transformer ma base d'articles Lotus Domino en articles SPIP. Il a donc bien sa place ici.
Dan Posté 4 Septembre 2003 Posté 4 Septembre 2003 Cariboo, Tu as peut-être une réponse toute prête pour le problème d'Ernestine ? L'architecture de Spip, comme d'ailleurs tous les CMS, fait que l'insertion d'un article ne touche pas qu'une table, et qu'il faut impérativement s'assurer de garder la cohérence de la base. Autant les requêtres d'interrogation ou d'extraction de données d'une base Spip ne posent pas de problème, autant les requêtes d'insertion demandent de la prudence. Je vais poser la question sur une liste Spip, peut-être existe-t-il des solutions "toutes faites". Dan
Olivier Posté 4 Septembre 2003 Posté 4 Septembre 2003 De mon coté j'ai expérimenté l'integration html directe de pages avec un format propre. Si en un copier colé de 70 articles a été assez rapide, le resultat coté rendu et look n'est pas des plus jolis. Il reste ensuite à re modifier les articles et celà prends facilement plus de six mois . La solution toute faite et automatique a donc son avantage, si elle existe ? Il y a surement du coté de Spip contrib des solutions, car le "problème" a du maintes fois se poser. Voilà une belle expérience qui va pouvoir sans doute déboucher sur une jolie publication : Du html à SPIP
Ernestine Posté 4 Septembre 2003 Auteur Posté 4 Septembre 2003 Merci à vous. Après avoir posé ma question, je me suis dit qu'elle n'avait sûrement pas de réponse type, mais apparemment si, enfin plus ou moins. Anonymus> Toutes mes pages étant faites avec le même modèle de Dreamweaver, elles sont effectivement formatées de la même façon, ce qui est déjà un excellent point. Merci beaucoup pour ces premiers conseils si précis et si détaillés, je vais essayer de les mettre en pratique. Dan> J'attends avec impatience les éventuelles réponses que tu auras sur la liste SPIP.
Cariboo Posté 4 Septembre 2003 Posté 4 Septembre 2003 En fait si, j'ai été étonné au début, mais pour ajouter des articles dans spip, il suffit d'inserer des enregistrements dans la table spip_articles. Pourvu que l'ID n'existe pas déjà, cela marche du premier coup. Si on veut créer l'arborescence automatiquement, il faut bien renseigner l'id de rubrique dans l'enregistrement mais c'est tout. J'ai fait cela souvent, il n'y a pas de pb. Le reste (indexation etc...) est automatique
Ernestine Posté 12 Septembre 2003 Auteur Posté 12 Septembre 2003 Après maintes péripéties, et avec la technique d'Anonymus, j'ai désormais un fichier recup.php3 qui prend l'URL d'une page de mon site en paramètre et en ressort les variables : $surtitre $titre $soustitre $descriptif $chapeau $texte ainsi que $rubrique qui est le nom de la rubrique à laquelle appartiendra l'article. Il faut maintenant que j'insère tous ces articles dans les tables SPIP. Quelqu'un pourrait-il me donner un exemple ? Merci d'avance, Ernestine
Anonymus Posté 12 Septembre 2003 Posté 12 Septembre 2003 (modifié) Puisque c'est toi, tu fais un GROS copié/collé, ca devrait marcher... mais j'ai pas essayé // D'abord, se connecter à la base de données. // Evidement, tu modifies les 5 premieres lignes : // =================== $serv="mon serveur"; $user="monuser"; $pass="monpass"; $db="mabase"; $table="matable"; if(!($link = _AT_mysql_connect($serv,$user,$pass))){ die("erreur de connection à la base "); } if(! _AT_mysql_select_db($db)){ die("probleme de selection de la base "); } // =================== // Ensuite, tu as tes variables $titre, $texte, etc.... // Il faut les formater pour qu'elles entrent dans la base. // A titre d'exemple, un guillement arrete le script. // On dit qu'il faut l'echapper. // Ainsi, au lieu d'ecrire (voir ligne suivante) // ' // on écrit : (voir ligne suivante) // \' // J'utilise un vieux script que je ne change pas, // et qui peut etre optimisé, mais d'une manière générale, ca donne ca : function F_txt($txt){ $txt=htmlentities($txt,ENT_QUOTES); $txt=stripslashes($txt); $txt=str_replace("<?","< ?",$txt); $txt=str_replace("'","\'",$txt); $txt=nl2br($txt); return $txt; } // Cette fonction retourne le texte formaté. // Ensuite vient l'insertion dans la base : // A supposer que l'ordre des colonnes dans la base soit : // $surtitre $titre $soustitre $descriptif $chapeau $texte // ca donne : $query ="INSERT INTO $matable"; // nom des champs de la table : $query .=" (id,surtitre,titre,soustitre,descriptif,chapeau,texte)"; $query .=" VALUES ('',"; $query.="'".F_txt($surtitre)."',"; $query.="'".F_txt($titre)."',"; $query.="'".F_txt($soustitre)."',"; $query.="'".F_txt($descriptif)."',"; $query.="'".F_txt($chapeau)."',"; $query.="'".F_txt($texte)."'"; $query .=")"; // La requete est construite, on l'envoie.. if (! $result = mysql_query($query,$mysql->link)){ echo"requete echouée...désolé"; } else{ if (mysql_affected_rows()>0)echo"No problem...."; } // Voilà, c'est fini... echo"Tchaoo.."; Modifié 12 Septembre 2003 par anonymus
Ernestine Posté 13 Septembre 2003 Auteur Posté 13 Septembre 2003 Heu... Merci... mais en fait j'aurais bien aimé un exemple adapté à SPIP, car la table des articles est quand même super compliquée... Finalement, je pense que ça donne ça : $tist = time();$dati = date($tist);$query="INSERT INTO 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, auteur_modif, date_modif) VALUES ('', '$surtitre', '$titre', '$soustitre', '$rubrique', '$descriptif', '$chapo', '$texte', '', $dati, 'publie', '$rubrique', $tist, 'oui', $dati, '0', '0', '0', 'pos', '1', $dati) "; En tous cas merci pour le truc qui permet de traiter les caractères spéciaux, je crois qu'il va m'être d'une aide précieuse édit : Ah non, il doit y avoir un problème, ça me dit que j'ai écrit l'article le samedi 63 octobre Je comprends rien aux dates en php/mysql.
Anonymus Posté 13 Septembre 2003 Posté 13 Septembre 2003 Je ne connais pas SPIP, ni les noms de tables.. Si tu veux que la date corresponde à aujourd'hui, il faut mettre NOW(). Ainsi, si tu fais une requete comme ca : $query="INSERT INTO essai(id,date) VALUES ('',NOW())"; Pour le truc qui traite les caractères spéciaux, je ne suis pas tout à fait sûr (après réflexion) que ca te convienne. Cause : Elle avait été créé pour un forum... et donc ca va peut etre désactiver les liens hypertextes. voilà : Plus de précisions ce soir, j'ai quartier libre, je me penche sur ton probleme...promis A+.
Cariboo Posté 13 Septembre 2003 Posté 13 Septembre 2003 Les dates dans la table articles de SPIP sont soit au format date-time, soit au format timestamp. Le format datetime ressemble à 2003-09-13 09:50:55 Le format timestamp à 20030913095055 Il ne faut pas se tromper dans le format. Comment fais tu pour entrer des valeurs dans $dati ? Quelle est l'origine de la donnée ?
Anonymus Posté 13 Septembre 2003 Posté 13 Septembre 2003 Soit : - Pour le format datetime (2003-09-13 09:50:55) la fonction : $a_date=date("Y\-m\-d H\:i\:s"); - Pour le format timestamp : $a_date=date("YmdHis"); Donc : $a_date=date("Y\-m\-d H\:i\:s"); echo"date==".$a_date."<br>"; $a_date=date("YmdHis"); echo"date==".$a_date."<br>"; Voilà.
Ernestine Posté 13 Septembre 2003 Auteur Posté 13 Septembre 2003 Hello, Pour les dates au format TIMESTAMP je rentre time() et pour le format DATETIME je rentre getdate(time()) Ca donne des dates bizarres (genre 63 octobre) mais ce n'est pas grave : l'essentiel est que les articles puissent être classés par ordre chronologique. D'ailleurs je crois que c'est bon. Il ne me reste plus qu'à remettre en place l'URLrewriting car je souhaite que mes noueaux articles SPIP aient exactement les mêmes URLs que les pages actuelles de mon site.
Anonymus Posté 13 Septembre 2003 Posté 13 Septembre 2003 Ne rentres pas time(), c'est une fonction qui retourne : Le nombre de secondes écoulées depuis le premier janvier 1970 à 00h00. Il permet de faire des calculs très intéressants, mais est trop compliqué pour ton cas (désolé ) Si tu fais $today=getdate(time()) ca consiste à dire 'je veux un tableau associatif contenant le jour, mois année d'aujourd'hui. Donc : $today=getdate(time()); echo $today['year']."-".$today['mon']."-".$today['mday']." ".$today['hours'].":".$today['minutes'].":".$today['seconds']."<br>"; revient à : $a_date=date("Y\-m\-d H\:i\:s"); echo"date==".$a_date."<br>"; Voilà.
Ernestine Posté 14 Septembre 2003 Auteur Posté 14 Septembre 2003 Merci C'est bon, j'ai tout fini La partie journal de mon site (soit 90%) est désormais en spip : http://www.journal-Ernestine.com/ Au centre apparaît le dernier article écrit et à gauche les mois de l'année : chaque mois correspond à une rubrique. Et quand on clique dessus on a la liste des articles. J'ai renoncé à faire les arborescences virtuelles dans l'url, les URLs ne sont pas trop moches quand même. J'espère que je ne perdrai pas trop au niveau du référencement (j'ai mis une redirection des anciennes pages vers les nouvelles).
Olivier Posté 14 Septembre 2003 Posté 14 Septembre 2003 Salut agalia Chapeau pour le travail, heureusement que le texte ne devait pas être remis en forme avec des titres, du gras ... mais du beau boulot
Ernestine Posté 15 Septembre 2003 Auteur Posté 15 Septembre 2003 Merci Des mises en forme, il y en avait quand même quelques unes. Ne serait-ce que pour les dialogues, si dans le texte j'écris : _ Tu vas au bal ? _ Qui ? _ Toi _ Moi ? _ Oui _ Non j'y vais pas et toi ? _ Non Comme tu le sais, écrit tel quel dans un article SPIP, le underscore "_" signifie retour à la ligne. Et pour écrire en gras il faut mettre des { , donc finalement un copier coller de la page aurait donné : Tu vas au bal ? Qui ? Toi Moi ? Oui Non j'y vais pas et toi ? Non Mais comme c'est un script php qui est allé récupérer les contenus en HTML et qui les a inserrés directement dans les tables SPIP, il n'y avait plus à se soucier des balises d'affichage SPIP, et tout rentre dans l'ordre.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant