Ancres et plugin newsletters
Bonjour,
J'ai levé un bug avec le plugin Newsletters.
Dans le texte d'une newsletter, si je mets [lien avec ancre->12#monancre]
Ça génère un code HTML foireux, avec le ] placé à la fin du paragraphe.
J'ai essayé de déclarer les champs sans raccourcis avec :
$sans_raccourci = pipeline('correction_liens_internes_sans_raccourci', array(
'article' => array('virtuel', 'url_site'),
'site' => array('url_site'),
'newsletter' => array('html_email', 'texte_email'),
'mailshot' => array('html'),
)
);
Ça ne corrige que la moitié : le ] mal placé n'est plus là. Mais les URLs qui devraient être les urls finales dans le html de la newsletter ne sont bonnes que s'il n'y a pas d'ancre.
Donc :
-
[lien avec ancre->12#monancre]
donne l'url12#monancre
-
[lien avec ancre->12]
donne bien l'url voulue (propre, ou ?article12)
Au passage, je n'ai pas compris le code dans le pipeline :
if (isset($sans_raccourci[$type]) and in_array($champ, $sans_raccourci[$type])) {
$raccourci_spip = false;
}
$flux['data'][$champ] = correction_liens_internes_correction($valeur, $raccourci_spip);
En mettant :
if (isset($sans_raccourci[$type]) and in_array($champ, $sans_raccourci[$type])) {
$raccourci_spip = false;
} else {
$flux['data'][$champ] = correction_liens_internes_correction($valeur, $raccourci_spip);
}
Pour être précis, pourquoi rentrer dans la fonction correction_liens_internes_correction
si $raccourci_spip = false
?
PS : le code auquel je suis arrivé qui marche pour moi :
function correction_liens_internes_pre_edition($flux){
if ($flux['args']['action'] == 'modifier') {
$sans_raccourci = pipeline('correction_liens_internes_sans_raccourci', array(
'article' => array('virtuel', 'url_site'),
'site' => array('url_site'),
'newsletter' => array('html_email', 'texte_email'),
'mailshot' => array('html'),
)
);
foreach ($flux['data'] as $champ => $valeur) {
$raccourci_spip = true;
$type = $flux['args']['type'];
if (isset($sans_raccourci[$type]) and in_array($champ, $sans_raccourci[$type])) {
$raccourci_spip = false;
} else {
$flux['data'][$champ] = correction_liens_internes_correction($valeur, $raccourci_spip);
}
}
}
return $flux;
}