Aller au contenu

Transformer les pages en articles SPIP


Ernestine

Sujets conseillés

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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é par anonymus
Lien vers le commentaire
Partager sur d’autres sites

Il faut peut etre mettre ce post dans php/programmation, non ?

:nono:

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :down: .

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

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

Lien vers le commentaire
Partager sur d’autres sites

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é par anonymus
Lien vers le commentaire
Partager sur d’autres sites

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 :lol: Je comprends rien aux dates en php/mysql.

Lien vers le commentaire
Partager sur d’autres sites

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+.

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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à.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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à.

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...