- Accueil
- Info légales
- Aide (FAQ)
- Les tags de ce site
- Bloc note
- Articles techniques
- Notes system
- Divers articles
- Drupal
- Notes ITIL 2007
- Notes MS
- Dans le quartier...
- Emploi
- Recettes de cuisine et adresses gourmandes
- mes applis ubuntu préferées
- Divers acronymes du monde social
- Internet 2018
- P2 meublé à louer - quartier du Poteau 75018
- apcos - réseaux sociaux et outils
- Articles techniques
- Divers liens
- Fun
- Mon CV IT
- Nouveautés
Module summary
Source: http://php.developpez.com/tutoriels/drupal/atelier-drupal7/?page=creatio...
Ce module aura une page à l'URL /summary, qui affichera la liste des modules activés, les vocabulaires de taxonomy, et les types de contenus. Une page de configuration du module permettra de sélectionner les sections à afficher et de modifier les titres de celles-ci.
Création du module summary
La base: Le module est nommé summary, en PJ le .info et summary.module. Le hook_help crée une page d'aide. Puis implémentation de hook_menu() pour créer une page associée à une URL. A ce stade, on peux activer le module, mais il n'affiche pas grand chose.
les fonctions utilisées: module_list()
Faire par ex dans un bloc "execute php": dpr(module_list());
ou dpr(module_list());
(cf fonctions de débugage du module devel)
implode Rassemble les éléments d'un tableau en une chaîne. Syntaxe: string implode ( string
où glue par défaut, une chaine vide ; $glue
, array $pieces
)
le tableau de chaine à rassembler.pieces
module_list() | retourne donc un tableau (Array) contenant la liste des modules activés. |
Ex avec implode() |
<?php |
taxonomy_get_vocabularies retourne donc un tableau d'objets (stdClass). Chacun de ces objets décrit un vocabulaire. Le nom du vocabulaire est dans la propriété name des objets. Il faut donc parcourir chaque élément du tableau et récupérer le nom du vocabulaire (à ajouter dans la fonction summary_content) :
$
summary_vocabularies
=
taxonomy_get_vocabularies();
$
summary_vocabularies_list
=
'
'
;
foreach ($
summary_vocabularies
as $
vocab
){
$
summary_vocabularies_list
.
=
$vocab
->name
.
'
,
'
;
}
$
summary_vocabularies_list
=
t('
<h3>Vocabularies</h3>
'
) .
$
summary_vocabularies_list
;
$
output
.
=
$
summary_vocabularies_list
;
Tester dpm(node_type_get_types());
//
List
of
node
types.
$
summary_node_types
=
node_type_get_types();
$
summary_node_types_list
=
array();
foreach ($
summary_node_types
as $
node_type
) {
$
summary_node_types_list
[
]
=
$node_type
->name
;
}
$
summary_node_types_list
=
t('
<h3>Node
types</h3>
'
) .
implode($
summary_node_types_list
,
'
,
'
);
$
output
.
=
$
summary_node_types_list
;
En PJ, le module summary0 : renommer en .zip -> la page /summary0 affiche les modules, vocabulaire et types de contenu.
La page de configuration du module, function summary_menu
La page de configuration du module summary sera accessible à partir de l'URL admin/config/system/summary. Il faut donc ajouter un élément au tableau de la hook_menu.
L'URL de la page (admin/config/system/summary) permet d'ajouter un lien dans la page de configuration (config) à la section système (system). Le lien Menu item du bloc Devel permet de connaître les informations des différentes pages.
Cette page de configuration sera en fait un formulaire HTML. Pour composer un formulaire, Drupal propose une API bien particulière qui sera décrite plus tard.
'page_callback' | Ici, on appelle une fonction Drupal (drupal_get_form) qui construira le formulaire. |
'page arguments' | Liste des arguments à passer à la fonction callback. |
'access argument' | Vérifie que l'utilisateur a les droits d'administration du site avant d'afficher la page. |
'type' | Nom de la fonction qui sera appelée pour retourner le contenu. |
Le but est de créer un formulaire, Drupal propose pour cela la fonction drupal_get_form. Cette fonction prend en argument le nom d'une autre fonction qui décrit les éléments qui composeront le formulaire.
La fonction qui décrira le formulaire s'appellera summary_admin_settings, donc hook_menu appellera drupal_get_form(summary_admin_settings) lorsque la page devra s'afficher.
Création du formulaire : function summary_admin_settings()
La page d'administration proposera une case à cocher pour chaque section de summary permettant à l'administrateur de choisir si la section doit s'afficher ou non.
/**
*
Define
the
admin
form.
*/
function summary_admin_settings(){
$
form
[
'
summary_display
'
]
=
array(
'
#type
'
=
>
'
checkboxes
'
,
'
#title
'
=
>
t('
Sections
of
the
summary
'
),
'
#description
'
=
>
t('
Check
the
sections
to
show
in
the
summary
page
'
),
'
#options
'
=
>
array('
module
'
=
>
t('
Module
list
'
),
'
vocabulary
'
=
>
t('
Vocabulary
list
'
),
'
content_type
'
=
>
t('
Content
types
'
)),
);
return $
form
;
}
Un tableau $form est donc créé, chaque élément de ce tableau est un élément du formulaire et peut se paramétrer grâce à des propriétés. Voici la liste des propriétés utilisées :
'#type' | Type de widget à utiliser. Ici des cases à cocher. |
'#title' | Titre à afficher au-dessus du widget. |
'#description' | Texte d'aide en dessous du widget. |
'#options' | Propriété propre aux cases à cocher, tableau listant les cases à cocher à afficher et leurs étiquettes. |
Une description de tous les éléments pouvant être insérés dans un formulaire est disponible à la page : http://api.drupal.org/api/drupal/developer-topics--forms_api_reference.html.
Le lien Hook_elements() du bloc Devel affiche la liste des éléments disponibles.
Il manque le bouton de sauvegarde à votre formulaire. Il serait possible d'en créer un en ajoutant un nouvel élément de #type submit au tableau $form, mais il est préférable d'utiliser la fonction system_settings_form qui ajoute les boutons nécessaires par défaut des formulaires de configuration. Remplacer dans summary_admin_settings() le return $form;
par return system_settings_form($form);
variable_get : sauvegarder des données dans la table variable
Modifier le code tq:
function summary_admin_settings(){
$
form
[
'
summary_display
'
]
=
array(
'
#type
'
=
>
'
checkboxes
'
,
'
#title
'
=
>
t('
Things
to
show
for
the
summary
'
),
'
#description
'
=
>
t('
Check
the
things
to
show
in
the
summary
page
'
),
'
#options
'
=
>
array('
module
'
=
>
t('
Module
list
'
),
'
vocabulary
'
=
>
t('
Vocabulary
list
'
),
'
content_type
'
=
>
t('
Content
types
'
)),
'
#default_value
'
=
>
variable_get('
summary_display
'
,
array('
module
'
,
'
vocabulary
'
)),
);
return system_settings_form($
form
);
}
La fonction variable_get permet de récupérer des variables enregistrées dans le tableau de variables globales $conf, lui-même stocké dans la table variables de la base de données de Drupal. Elle prend deux paramètres, le premier, obligatoire, est le nom de la variable à récupérer, le second, optionnel, est la valeur que retourne variable_get si aucune variable n'est trouvée dans $conf.
Ici, on initialise donc le formulaire avec des valeurs par défaut qui seront, soit prises dans le tableau $conf si elles sont présentes, soit prises dans le second paramètre qui indique que les cases module et vocabulary sont cochées par défaut.
Pour afficher ce que contient $conf, vous pouvez exécuter le code suivant dans le bloc Execute PHP du module Devel :
global $
conf
;
dpm($
conf
);
Dernière question ; comment sont sauvegardées ces valeurs ? Eh bien c'est la fonction system_settings_form qui s'occupe de tout !
Pour que la fonction system_settings_form sauvegarde automatiquement les paramètres, il faut veiller à ce que le nom de l'élément de formulaire - $form['summary_display'] - soit identique à celui du premier paramètre de variable_get - variable_get('summary_display').
Perso les titres: ajout d'éléments textfield et fieldset
requetes sql
theming du contenu
Utiliser code_review.
Utiliser le module
Aller à la page d'administration du module: admin/config/system/summary