- 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 avec requetes SQL
En PJ, le module summary0 (à renommer en zip et dézipper) a 3 fichiers.
Le fichier summary0.module.depart n'a pas encore de SQL.
summary0.module affiche un tableau HTML (avec des balises h3, donc thème à créer) avec le nombre de nodes par type de contenu (publié).
La page de résumé est à /summary0 ; la page de configuration à admin/config/system/summary0
requetes sql 1 : afficher le nb de nodes publiés
Modifiez la fin de la fonction summary_content() ainsi :
//
Number
of
nodes.
$
query
=
'
SELECT
count(*)
FROM
{node}
WHERE
status
=
1
'
;
$
summary_node_count
=
db_query($
query
)-
>
fetchField();
$
summary_node_count
=
t('
<h3>Number
of
nodes</h3>
'
) .
$
summary_node_count
;
$
display
=
variable_get('
summary_display
'
,
array());
$
output
=
'
'
;
if ($
display
[
'
module
'
]
)
$
output
.
=
$
summary_module_list
;
if ($
display
[
'
vocabulary
'
]
)
$
output
.
=
$
summary_vocabularies_list
;
if (array_key_exists('
content_type
'
,
$
display
) &
&
$
display
[
'
content_type
'
]
)
$
output
.
=
$
summary_node_types_list
;
$
output
.
=
$
summary_node_count
;
return $
output
;
La fonction : db_query prend en paramètre la requête SQL et retourne un objet. Une méthode de cet objet est fetchField qui retourne le résultat de la requête.
Il y a des {} autour de node (voir SELECT) car drupal peux utiliser des préfixes de tables (ex: cv_ ).
requetes sql 2 : afficher le nb de nodes publiés par type (sur x lignes)
SELECT
type
, count
(*
) AS
"
Nombre
nodes
"
FROM
node
GROUP
BY
type
Dans le module summary, la requête devient donc : //
Number
of
nodes
per
type
$
query
=
'
SELECT
type,
count(*)
FROM
{node}
GROUP
BY
type
'
;
rowCount | nb lignes retournées par requete |
fecthAssoc | Retourne une ligne du résultat de la requête sous forme de tableau (nom colonne - valeur). Au prochain appel de la fonction, la ligne suivante est retournée |
fetchAllKeyed | Retourne l'ensemble des résultats sous forme de tableau. La clé des éléments est la première colonne de la requête |
fetchAllAssoc | Retourne l'ensemble des résultats sous forme de tableau. La colonne devant servir de clé est passée en paramètre. |
getQueryString | Retourne la requête SQL de l'objet |
fetchCol | Retourne tous les éléments d'une colonne. Le numéro de la colonne est passé en paramètre. |
fetchField | Retourne la première colonne de la première ligne. |
Il y a donc plusieurs solutions possibles pour arriver au même résultat.
Requête avec variables
Par exemple une requête qui sélectionne le titre des nodes publiées de type article : $
query
=
'
SELECT
title
FROM
{node}
WHERE
type="article"
AND
status=1
'
;
$
result
=
db_query($
query
);
Imaginez maintenant que vous avez deux variables $type et $status contenant respectivement le type et le statut des nodes à afficher, la requête devient alors :
$
query
=
'
SELECT
title
FROM
{node}
WHERE
type
=
:type
AND
status
=
:status
'
;
$
result
=
db_query($
query
,
array( '
:type
'
=
>
$
type
,
'
:status
'
=
>
$
status
));
Il faut donc utiliser des "jokers" (:type, :status), leurs valeurs sont ensuite remplacées lors de l'exécution de la fonction db_query. Celle-ci prend un tableau en deuxième argument qui contient la liste des valeurs et des jokers.
Requête avec le constructeur de requêtes db_select
La requête précédente est une requête simple, mais le système des jokers peut vite devenir confus si votre requête comporte un grand nombre de paramètres. Drupal propose alors tout un système de construction de requêtes via PHP.
Voici par exemple ce que deviendrait la requête précédente :
$
query
=
db_select(node,
n);
$
query
-
>
fields('
n
'
,
array('
title
'
))
-
>
condition('
type
'
,
$
type
)
-
>
condition('
status
'
,
$
status
);
$
result
=
$query
->execute
();
L'idée est donc de commencer par créer un objet de type SelectQuery en appelant la fonction db_select et ensuite de le modifier en lui ajoutant des directives SQL. Lorsque celle-ci est construite, il faut lancer la méthode execute() pour récupérer le résultat de la requête.
La fonction db_select prend en premier argument le nom de la table à utiliser (node) et en deuxième argument un alias (n). C'est cet alias qui sera utilisé dans les autres directives SQL (fields('n', array('title')).
Cette méthode permet de construire une requête tout au long d'un script PHP sans avoir à manipuler de longues chaînes de caractères pour former une requête SQL valide.
- SelectQuery possède quelques dizaines de méthodes correspondant à des directives SQL. Vous pouvez retrouver la liste de ces méthodes sur la page SelectQuery
- Vous pouvez utiliser les méthodes DeleteQuery, InsertQuery et UpdateQuery pour des requêtes SQL delete, insert et update.
Doc tek:
Fichier attaché | Taille |
---|---|
summary0sql.zip_.txt | 3.31 Ko |