This is the documentation for concrete5 version 5.6 and earlier. View Current Documentation

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 (-:

Loading Conversation