Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#26 2010-08-26 15:46:28

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Mmmm... Avec ce code, je "vois" de nouveau toutes les balises : elles sont affichées comme du texte dans le navigateur, au lieu d'être interprétées !

En outre, puis-je ajouter des fonctions de "traitement" du contenu du bllet dans la fonction text_cut ? Puisque, si je comprends bien, elle "repère" les balises à l'intérieur du contenu d'un billet, on doit pouvoir en fermer certaines, mais aussi en supprimer d'autres, non ? En l'occurrence, les balises "img" devraient être supprimées du contenu "tronqué" du billet, puisque l'objectif de cette fonction est de n'afficher qu'un aperçu.

Hors ligne

#27 2010-08-26 16:43:15

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Méthode cutString

Heu oui, il faut enlever le encode_html="1" des balises, en fait :)


Dyslexics have more fnu!

Hors ligne

#28 2010-08-26 16:43:49

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Méthode cutString

et dans text_cut, tu peux faire ce que tu veux, elle reçoit en paramètre le contenu du billet, et renvoit le contenu voulu.


Dyslexics have more fnu!

Hors ligne

#29 2010-08-26 17:02:56

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Effectivement, ça fonctionne parfaitement comme ça :) Merci beaucoup !

En terme de ressources, ça n'est pas trop gourmand ? Puis-je me permettre d'ajouter une dizaine de balises à celles qui existent par défaut dans "text_cut" ? (la plupart des balises utilisées par défaut dans l'éditeur de billet de DC ne s'y trouvent pas : <strong>, <ins>, etc...)

Pour ce qui est de supprimer une balise du contenu d'un billet : c'est bien dans la condition "if (in_array($sub, $tags)) {" que ça se passe ? Pour ma fonction EntryIfHasImage, j'utilise ce code pour repérer une image :

global $core, $_ctx;
$p_url = $core->blog->settings->system->public_url;
$pattern = "(?:".preg_quote($p_site,"/").")?".preg_quote($p_url,"/");
$pattern = sprintf("/<img.+?src=\"%s(.*?\.(?:jpg|gif|png))\"[^>]+/msu",$pattern);

Mais étant donné que le but de la fonction text_cut est déjà de repérer ces balises, je dois pouvoir me passer de cela ?

Hors ligne

#30 2010-08-27 12:28:17

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Fix a écrit :

En terme de ressources, ça n'est pas trop gourmand ? Puis-je me permettre d'ajouter une dizaine de balises à celles qui existent par défaut dans "text_cut" ?

Je me retrouve justement avec le message d'erreur suivant !
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes) in /mnt/137/sdb/f/8/sxjpl/dotclear-files/themes/ToutNouveau/_public.php on line 472
La ligne 472 est la suivante (dans la fonction text_cut) :

if (in_array($sub, $tags)) { array_push($open_tags, $sub); }

J'imagine néanmoins que le problème est moins dû à cette ligne en particulier, qu'à la trop grande consommation de mémoire de mon blog en général... Je vais voir à essayer de réduire tout ça...

Hors ligne

#31 2010-08-27 13:45:30

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Alors la fonction achoppe en fait lorsque le billet contient une image ou une vidéo. Dans ce cas là, c'est ou erreur 500, ou erreur de mémoire...

J'essaie donc, dans la fonction text_cut, de supprimer les images et les vidéos de la chaine $str.

Voici le code que j'utilise pour les images :

$str = preg_replace("#<img.*?>#", "", $str);

Quelqu'un peut-il me dire si je suis sur la bonne voie ? Parce qu'en l'état, mon code est sans aucun effet... mais les expressions régulières (entre autres) ça n'est pas mon fort...
J'ai aussi tenté ça, tiré directement du code de dotclear, mais sans plus d'effet :

$str = preg_replace("/<img.+?src=\"%s(.*?\.(?:jpg|gif|png))\"[^>]+/msu", "", $str);

Hors ligne

#32 2010-08-27 14:11:59

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Méthode cutString

Essaie avec

$img_regexp = '/<img .*?src="(.+?)"/i';
$str = preg_replace($img_regexp, "", $str);

Hors ligne

#33 2010-08-27 14:18:55

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Pas mieux :( L'image est toujours là malheureusement...

Hors ligne

#34 2010-08-28 15:32:34

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Au temps pour moi amalgame : je suis un âne. J'avais mis la regex au tout début de la fonction, alors qu'un peu plus loin il y a :

$str = $content.' <';

Et il a fallu 2 heures pour que je m'en rende compte :) Entre temps, je me suis penché sur les expressions régulières... ça aura au moins eu ce mérite :)

Du coup je m'en suis concocté plusieurs, dont celle-ci pour supprimer les vidéos :

$str = preg_replace('`<object(.*?)</object>`', '', $str);

Je pense que cette regex fonctionne, mais je continue à avoir une erreur 500 à chaque fois qu'il y a un message avec une vidéo à afficher.
Les autres pages de mon site sont toujours parfaitement accessibles ; en outre, mettre hors-ligne le message contenant une vidéo résout le problème. De même, ne pas passer par la fonction text_cut (autrement dit, remplacer "{{tpl:TrunkedEntryExcerpt cut_string="450"}}" par "{{tpl:EntryExcerpt cut_string="450"}}" dans le template) résoud également le problème.

C'est donc bien la fonction text_cut qui est en cause, et qui - sur mon blog (hébergé chez Free) du moins - ne fonctionne pas : elle provoque une erreur 500 pour tout message contenant une vidéo.

Quelqu'un aurait-il une idée pour résoudre cet épineux problème ? Merci d'avance !

Hors ligne

#35 2010-08-28 16:28:06

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Méthode cutString

Je peux te proposer ceci :

$vid_regexp = '/<object.*?>.*?<\/object>/isx';
$str = preg_replace($vid_regexp, "", $str);

qui devrait supprimer toutes les balises object dans ta chaîne

Hors ligne

#36 2010-08-28 17:14:57

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Méthode cutString

Idem. Erreur 500. Je précise que j'ai aussi essayé en ajoutant une vidéo à un billet qui, jusqu'ici, était affiché sans problème.
Mes vidéos proviennent de mon gestionnaire de médias, et je les insère dans un billet à l'aide du bouton "Sélecteur de médias". Les vidéos que j'utilise pour tester ne posent évidemment aucun problème quand on affiche le billet seul qui les contient. L'erreur ne se produit que lorsque la fonction text_cut est utilisée.

Je ne vois que 2 explications :
. ou la regex ne plaît pas à Free... peut-être cette regex utilise-t-elle trop de mémoire ? la balise <object> contient peut-être trop d'éléments à supprimer ?
. ou la fonction text_cut a un problème avec un billet dont on a retiré les balises <object>...

Le seul moyen que je vois pour en savoir plus, c'est que quelqu'un qui ne soit pas hébergé chez Free soit assez gentil pour tester la fonction TrunkedEntryContent ou TrunkedEntryExcerpt avec un billet contenant une vidéo...
... si ce quelqu'un existe, merci à lui :)

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map