Dans les paramètres, vous pouvez décider de rediriger vers une autre page. Très bien. Mais pas suffisant. Je m'explique.
Fonctionnement par défaut
Dans mon cas, on a mis le formulaire de recherche dans une sidebar. Et on voulait afficher les résultats dans la partie principale de notre site, et pas dans la sidebar.
On a donc créé une page "Résultats de recherche" dans laquelle on a créé un nouveau bloc de recherche.
Quand une recherche est effectuée depuis la page d'accueil, on arrive sur notre nouvelle page, les résultats s'affichent bien dessus ... mais également dans la sidebar.
Pas pratique. Il faut donc surcharger le bloc de recherche.
Surcharge du bloc de recherche
Créez les répertoires et les fichiers suivants dans le répertoire /blocks de votre site :
- search
- search/view.php
- search/templates
- search/templates/results_only.php
À quoi va nous servir cette surcharge ? À empêcher d'afficher les résultats sous le bloc et à n'afficher que les résultats sur la page de résultats sans le formulaire.
Le fichier view.php va empêcher d'afficher les résultats sous le bloc de notre sidebar. Voici son code :
<?php defined('C5_EXECUTE') or die("Access Denied."); ?>
<?php if (isset($error)) { ?>
<?php echo $error?><br/><br/>
<?php } ?>
<form action="<?php echo $this->url( $resultTargetURL )?>" method="get" class="ccm-search-block-form" style="padding: 5px;">
<?php if( strlen($title)>0){ ?><h3><?php echo $title?></h3><?php } ?>
<?php if(strlen($query)==0){ ?>
<input name="search_paths[]" type="hidden" value="<?php echo htmlentities($baseSearchPath, ENT_COMPAT, APP_CHARSET) ?>" />
<?php } else if (is_array($_REQUEST['search_paths'])) {
foreach($_REQUEST['search_paths'] as $search_path){ ?>
<input name="search_paths[]" type="hidden" value="<?php echo htmlentities($search_path, ENT_COMPAT, APP_CHARSET) ?>" />
<?php }
} ?>
<input name="query" type="text" value="<?php echo htmlentities($query, ENT_COMPAT, APP_CHARSET)?>" class="ccm-search-block-text" placeholder="Rechercher" />
<input name="submit" type="submit" value="<?php echo $buttonText?>" class="ccm-search-block-submit" />
</form>
Le fichier results_only.php s'occupera lui de n'afficher que les résultats sur la nouvelle page. Voici son code :
<?php defined('C5_EXECUTE') or die("Access Denied."); ?>
<?php if (isset($error)) { ?>
<?php echo $error?><br/><br/>
<?php } ?>
<?php
$tt = Loader::helper('text');
if ($do_search) {
if(count($results)==0){ ?>
<h4 style="margin-top:32px"><?php echo t('There were no results found. Please try another keyword or phrase.')?></h4>
<?php }else{ ?>
<div id="searchResults">
<?php foreach($results as $r) {
$currentPageBody = $this->controller->highlightedExtendedMarkup($r->getBodyContent(), $query);?>
<div class="searchResult">
<h3><b><a href="<?php echo $r->getPath()?>"><?php echo $r->getName()?></a></b></h3>
<p>
<?php if ($r->getDescription()) { ?>
<?php echo $this->controller->highlightedMarkup($tt->shortText($r->getDescription()),$query)?><br/>
<?php } ?>
<?php echo $currentPageBody; ?>
<a href="<?php echo $r->getPath(); ?>" class="pageLink"><?php echo $this->controller->highlightedMarkup($r->getPath(),$query)?></a>
</p>
</div>
<?php }//foreach search result ?>
</div>
<?php
if($paginator && strlen($paginator->getPages())>0){ ?>
<div class="ccm-pagination">
<span class="ccm-page-left"><?php echo $paginator->getPrevious()?></span>
<?php echo $paginator->getPages()?>
<span class="ccm-page-right"><?php echo $paginator->getNext()?></span>
</div>
<?php } ?>
<?php
} //results found
}
?>
En fait, c'est le fichier view.php original qui a été coupé en deux.
Ça n'est pas terminé.
Il faut maintenant, dans notre nouvelle page, modifier le modèle personnalisé du bloc de recherche (on a donc deux blocs de recherche hein ! Un dans la sidebar, un dans la nouvelle page, vous suivez ?). Un clic sur le bloc, Modèle personnalisé et sélectionnez Results only.
Et voila (-: