Movable Type [3.1.x] : validation XHTML strict
Movable Type est livré en standard pour fonctionner avec le DTD (document type definition) XHTML 1.0 transitionnel. Pour une raison qui vous appartient, vous souhaitez passer en XHTML 1.0 strict, ou encore XHTML 1.1.
Vous prenez donc le temps de remanier vos gabarits afin de rendre valide votre blogue avec sa nouvelle déclaration de DTD. Mais, stupeur, le validateur échoue avec l’erreur : there is no attribute “target”. Vous êtes pourtant bien sûr de ne pas avoir utilisé d’attribut “target” dans vos gabarits.
Le problème vient du tag <$MTCommentAuthorLink$> qui génère automatiquement un target=”_blank” sans vous demander votre avis (et de même façon pour le tag <$MTEntryAuthorLink$> si vous l’utilisez). À part un changement de DTD ou l’abandon du lien sur le nom des auteurs de commentaires, il n’existe aucune autre solution que de modifier le code de Movable Type. La modification est simple, mais il faut penser à la refaire à chaque mise à jour de votre installation, ce qui est assez pénible.
On souhaiterait bien voir apparaître dans les futures versions de Movable Type un nouvel attribut pour ce tag, du style :
<$MTCommentAuthorLink use_target="0"$>
En attendant, il vous faut modifier le fichier lib/MT/Template/Context.pm. Ouvrez ce fichier, faites une recherche de l’attribut “target”. Il y a trois occurrences de target=”_blank” que vous devez supprimer :
sub _hdlr_entry_author_link :
if ($show_url && $a->url) {
return sprintf qq(<a target="_blank" href="%s">%s</a>), $a->url, $name;
} elsif ($show_email && $a->email) {
my $str = "mailto:" . $a->email;
$str = spam_protect($str) if $args->{’spam_protect’};
return sprintf qq(<a href="%s">%s</a>), $str, $name;
} else {
return $name;
}
sub _hdlr_comment_author_link :
if ($c->id && !$args->{no_redirect}) {
return sprintf(qq(<a target="_blank" title="%s" href="%s%s?__mode=red;id=%d">%s</a>),
$url, $cgi_path, $comment_script, $c->id, $name);
} else {
# In the case of preview, show URL directly without a redirect
return sprintf(qq(<a target="_blank" title="%s" href="%s">%s</a>),
$url, $url, $name);
}
Enfin, pour refléter cette modification sur votre site, il vous faut le reconstruire intégralement (à moins d’utiliser la publication dynamique).
garoo
Ca doit être trivial de faire un plugin qui crée des tags MTCommentAuthorLinkStrict et MTEntryAuthorLinkStrict, plutôt que d’éditer le perl à chaque màj, non ?
(Ah, tiens, ici y’a TypeKey.)
Laurent
Sans doute. Qui s’y colle ?
lithium
Tiens, je n’avais même pas remarqué qu’on pouvait laisser ses commentaires autrement qu’en ouvrant un popup, maintenant… Faut dire que je ne viens jamais dans le coin… Quoi ? Je suis hors-sujet ? OK, je sors.
garoo
C’est pas hors sujet puisque c’est un post sur MT :)
D’ailleurs, puisqu’on en parle, je ne comprends pas qu’en 2005 tu supportes encore un CMS qui met trois heures à enregistrer le moindre commentaire, et qui n’est pas capable de se souvenir deux fois de suite de l’identité du commentateur :)
Laurent
Il n’y a que toi dont mon CMS ne se souvient pas. Va savoir pourquoi…
Pour la lenteur, cf. mon hébergeur.
Da Bourz
En plus, les Target Blank c’est Mal (c) (tm), voir :
http://www.bourzeix.com/weblog/index/2004/09/16/90-target-blank
;-)
pHiLoGrApH
Une petite question qui n’a rien à voir : la publication différée est-elle possible avec la version gratuite ?
Laurent
La version gratuite est strictement identique à la version payante.
Ce qui diffère c’est le nombre d’utilisateurs/blogues.
lithium
>En plus, les Target Blank c’est Mal.
Ok mais on peut faire ça sans cette balise, et ça, c’est bien…
Blah ?