[PHP] Couper un code html en pages, et préserver les balises
9 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
[PHP] Couper un code html en pages, et préserver les balises
J'ai un code HTML, mettons:
<p>aaa<b>xx</b></p>
Je veux le diviser pour l'afficher sur 2 pages différentes.
Si je le coupe net, j'ai:
page 1: <p>aaa<b>x
page 2: x</b></p>
Ca va pas.
Comment faire pour préserver le balisage ?
Je pense que le mieux est de dupliquer le balisage pour aboutir à cela:
page 1: <p>aaa<b>x</b></p>
page 2: <p><b>x</b></p>
Est-ce qu'un prince du PHP connaitrait une technique ultime et souhaiterait la partager, pour recueillir les honneurs et l'admiration de tous ?
<p>aaa<b>xx</b></p>
Je veux le diviser pour l'afficher sur 2 pages différentes.
Si je le coupe net, j'ai:
page 1: <p>aaa<b>x
page 2: x</b></p>
Ca va pas.
Comment faire pour préserver le balisage ?
Je pense que le mieux est de dupliquer le balisage pour aboutir à cela:
page 1: <p>aaa<b>x</b></p>
page 2: <p><b>x</b></p>
Est-ce qu'un prince du PHP connaitrait une technique ultime et souhaiterait la partager, pour recueillir les honneurs et l'admiration de tous ?
C'est sûr ! ça va regexper dans les chaumières ...
Le but est d'alléger les pages d'un site à dominante "graphique" avec une zone textuelle un peu trop lourde et chronologique (du plus récent au plus ancien). Je préfère garder une page d'entrée légère et récente.
C'est pas pour augmenter artificiellement le nombre de pages indexées, même si ça pourrait servir à ça.
Le but est d'alléger les pages d'un site à dominante "graphique" avec une zone textuelle un peu trop lourde et chronologique (du plus récent au plus ancien). Je préfère garder une page d'entrée légère et récente.
C'est pas pour augmenter artificiellement le nombre de pages indexées, même si ça pourrait servir à ça.
Si tu es en php 5 en en XHTML, charges les fichiers avec simple_xml_load_file
Comme c'est chargé sous forme d'arbre, tu peux trouver assez facilement des règles pour couper aux bons endroits (couper au miliue d'un paragaphe ou d'un titre, c'est pas terrible). Tu fais ensuite tes modifs à l'aire des fonctions de type DOM (ex http://www.php.net/manual/fr/function.s ... dchild.php ), puis tu claques chaque bout dans un XML différent: http://www.php.net/manual/fr/function.s ... -asxml.php
Rigolo, non ?
Comme c'est chargé sous forme d'arbre, tu peux trouver assez facilement des règles pour couper aux bons endroits (couper au miliue d'un paragaphe ou d'un titre, c'est pas terrible). Tu fais ensuite tes modifs à l'aire des fonctions de type DOM (ex http://www.php.net/manual/fr/function.s ... dchild.php ), puis tu claques chaque bout dans un XML différent: http://www.php.net/manual/fr/function.s ... -asxml.php
Rigolo, non ?
Bon, merci de ces conseils. J'ai finalement opté pour des expressions régulières et j'ai abouti à une série de fonctions qui permettent de scinder un texte au un code html en plusieurs morceaux (pages) tout en gardant le balisage pour que l'affichage soit correct pour chacun des morceaux.
Je vais mettre mon code ici car: 1/ Si ça peut servir à quelqu'un tant mieux; 2/ C'est sûrement susceptible d'être amélioré; 3/ J'aime bien wri.
C'est censé être le plus léger et le moins gourmant possible... mais bon.
Je vais mettre mon code ici car: 1/ Si ça peut servir à quelqu'un tant mieux; 2/ C'est sûrement susceptible d'être amélioré; 3/ J'aime bien wri.
C'est censé être le plus léger et le moins gourmant possible... mais bon.
- Code: Tout sélectionner
<?
$page_len=30; //longueur d'une page (en caractères)
//chaîne à diviser en plusieurs pages
$string="<div>
azerty<p>
qsdf,%<b>oiu</b> poi<u>uyt<a href=''>wxcvb 567
lkjh</a>jhg jhuytrhg kjhkk u ttrrf h.</u>fdsq<br />
loloploklo
</p></div>a";
//fonctions de division de chaîne
function callback_empty_tags($in) {
//echo "'".$in[1]."'|".strlen($in[1])."#";
return str_pad("",strlen($in[1]));
}
function callback_insert_words($in) {
return (str_pad("",strlen($in[1])).$in[2].str_pad("",strlen($in[3])));
}
function callback_add_splitter($in) {
return ">".wordwrap($in[1],100,"<a></a>")."<";
}
function strip_tags_offset(&$string) {
$string_without_tags=preg_replace_callback("`(<[^>]+>)`","callback_empty_tags",$string);
return $string_without_tags;
}
function string_add_splitters(&$string) {
$string_splitters=preg_replace_callback("`>([^<]+)<`","callback_add_splitter",$string);
return $string_splitters;
}
function show_page($string,$page_len) {
$string=string_add_splitters(preg_replace("`(\n|\r)`"," ","<a></a>".$string."<a></a>"));
$string_without_tags=strip_tags_offset(&$string);
preg_match_all("`(<[^>]+>)`",$string,$b,PREG_OFFSET_CAPTURE);
$num0=end($b[1]);
$num=($num0[1]>$num1[1])?$num0[1]:$num1[1];
//reset($b[1]);
$page_total=ceil($num/$page_len);
$p=1;
while ($p<=$page_total) {
$c=$string_without_tags;
$c=preg_replace_callback("`(.{".($page_len*($p-1))."})(.{0,".$page_len."})(.*)`","callback_insert_words",$c);
foreach ($b[1] as $k=>$v) {
$c=substr_replace($c,$v[0],$v[1],strlen($v[0]));
}
$out[$p]=preg_replace("`> +<`","><",preg_replace("` {2,}`"," ",$c));
$p++;
}
return $out;
}
//
$out=show_page($string,$page_len);
echo "<pre>";print_r($out);echo "</pre>";
?>
9 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Google Code publie des statistiques sur le codage HTML des pages web
- Balises meta et référencement : les bases à savoir
- HTML 5 : quel impact sur le référencement ?
- Comment créer une page web en PHP
- Référencement : faut-il abandonner les balises META ?
- X-Robots-Tag : directive pour bloquer les robots dans l'entête HTTP : explications
- Où placer son fichier Sitemap ? A la racine ?
- Articles de R et D sur le PageRank, le SpamRank et le spam...
- 2 millions de serveurs dans les data centers Google ?
- Description d'une page-type optimisée pour le référencement
Consultez la description détaillée des produits ou services de Google suivants : Google Code
- Analyse de l'entête HTTP
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités









le forum