Lien du site web de l'auteur d'un commentaire

Catégories:

Bonsoir,

Après avoir testé le merveilleux Drupal, je tente d’optimiser quelques fonctions ;
Mais n’étant pas un pro, je fini par bloquer sur des petits détails, dont celui-ci :

J’aimerais que «le nom de l’auteur» dans un commentaire (module comment de base) soit «cliquable» pour aller sur le site de celui qui à posté le message.

Pour l’instant cette fonction ne marche que pour les inconnus et pas pour les membres ayant un compte sur mon site…

D’autant qu’il n’y pas de possibilité de rentrer l’adresse du site, ni dans la création du compte, ni dans le formulaire pour poster un message (pour un inconnu le champ existe)

Si quelqu’un pouvais me m’aider, ça serait supers sympas ;
En attendant bonne soirée à tous.

Raoul

#

Bon, ça va faire un peu recette de cuisine mais je suis sur que tu vas recoller les bouts :)

1/ Tu actives le module «profile» qui permet d’ajouter (un peu comme CCK) des nouveaux champs aux profiles de tes utilisateurs authentifiés.

2/ Tu vas dans «gestion des utilisateurs»/»profiles», et tu ajoutes un champs de type URL. Tu lui donnes une catégorie «coordonnées», un titre «Site Oueb», et un nom «profile_homepage» (tu n’as que la fin à taper, profile_ est fixé). Tu valides.

3/ Tu vas dans la liste des utilisateurs, tu en modifies un au hasard (genre celui qui a posté un commentaire ;-) et tu vas dans «modifier». Tu as ici un nouvel onglet «coordonnées» et dedans ton champs «site oueb», tu peux saisir une URL et valider.

4/ Tu vas dans includes/theme.inc, tu chopes la fonction theme_username et tu la colles dans le template.php de ton thème. C’est cette fonction qui fabrique le lien.

5/ Tu renommes la fonction avec le nom de ton thème (ex. mon_theme_username) pour que ta fonction soit prise en priorité (plus d’info ici : http://arnumeral.fr/node/102 )

6/ Dans la fonction, y’a un if ($object->uid.... Le premier cas est celui des authentifiés, le second celui des anonymes. Tu ajoutes dans la partie «authentifié» le code qui récupérer l’identifiant de l’utilisateur (UID) qui est dans l’objet et tu l’utilises pour charger l’objet utilisateur (user_load). Le module profile va automatiquement y coller la valeur champ field_homepage pour cet utilisateur. Cela donne le code suivant :

  if ($object->uid && $object->name) {
     // récupération de l'objet utilisateur
      $user=user_load($object->uid);
     
    // Shorten the name when it is too long or it will break many tables.
    if (drupal_strlen($object->name) > 20) {
      $name = drupal_substr($object->name, 0, 15) .'...';
    }
    else {
      $name = $object->name;
    }

    if (user_access('access user profiles')) {
       
       // renvoie le lien avec le champ  profile_homepage
      $output = l($name, $user->profile_homepage, array('attributes' => array('title' => t('View user profile.'))));
     
    }
    else {
      $output = check_plain($name);
    }

Voilà, j’imagine qu’on va te dire qu’il y a un module top of the pop qui fait cela direct.. chacun son approche :)

Yoran - arNuméral

#

Merci Yoran pour ta réponse rapide et très bien expliquée, tant sur le codage que sur le module existant…

Je vais étudier ça ce soir du coté du codage et au plus tard dans deux jours, je reviendrais poster un message pour dire ou j’en suis ;
Encore merci pour cette gentille attention et bonne fin de soirée…
Raoul

#

Vous êtes le bienvenu :)

Yoran - arNuméral

#

Tiens, ce titre m’intéressait vu mon thread sur le pseudo en lieu et place de «Anonyme», et en effet ça risque de m’être utile. Merci beaucoup ! :-)

#

Ben c’est exactement la manip que je comptais t’expliquer lorsque je t’ai écrit «En revanche pour virer le «non vérifié», c’est un peu plus chaud, si tu as besoin, je t’expliquerais.»

En fait tu récupères exactement la même procédure, mais tu vires juste le «non vérifié» qui traîne à la fin (j’ai jamais bien compris l’intérêt de ce truc…)

Yoran - arNuméral

#

Ah, j’ignorais qu’il fallait bidouiller. :-) Cela dit (même si je n’irais pas jusqu’à en mettre ma main au feu) j’ai cru apercevoir, cet après-midi, une option permettant de gérer l’affichage de ce flag.

Je termine une traduction (eh oui, je me mets déjà au boulot !), et je vérifie ça. :-)

/edit/ Bizarrement je ne la retrouve plus. Je me demande s’il ne s’agissait pas d’une option propre à un thème que j’ai essayé. :-/ Bref, si je remets la main dessus je viendrai le signaler. ;-)

#

Oui il doit y avoir ce type d’option dans le thème acquia.

Ah, j’ignorais qu’il fallait bidouiller. :-)
Attends, pourquoi crois tu qu’on s’amuse tant avec ce CMS :) C’est un vrai légo ce truc, il n’y a rien qui ne puisse pas être démonté puis remonté comme ça te chante.

Yoran - arNuméral

#

Non, j’entendais par-là que j’ignorais que pour cette fonctionnalité-là il le fallait. Puisque je pensais l’avoir aperçue au détour d’une checkbox. :-)

#

Bonjour Yoran et aussi aux internautes de passages…

Désolé pour mon retour tardif à répondre ;
Du fait que j’ai changé d’hébergeur (Netim pour Amen) et le temps de tout remettre en place, les jours sont passés à une vitesse folle.

Cela dit, j’ai suivi ta procédure pas à pas, sachant que jusqu’a la «3/» c’est impeccable ;
Ensuite, bien que d’avoir changé les lignes de codes, je n’ai pas de plantage, mais le lien cliquable «homepage» du nom de l’utilisateur inscrit ne rentre pas en vigueur (en fonctionnement).

Il est fort probable que je dois passer à coté de quelque chose qui m’échappe, malgré l’explication très claire que tu m’as généreusement fournie ici.

Je me permet de poser dans 2 messages suivant, les parties du code, du thème GARLAND original (sans modif) ;
Et si tu as encore de la patience à faire un copié coller instructif, je pourrais comparer et comprendre ce que j’ai sûrement mal fait en suivant la procédure.

Merci d’avance et bonne soirée…

#

( fonction originale prise dans theme.inc ) Je la supprime dans theme.inc pour la coller dans template.php de mon thème «GARLAND»

/**
* Format a username.
*
* @param $object
* The user object to format, usually returned from user_load().
* @return
* A string containing an HTML link to the user’s page if the passed object
* suggests that this is a site user. Otherwise, only the username is returned.
*/
function theme_username($object) {

if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .’…’ ;
}
else {
$name = $object->name ;
}

if (user_access('access user profiles')) {
$output = l($name, 'user/'. $object->uid, array('attributes' => array('title' => t('View user profile.'))));
}
else {
$output = check_plain($name);
}

}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if ( !empty($object->homepage)) {
$output = l($object->name, $object->homepage, array(‘attributes’ => array(‘rel’ => ‘nofollow’))) ;
}
else {
$output = check_plain($object->name) ;
}

$output .= ' ('. t('not verified') .')';

}
else {
$output = check_plain(variable_get(‘anonymous’, t(‘Anonymous’))) ;
}

return $output ;
}

#

( Voici Le code original de template.php de : name = Garland )

< ?php
// $Id : template.php,v 1.16.2.2 2009/08/10 11:32:54 goba Exp $

/**
* Sets the body-tag class attribute.
*
* Adds ‘sidebar-left’, ‘sidebar-right’ or ‘sidebars’ classes as needed.
*/
function phptemplate_body_class($left, $right) {
if ($left != ” && $right != ”) {
$class = ‘sidebars’ ;
}
else {
if ($left != ”) {
$class = ‘sidebar-left’ ;
}
if ($right != ”) {
$class = ‘sidebar-right’ ;
}
}

if (isset($class)) {
print ’ class=»’. $class .’»’ ;
}
}

/**
* Return a themed breadcrumb trail.
*
* @param $breadcrumb
* An array containing the breadcrumb links.
* @return a string containing the breadcrumb output.
*/
function phptemplate_breadcrumb($breadcrumb) {
if ( !empty($breadcrumb)) {
return ‘

’. implode(’ › ‘, $breadcrumb) .’

’ ;
}
}

/**
* Override or insert PHPTemplate variables into the templates.
*/
function phptemplate_preprocess_page(&$vars) {
$vars[‘tabs2’] = menu_secondary_local_tasks() ;

// Hook into color.module
if (module_exists(‘color’)) {
_color_page_alter($vars) ;
}
}

/**
* Add a «Comments» heading above comments except on forum pages.
*/
function garland_preprocess_comment_wrapper(&$vars) {
if ($vars[‘content’] && $vars[‘node’]->type != ‘forum’) {
$vars[‘content’] = ‘

’. t(‘Comments’) .’

’. $vars[‘content’] ;
}
}

/**
* Returns the rendered local tasks. The default implementation renders
* them as tabs. Overridden to split the secondary tasks.
*
* @ingroup themeable
*/
function phptemplate_menu_local_tasks() {
return menu_primary_local_tasks() ;
}

function phptemplate_comment_submitted($comment) {
return t(‘ !datetime — !username’,
array(
‘ !username’ => theme(‘username’, $comment),
‘ !datetime’ => format_date($comment->timestamp)
)) ;
}

function phptemplate_node_submitted($node) {
return t(‘ !datetime — !username’,
array(
‘ !username’ => theme(‘username’, $node),
‘ !datetime’ => format_date($node->created),
)) ;
}

/**
* Generates IE CSS links for LTR and RTL languages.
*/
function phptemplate_get_ie_styles() {
global $language ;

$iecss = ” ;
if ($language->direction == LANGUAGE_RTL) {
$iecss .= ‘@import «’. base_path() . path_to_theme() .’/fix-ie-rtl.css»;’;
}

return $iecss ;
}

Syndiquer le contenu