Je viens de finir une solution qui fonctionne. Après, il faut voir au niveau des performances si on ne ralentit pas trop le serveur.
un fichier mes_fonctions contenant (mes_fonctions.php3):
"
<?
function coupure_texte_bis ($texte, $nbr_carac_coupure="2000") {
if (strpos (substr ($texte, $nbr_carac_coupure, 200), ".")) $position_point = strpos (substr ($texte, $nbr_carac_coupure, 200), ".");
else $position_point = 200;
if (strpos (substr ($texte, $nbr_carac_coupure, 200), "?")) $position_interrogation = strpos (substr ($texte, $nbr_carac_coupure, 200), "?");
else $position_interrogation = 200;
if (strpos (substr ($texte, $nbr_carac_coupure, 200), "!")) $position_exclamation = strpos (substr ($texte, $nbr_carac_coupure, 200), "!");
else $position_exclamation = 200;
if (strpos (substr ($texte, $nbr_carac_coupure, 200), ";")) $position_pt_virgule = strpos (substr ($texte, $nbr_carac_coupure, 200), ";");
else $position_pt_virgule = 200;
$position_ponctuation = min ($position_point, $position_interrogation, $position_exclamation, $position_pt_virgule);
if ($position_ponctuation && $position_ponctuation < 200) {
if ($position_ouverture = $nbr_carac_coupure + $position_ponctuation + strpos (substr ($texte, $position_ponctuation, 200), "<")) {
if (substr ($texte, $position_ouverture + 1, 1) == "/") {
if (strlen ($texte) > $position_ouverture + 200) return coupure_texte_bis ($texte, $position_ouverture);
else return strlen ($texte);
} else return $position_ponctuation + 1 + $nbr_carac_coupure;
} else return $position_ponctuation + 1 + $nbr_carac_coupure;
} else return coupure_texte_bis ($texte, $nbr_carac_coupure + 200);
}
function coupure_texte ($texte) {
$numero = 1;
$nbr_carac_coupure = 2000;
if (strlen ($texte) > $nbr_carac_coupure) {
while (strlen ($texte) > $nbr_carac_coupure + 500) {
$position_coupure = coupure_texte_bis ($texte, $nbr_carac_coupure);
$texte_retour .= substr ($texte, 0, $position_coupure)."<".$numero.">";
$texte = substr ($texte, $position_coupure);
$numero ++;
}
return "<0>".$texte_retour.$texte."<".$numero."></0><page_max>$numero</page_max><precedent><suivant>";
exit;
}
return $texte;
}
?>
"
la boucle faisant un appel à l'article (article-dist.html):
"
<BOUCLE_art(ARTICLES){id_article}>
[(#TEXTE|coupure_texte|justifier)]
</BOUCLE_art>
"
on modifie le fichier inc-public-global.php3:
ajout de code sur la ligne 154 du fichier original
"
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ajout de code pour coupure article
//
if (!$var_page && file_exists ($chemin_cache)) {
$filese = file ($chemin_cache);
reset ($filese);
while (list (, $val) = each ($filese)) {
if (strpos ($val, "<2>")) $var_page = 1;
}
unset ($filese);
}
if ($var_page) ob_start ("");
//
// fin ajout de code pour coupure article
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"
ajout de code sur la ligne 180 du fichier original
"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ajout de code pour essai
//
if ($var_page || strpos (ob_get_contents(), "<2>")) {
function seb_coupure_page($page, $coupure_page) {
global $id_article, $var_page;
$debut = substr ($page, 0, strpos ($page, "<0>"));
$coupure_page_un = $coupure_page - 1;
$milieu = substr ($page, strpos ($page, "<".$coupure_page_un.">") + strlen ($coupure_page_un) + 2, strpos ($page, "<".$coupure_page.">") - strpos ($page, "<".$coupure_page_un.">") - strlen ($coupure_page_un) - 2);
$fin = substr ($page, strpos ($page, "</0>") + 4);
if ($var_page > 1) $fin = ereg_replace ("<precedent>", "<BR><A HREF='article.php3?id_article=$id_article&var_page=".($var_page - 1)."'>Précédent</A>", $fin);
if ($var_page < substr ($fin, strpos ($fin, "<page_max>") + 10, strpos ($fin, "</page_max>") - strpos ($fin, "<page_max>") - 10)) $fin = ereg_replace ("<suivant>", "<BR><A HREF='article.php3?id_article=$id_article&var_page=".($var_page + 1)."'>Suivant</A>", $fin);
$fin = "<BR>".substr ($fin, strpos ($fin, "</page_max>") + 11);
return $debut.$milieu.$fin;
}
$la_page = seb_coupure_page(ob_get_contents(), $var_page);
ob_end_clean();
echo $la_page;
ob_start("");
}
//
// fin d'ajout de code
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"
On peut modifier le nombre de caractères à la coupure "$nbr_carac_coupure" dans le fichier mes_fonctions.php3.
En cas de problème mettre sebastienchoblet@hotmail.com en copie, merci
Sebastien
Et bien je te remercie de ton aide si tu arrives à faire quelque chose.
C'est assez simple je pense mais je bloque sur le passage de variable
moi.
Sinon j'avais envoyé un mail à info@mediasol.org trouvé sur la home du
site.
A plus
Éric
-----Message d'origine-----
De : Choblet Sébastien [mailto:devess@mire.net]
Envoyé : jeudi 29 août 2002 18:11
À : spip@taplanete.net
Cc : spip-dev@rezo.net
Objet : Re: Re : [spip-dev] Faire passer une variable à un scr
Bonjour,
En effet, nous avons développé une solution php pour la coupure du texte
mais elle utilise un affichage par recherche des informations
directement dans la base de données sans passer par une boucle spip.
Je vais voir pour faire une fonction à mettre dans le fichier
"mes_fonctions.php3" et utilisation de boucles spip pour l'affichage des
données.
Je te tiens au courant de l'avancement du développement.
Désolé pour ton mail précédent : à quelle adresse l'as tu envoyé car je
n'ai rien reçu
@+
Sebastien
> Le jeudi, 29 aoû 2002, à 16:12 Europe/Paris, Éric [taplanete.net] a
> écrit :
>
> > Le problème avec cette solution c'est que les rédacteurs doivent
penser
> > à la mise en page de leur article ce qui ne sera pas vraiment le cas
> > sur
> > mon site.
> >
> > Je pense qu'il y a une solution simple vu qu'elle est utilisée ici :
> > http://www.mediasol.org/xarticle.php3?id_article=2278
>
> C'est une fonction maison en php
>
> > Mais je n'arrive pas à voir laquelle. Et j'ai contacté le webmaster
de
> > ce site il y a une semaine mais pour l'instant, pas de nouvelles !
>
> Tu n'as pas du avoir le bon mail... J'ai mis le développeur en
copie
> de ce mail.
>
> Sébastien, ce monsieur souhaite savoir comment l'on fait pour
> afficher les articles en plusieurs pages... Pourrais-tu lui passer la
> fonction ?
>
> Désolé de réponde si tard, je n'avais pas encore lu ce thread
>
> --
> gfabre@resaction.com
>
> _______________________________________________
> spip-dev@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-dev
> Documentation de SPIP : http://www.uzine.net/spip
_______________________________________________
spip-dev@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-dev
Documentation de SPIP : http://www.uzine.net/spip
From ypr@alex.fr Thu Sep 12 19:32:10 2002
Return-Path: <ypr@alex.fr>
Received: from gamay.alex.fr (mailhost.alex.fr [194.2.218.249])
by miel.brainstorm.fr (Postfix) with ESMTP id 5143D1BFAC
for <spip-dev@rezo.net>; Thu, 12 Sep 2002 19:32:10 +0200 (CEST)
Received: from JEROME (jerome.alex.fr [10.0.0.16])
by gamay.alex.fr (Postfix) with SMTP
id AF94823AE2; Thu, 12 Sep 2002 19:32:09 +0200 (CEST)