Submitted by Johnnytapette on
Bonjours à tous!
Je travail actuellement sur un thème Drupal version 6.x. Jusqu'ici, tout va à merveille. Cependant, je viens de frapper mon premier problème majeur (ça fait plus de 2 heures que je buche sur ce problème).
J'essai de modifier les titres des liens qui se trouvent dans le teaser. Les liens du genre 'Ajouter un commentaire' (comment_add) 'En savoir plus' (node_read_more) et '2 commentaires' (comment_comments).
J'aimerais simplement afficher des titres différents de ceux incluent dans le core.
J'ai déjà lu plusieurs billets à ce sujet. On y parle de la modification des termes avec le module de traduction, de création d'un module personnalisé avec la fonction hook_link_alter. Cependant, ce que j'aimerais faire, c'est d'insérer la fonction hook_link_alter dans le fichier template.php propre à mon thème sans faire appel à un module personnel ni à un tour de passe passe non exportable avec le module de traduction. Est-ce possible?
Le but étant simplement d'avoir un thème qui ne dépende pas d'autre ressources que le core Drupal pour être afficher convenablement.
N'hésitez pas à faire l'emploi d'exemples complet de votre code à ajouter au fichier template.php afin de simplifier la compréhension de la réponse.
Non, désolé, pas possible.
Permalien Soumis par Yoran le 15 Septembre, 2009 - 20:53
Non, désolé, pas possible. Pour utiliser un hook de module, tu as besoin d'un module. Qu'est-ce qui de gène dans cette approche ?
L'obligation de charger
Permalien Soumis par Johnnytapette le 15 Septembre, 2009 - 21:04
L'obligation de charger plusieurs modules si je veux que mon thème s'affiche convenablement. C'est un peu lourds, finalement, non?
M'enfin... comment je m'y prend alors, pour créé ce fameux module et modifier le texte avec lui?
http://drupalfr.org/node/7427
Permalien Soumis par lienty le 15 Septembre, 2009 - 22:33
http://drupalfr.org/node/7427
en suivant les différent lien tu as toutes les infos
cdlt
Tu peux faire ton module en
Permalien Soumis par Yoran le 16 Septembre, 2009 - 00:19
Tu peux faire ton module en suivant ce tuto : http://arnumeral.fr/node/14
Ici j'y explique l'ajout d'un lien, il suffit que tu remplaces le hook_link par le hook_link_alter et c'est bon. Pour le reste suis le lien donné par lienty, tout y est :)
Sinon pour ce qui est d'être lourd, je ne trouve pas spécialement, autant que peut l'être un thème au fond. Pour moi un site développé avec Drupal c'est au minimum 1 thème et 1 module custom. Avec cela tu fais absolument ce que tu veux.
Je suis nouveau en ce qui
Permalien Soumis par Johnnytapette le 16 Septembre, 2009 - 02:41
Je suis nouveau en ce qui concerne Drupal. Alors, pour moi la notion de module custom est nouvelle et symbole de lourdeur de script alors qu'un thème, selon ma vision première, se devrait d'être le plus léger possible et simple à transposer d'un site à l'autre sans avoir à faire diverses installations pour parvenir aux fins de l'utilisateur final.
Cependant, étant totalement novice, je m'en remet à vos bons conseils et vos connaissances professionnelles.
Je vais donc essayer tout ça et je vous reviens avec mon verdict final (ou plein de points d'interrogation).
PS: Merci Yoran pour ton lien et ton aide.
C'est génial! Ça
Permalien Soumis par Johnnytapette le 16 Septembre, 2009 - 04:31
C'est génial! Ça fonctionne à merveille.
Cependant.. j'ai tout de même une question (hehe) concernant 'comment_comments' (liens vers les commentaires avec, comme titre, le décompte du nombre de commentaires).
J'ai donc fait mon module avec le code suivant:
Malheureusement, comment_comments ne s'affiche pas correctement?
Des idées comment parvenir à afficher un texte différent selon la quantité de commentaire pour un node? :(
Concernant ton code et
Permalien Soumis par Yoran le 16 Septembre, 2009 - 09:39
Concernant ton code et spécialement la ligne :
1/ Tu devrais utiliser des switch / case qui rendrait le code plus rapide et plus compact
2/ Pourquoi fais tu un return plutôt qu'un $links[$name]['title'] =
3/ Tu utilises la fonction t() sur quelque chose de variable ce qui ne sert du coup pas à grand chose car il traduire @commentaire ;-)
4/ Même si tu mettais le t() au bons endroits, si tu laisses les chaînes en français, tu fais perdre du temps à ton code pour rien.
5/ Quelle valeur est censée avoir la variable $all qui n'est déclarée nul part ?
Pour ce qui est du nombre de commentaires, tu as cela normalement accessible dans le champ $node->comment_count
Voilà! C'est pourquoi
Permalien Soumis par Johnnytapette le 16 Septembre, 2009 - 18:26
Voilà! C'est pourquoi j'étais frileux à la création d'un module. Cependant, si justement ce module était dans le dossier même de mon thème, je n'y verrais aucun problème. :)
Concernant la ligne de code pour la valeur 'comment_comments', j'étais vraiment dans le champ gauche. Il faut savoir que j'ai écrit cette dernière ligne tard de soir sous l'effet de caféine en la copiant intégralement d'un core Drupal sans chercher à la comprendre ou l'adapter. ;) Elle ressemble maintenant à ça...
... et est entièrement fonctionnelle.
J'ai cependant essayer de changer le code complet pour une structure switch mais sans succès. J'en suis encore à mes débuts en PHP... ça doit être la raison principale de mon échec.
Est-ce que la structure actuelle (foreach) risque d'alourdir le fonctionnement du site??
Tu n'as pas tord.
Permalien Soumis par Yoran le 16 Septembre, 2009 - 09:21
Tu n'as pas tord. Philosophiquement cela pose en effet un problème. Au delà de la légèreté, un thème est censé opérer une séparation entre fonctionnalités (couche métier) et présentation. Les modules sont du domaine du métier, pas de la présentation. Donc je comprend assez bien ce qui te gène car tes modifications de liens sont de l'ordre de la présentation, pas du fonctionnel.
En réalité il manque une fonction à Drupal depuis un certain temps déjà, c'est la possibilité d'avoir un dossier de modules dans le thème lui-même. En attendant que ça arrive un jour (mais j'ai un doute car peu de gens ont cette approche ultra rigoureuse du développement, surtout web ;-) il faut faire comme on peut :)
Nouveau problème... :) Les
Permalien Soumis par Johnnytapette le 16 Septembre, 2009 - 21:47
Nouveau problème... :)
Les accents et caractères spéciaux. Comment on fait pour les écrire?
Voici un exemple
Ne fonctionne pas. En fait, si je met un accent ou un caractère spécial directement dans mon code, rien ne s'affiche.
J'ai donc tenter de corriger la situation en remplacant 'é' par 'é' comme ceci...
... et maintenant ça fonctionne. é est une correspondance UTF8 -> ISO-8859-1. Alors LÀ je me pose une question... qu'est-ce que du ISO-8859-1 vient faire dans Drupal. Il me semblait qu'il utilisait seulement du UTF8. ???
Bref, il y aurais moyen de pouvoir écrire mon texte directement sans avoir à trouver les correspondances pour tous les caractères 'spéciaux'?
EDIT: Étrangement... maintenant ça fonctionne sans l'ajout des correspondances. Allez savoir pourquoi.. je sais pas. Je viens d'ouvrir mon module personnalisé et tous mes caractères de correspondance étaient redevenu 'par eu-même' (oh comme ils sont sympas!) sous leur forme d'affichage. Donc, Réagir était devenu Réagir. Maintenant je peux taper n'importe quelle valeur sans avoir à me soucier d'inscrire un caractère de correspondance. Est-ce l'œuvre du Farfadet Drupal?
Là le blâmerais plutôt
Permalien Soumis par Yoran le 16 Septembre, 2009 - 23:53
Là le blâmerais plutôt votre environnement de développement qui doit encoder les sources en ISO. Drupal n'a pas grand chose à voir avec cela. Personnellement je saisi les accents sans problème.
En effet, ça semble être
Permalien Soumis par Johnnytapette le 17 Septembre, 2009 - 02:37
En effet, ça semble être le problème. J'emploi WAMP (versions 2.2.11/5.3.0/5.1.36) et mes variables MySQL me donnent ceci:
character set client utf8
(Valeur globale) latin1
character set connection utf8
(Valeur globale) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Valeur globale) latin1
character set server latin1
character set system utf8
character sets dir c:\wamp\bin\mysql\mysql5.1.36\share\charsets\
collation connection utf8_general_ci
(Valeur globale) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci
T'aurais une idée comment arranger ce problème?
Si je ne m'abuse ce n'est
Permalien Soumis par Yoran le 17 Septembre, 2009 - 08:04
Si je ne m'abuse ce n'est pas mysql le problème mais ton code source. Donc ce serait plutôt à creuser du côté de ton éditeur.
Comme dit Yoran ça vient de
Permalien Soumis par nyl auster le 19 Septembre, 2009 - 17:06
Comme dit Yoran ça vient de l'éditeur : l'encodage de celui-ci doit être en utf-8 (sans bom.)
Pour le tour de passe de passe avec le module de traduction je comprends ta réticence mais en fait ça dépend de ton objectif : si c'est juste pour ton besoin perso tu fais comme cela t'arranges le mieux.
Si tu penses le contribuer dans les bonnes pratiques de contribution Drupal, tu dois faire en sorte que ta chaine soit
1) traduisible en passant par la fonction t()
2) en anglais puisque c'est le langage par défaut de Drupal
Dans cette optique mieux vaut laisser t('read more') - le code existant à la base avant ton hook -, afin que les gens le traduisent comme ils le veulent.
Hello j'ai un peu réfléchi
Permalien Soumis par nyl auster le 19 Septembre, 2009 - 19:23
Hello
j'ai un peu réfléchi tout à l'heure pour comprendre ce fameux preprocess est en fait tu peux faire ça avec template php en deux temps si tu es toujours intéressé
1) écrire ceci dans le template.php
2) dans ton node.tpl.php il faut que tu vires la variables
et que tu mettres
à la place.
Merci de votre aide si
Permalien Soumis par Johnnytapette le 16 Novembre, 2009 - 18:44
Merci de votre aide si précieuse.
J'ai réussi grâce à la technique de Yoran.
Je demeure cependant déçu de l'obligation de créé un module personnalisé pour effectuer des modifications qui (à mon avis) devraient être entièrement pris en charge par le template. Cependant, le fait que l'utilisateur a la chance de mettre module personnalisé et template dans un seul dossier commun m'aide à passer par dessus ce problème « philosophique »
Je conseille grandement les futurs utilisateurs ayant le même problème à se référer à l'excellent site web et tout dernier livre de Yoran.
Le problème est donc résolu.
"Je demeure cependant déçu
Permalien Soumis par nyl auster le 16 Novembre, 2009 - 19:15
"Je demeure cependant déçu de l'obligation de créé un module personnalisé pour effectuer des modifications qui (à mon avis) devraient être entièrement pris en charge par le template"
il reste la possibilité que j'ai indiqué pour éviter cet éceuil ;-)
Oui,en effet. D'ailleur,
Permalien Soumis par Johnnytapette le 16 Novembre, 2009 - 19:24
Oui,en effet.
D'ailleur, j'essai actuellement de simplement modifier les titres des liens comment_delete comment_edit et comment_reply mais rien à faire, ils ne veulent pas changer. :(
Pourquoi la technique de Yoran ainsi que la tienne fonctionnent parfaitement pour les liens comment_add comment_comments et comment_new_comment mais pas pour comment_delete comment_edit et comment_reply ??
comment_add comment_comments et comment_new_comment sont reliés aux nodes alors que comment_delete comment_edit et comment_reply sont reliés aux commentaires mais je ne vois pas alors comment je pourrais bien faire pour les modifier... ?
Des suggestions?