Submitted by Imoreion on
Salut. ^^
Pour résoudre un problème sur un autre on m'a suggéré de mettre en place la fonction hook_link_alter, seulement je ne vois pas comment le mettre en place.
Je n'ai rien trouvé dans la doc et sur le forum, mis à part qu'il faut créer un module je crois...
Pourriez-vous me détailler la marche à suivre svp ? :p
Promis j'ajouterai la solution dans la doc. :p
Merci. ^^
Déjà il faut que tu crées
Permalien Soumis par Yoran le 21 Juillet, 2009 - 09:34
Déjà il faut que tu crées un module (http://arnumeral.fr/node/14) dans lequel tu inséreras ton implémentation de hook_link_alter. Par exemple pour ajouter une classe à un lien spécifique (ici le lien d'ajout d'un commentaire) :
Si tu ne sais pas trop quel lien modifier ou la structure du lien, tu peux remplacer le corps de la fonction par un
var_dump($links)
. Cela videra le contenu de $links à l'écran et tu pourrais ainsi expérimenter.Génial merci ! Super tuto
Permalien Soumis par Imoreion le 21 Juillet, 2009 - 13:30
Génial merci !
Super tuto en passant. ;)
Alors je voulais remplacer le "User's blog" de ma page de blog par le nom de mon site.
Voici le script adapté :
A quel endroit place tu ta
Permalien Soumis par lienty le 4 Septembre, 2009 - 20:06
A quel endroit place tu ta fonction?
Ce que j'ai besoin de faire :
Sur une node je souhaite remplace la phase ajouter un commentaire par une image.
Merci d'avance
Comme indiqué dans le site
Permalien Soumis par lienty le 4 Septembre, 2009 - 23:02
Comme indiqué dans le site (http://arnumeral.fr/node/14)
j ai créé un module contenu
Dans mon fichier module contenu j ai inséré le code (je suis sous drupal5)
<?php
function mon_module_link_alter(&$links, $node) {
foreach ($links as $name => $link) {
if ($name=="comment_add") {
$links[$name]['attributes']['class'] .= " ma_classe";
}
}
}
?>
mais rien ne se produit
Alors qu avec le code
<?php
function tutoriel_modules_link($type, $object, $teaser = FALSE) {
// Seulement si l'utilisateur a les droits d'administration
if (!user_access("administer site configuration")) {
return;
}
$links = array ();
// Si l'objet est un node
if ($type == 'node') {
// On ajoute un nouveau lien
$links['editer-node'] = array (
'title' => t('Edit'),
'href' => "node/".$object->nid."/edit",
);
}
// On renvoie les liens au module "node"
return $links;
}
j ai bien l ajout du lien
j ai pas compris le truc
Link_alter et Link sont deux
Permalien Soumis par Yoran le 6 Septembre, 2009 - 14:34
Link_alter et Link sont deux choses. Dans le premier cas tu modifies un lien créé par un autre module, dans le second tu ajoutes un nouveaux liens à ceux générés par les autres modules.
Ensuite il y a une erreur dans ton premier exemple avec link_alter, il y a eu entre la version 5 et la version 6 de Drupal, une inversion de paramètres (http://api.drupal.org/api/function/hook_link_alter). Là tu utilises la syntaxe de la version 6, cela explique sans doute que cela ne fonctionne pas.
ET oui cela marche j'arrive
Permalien Soumis par lienty le 7 Septembre, 2009 - 11:28
ET oui cela marche j'arrive maintenant a modifier le lien
Il m'a suffit comme tu me l'a fait remarqué de placer le code comme suivant pour Drupal5
<?php function offre_link_alter(&$node, &$links,$html = TRUE) {
var_dump($links);
foreach ($links as $name => $link) {
var_dump($links);
if ($name=="comment_add") {
$links[$name]['title']= "<img src=toto.gif >";
}
}
}
?>
par contre le html du remplacment n'est pas pris en compte.
Avez vous une ruse de sioux pour que le html soit pris en compte?
MErci beaucoup
J'ai trouvé la solution sur
Permalien Soumis par lienty le 7 Septembre, 2009 - 11:58
J'ai trouvé la solution sur ce lien : http://www.kinetasystems.com/blog/theming-the-links-variable-in-drupal-n...
Merci pour votre aide
Bon j ai un nouveau probleme
Permalien Soumis par lienty le 24 Septembre, 2009 - 12:14
Bon j ai un nouveau probleme surement simple mais c est la premiere fois que je le rencontre.
j'ai créé mon alter link qui fonctionne tres bien
var_dump($links);
if ($name=="comment_add" ) {
$title = t('Postuler à cette annonce'); // change the title to suit
$path = path_to_theme() . '/2009/fr/bt_postulerannonce.gif'; // make an image path
// now update the links array
// set the title to some html of the image and choice of link text
$links[$name]['title'] = theme('image', $path, $title, $title) . ''.$base_path.'';
$links[$name]['href'] = $links[$name]['href'].'#post';
// let's set some attributes on the link
$links[$name]['attributes'] = array(
'title' => $title,
//'class' => 'forward-page',
//'rel' => 'nofollow',
'name'=>'post',
);
// this must be set, so that l() interprets the image tag correctly
$links[$name]['html'] = TRUE;
je change le texte par une image et je souhaite modifier le lien en ajoutant une ancre.
j'ajoute donc mon code
$links[$name]['href'] = $links[$name]['href'].'#post';
malheureusement lorsque je génére la page le # est remplacé par %23.
je suis bien encodé en utf8 et je suis sous drupal5
si vous avez déjà rencontré ce probleme je prend.
MErci
C'est tout à fait normal,
Permalien Soumis par Yoran le 24 Septembre, 2009 - 15:07
C'est tout à fait normal, il essaye de renseigner (de tête j'ai pas mon code sous la main) le champ fragment
Je ne suis pas certain qu'il soit nécessaire de spécifier le #
tout a fait le # n'est pas a
Permalien Soumis par lienty le 24 Septembre, 2009 - 16:12
tout a fait le # n'est pas a mettre
Un grand merci
<?php
$links[$name]['fragment']='post'
?>
Un grand merci pour tout vos
Permalien Soumis par Cedriclap le 28 Mai, 2010 - 09:27
Un grand merci pour tout vos commentaires.
Ca vient de me sauver la vie à quelques heures de mes vacances, j'ai cru ne jamais pouvoir partir !
parfum ck be pas cher
Je suis en train de migrer
Permalien Soumis par lienty le 18 Janvier, 2011 - 20:16
Je suis en train de migrer sous D6
il y a une différence entre D5 et D6
la synthax n'a pas besoin d'etre
$links[$name]['title'] = theme('image', $path, $title, $title) . ..';
mais $links[$name]['title'] = '<img...>';