- 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
Résultat de la recherche avec les modes d'affichage (view modes)
Voir aussi le module custom_search.
Source (avril 2012) : http://drupal.the-aim.be/drupal-theme-search-view-modes
Par défaut, chaque item s'affiche selon search-result.tpl.php
- Title (avec lien vers le contenu)
- $snippet le texte avec le mot cherché en gras
-
$info
information sur l'auteur, date et h, nb de commentaires
A admin/structure/types/manage/article/display vérifier qu'est coché "Search results" ou aller à admin/structure/types/manage/article/display/search_result
Cela ne fonctionne pas, tant que l'on ne surcharge pas (override) le .tpl. pour y ajouter les champs (du mode d'affichage que l'on vient de personnaliser).
Surcharger search-result.tpl.php
Copier du core search-result.tpl.php dans son dossier de thème, y coller le code suivant, puis vider le cache une ou deux fois.
Ex de code
<li class="<?php print $classes; ?>"<?php print $attributes; ?>>
search-snippet-info
<?php print render($title_prefix); ?>
<h3 class="title"<?php print $title_attributes; ?>>
<a href="<?php print $url; ?>"><?php print $title; ?></a>
</h3>
<?php print render($title_suffix); ?>
<div class="search-snippet-info">
<?php print($variables['result']['node']->rendered); ?>
</div>
<div class="search-view-mode">
<?php if ($snippet): ?>
<p class="search-snippet"<?php print $content_attributes; ?>><?php print $snippet; ?></p>
<?php endif; ?>
<?php if ($info): ?>
<p class="search-info"><?php print $info; ?></p>
<?php endif; ?>
</div>
</li>
Que fait ce code?
Les variables sont en gras, les classes CSS en rouge.
le code | notes |
---|---|
<h3 class="title"<?php print $title_attributes; ?>> |
$title Titre (et lien) en h3 |
<?php print render($title_suffix); ?> |
$title_suffix Tableau avec infos d'autres modules, ici:nb lecture + lien trad |
<div class="search-view-mode"> |
on récupère le mode d'affichage |
<div class="search-snippet-info"> |
$snippet = Texte avec le mot recherché en <strong> $info = Nom auteur (classe username ) mais aussi RDF, xml:lang="" - date - h |
<li class="<?php print $classes; ?>"<?php print $attributes; ?>> |
affiche ...
|
Les autres variables
$module: nom machine node, user...
$title_prefix: Tableau qui contient des infos en provenance d'autres modules
Des tableaux de valeurs HTML: $title_attributes_array $content_attributes_array $content_attributes_array
$info ou $info_split
$info_split est un tableau similaire à $info.
Ces variables ne s'appliquent pas à la recherche sur les users - donc toujours tester l'existence avant l'affichage.
Voici quelques clefs par défaut de $info_split (d'autres modules en ajoutent):
- $info_split['user'] dépend des perms
- $info_split['date'] dernière maj du node, en format court
- $info_split['comment'] nb de commentaires (module comment), qui sort en "% comments" où % est le cardinal)
Ex:
<?php print "test"; ?>
<?php if (isset($info_split['type'])): ?>
<span class="info-type">
<?php print $result['type']; ?>
</span>
<?php endif; ?>
Pour thémer selon le type de contenu
Il nous faut utiliser un hook de theme (de facon à suggérer des fichiers de tempates), ici pour le type de contenu news (si type news et view_mode search-result
). L'utilisation du hook peut se faire soit via son template, soit via un autre module.
Ajouter dans son template.php (s'il existe déja une fonction preprocess_node, ajouter le if):
function MYTHEME_preprocess_node(&$vars) {
if($vars['type'] == 'news' && $vars['view_mode'] == 'search-result') {
$vars['theme_hook_suggestions'][] = 'node__search_result';
$vars['theme_hook_suggestions'][] = 'node__' . $vars['type'] . '__search_result';
}
}
Ajouter à search-result.tpl.php
$view = node_view($result['node'], 'search-result');
print render($view);
// node_view ($node, $view_mode = 'full', $langcode = NULL)
Créer node--news--search-result.tpl.php avec <?php
print
(
$rendered
); ?>
Vider le cache.
Regarder le contenu de la variable $content permet de voir la disponibilité (ou non) des champs du mode d'affichage par défaut (où l'on a pu y cacher des champs).
Dans node--search-result.tpl.php (ou node--news--search-result.tpl.php)
<?php node_build_content($node, 'search_result'); ?>
<?php print render($node->
content); ?>