...du verbe Drupaler (1er groupe)

Ajouter un pseudo champs sur l'affichage d'une entité (hook extra fields)

3. Septembre 2012 - 19:45 -- Thomas
5
Average: 5 (3 votes)
Votre vote: Aucun(e)

Ce générateur de code va vous permettre d'ajouter un "pseudo champs" à une entité afin d'y ajouter du contenu que vous désirez afficher et qui ne sera pas forcément une information enregistrée en base de données.

Cela permet donc de définir l'affichage de nouveaux éléments à afficher sans créer un template dédié, en y insérant un bloc, une vue, ou autre (pouvant dépendre des autres champs). Via l'interface de gestion de l'affichage de l'entité, vous pouvez définir en cliquez-glissez où vous souhaitez l'afficher par rapport aux autres champs disponibles, et si vous souhaitez le masquer sur certains types d'affichage.

Le hook_extra_fields déclare un ou plusieurs éléments, et le entity_view (ou node_view, comment_view etc.) renseigne la variable.

Exemple concret : le code ci-dessous met le lien de Flag dans un champ draggable afin de pouvoir disposer de plus de liberté pour son placement (en utilisant la fonction flag_create_link du module Flag). Collez-le dans un module "flag_extras.module".
 

	<?php

	/**
	* Implements hook_field_extra_fields().
	*
	*/
	function flag_extras_field_extra_fields(){
	$extra['node']['projet']['display']['suivre'] = array(
	  'label' => t('Suivre'),
	  'description' =>  t('Lien de suivi'),
	  'weight' => 0,
	);
	return $extra;
	}

	

	/**
	* Implements hook_node_view().
	*
	*/
	function flag_extras_node_view($entity, $view_mode , $langcode){
	  if($entity->type == 'page') {
	    $entity->content['suivre']= array(
	        '#markup' =>   flag_create_link('suivre', $entity->nid),
	    );
	  }
	}

	?>
Le code ci-dessus ne teste pas la visibilité choisie, mais ne sera pas affiché si marqué en masqué, mais lance la création du flag tout de même. Cf. le générateur de code pour plus d'infos sur le sujet : en fonction de la lourdeur de l'opération et de vos configuration, vous pouvez choisir de jouer ou non le code en fonction de la visibilité (champ affiché ou masqué dans la gestion des champs).

@todo : ajouter la partie formulaire
Nom de votre module
Le type de l'entité (node, product, order...)
Type de la sous entité (Bundle)
Nom machine du pseudo champs ajouté
Titre du pseudo champs ajouté
Description du pseudo champs ajouté
Valeur attribué au pseudo champs ajouté
Nom de la fonction ou du hook: 
hook_extra_fields

Ajouter un commentaire

Texte simple

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Image CAPTCHA