[4.2] Cacher une page statique (la recherche dans mon cas)

Bonjour,

Je voulais pouvoir cacher des pages statiques sans les désactiver, de façon à mettre le formulaire de recherche directement sur la page d'accueil et:

- sans modifier le core (facilite les mises a jour)
- que mon ajout soit facile a mettre à jour aussi si $plxShow->staticList() change
- sans utiliser ob_* et preg_* dans le theme, ca doit rester léger

Mission accomplie, voila par exemple sur un pluxml d'origine :
La page d'accueil
Le résultat de la recherche


Mode opératoire


Pour info, je prends ici un pluxml avec le theme par défaut, et on va réutiliser le code de recherche de Stéphane.

J'assume que vous avez déjà une page statique à cacher, allez dans le panneau d'administration et

- récupérer l'identifiant de cette page sans les 0
- récupérer le contenu du champ url

Dans mon cas, l'identifiant est 1 et le champ url contient statique-1.


Mise en place d'un pseudo plugin


1. Créer un dossier nommé plugins à la racine de pluxml
2. y mettre ce code source, en modifiant le '1' dans :
var $hidden = array(1);
par l'identifiant de votre page à cacher :
<?php
/*
 * Classe permettant de cacher des pages statiques
 * 
 * Instructions: 
 * 	- créer un dossier nommé plugins à la racine de pluxml
 *  - y mettre ce fichier
 *  - ajouter dans header.php :
 * 		
 * 		<?php 
 * 			include_once(PLX_ROOT."/plugins/Myplx.php");
 *			$Myplx = new Myplx($plxShow); 
 * 		?>
 * 	- remplacez '$plxShow->staticList()' par '$Myplx->staticList()'
 * 
 */
if(!defined('PLX_ROOT')) exit;

class Myplx {
	
	var $plxShow;
	// mettez ici les ID des pages statiques cachées sans les 0
	var $hidden = array(1);

	function __construct($plxShow) {
		$this->plxShow = $plxShow;
	}
	
	
	
	/**
	 * Méthode qui affiche la liste des pages statiques.
	 * Si la variable $extra est renseignée, un lien vers la 
	 * page d'accueil (nommé $extra) sera mis en place en première position
	 *
	 * @param	extra	nom du lien vers la page d'accueil
	 * @return	stdout
	 * @author	Florent MONTHEL, Stephane F.
	 **/
	function staticList($extra='') {
	
		# Si on a la variable extra, on affiche un lien vers la page d'accueil
		if($extra != '') {
			$title = plxUtils::strCheck($this->plxShow->plxMotor->aConf['title']);
			if($this->plxShow->plxMotor->mode == 'home' AND $this->plxShow->plxMotor->cible == '')
				echo '<li id="static-home" class="active"><a href="./" title="'.$title.'">'.$extra.'</a></li>';
			else
				echo '<li id="static-home"><a href="./" title="'.$title.'">'.$extra.'</a></li>';
		}
		# On verifie qu'il y a des pages statiques
		if($this->plxShow->plxMotor->aStats) {
			foreach($this->plxShow->plxMotor->aStats as $k=>$v) {
				// on passe sur les pages cachées
				if (in_array($k, $this->hidden)) 
					continue;
				if($v['readable'] == 1 AND $v['active'] == 1) { # La page existe bien et elle est active
					$name = plxUtils::strCheck($v['name']);
					$url = './?static'.intval($k).'/'.$v['url'];
					if($this->plxShow->plxMotor->mode == 'static' AND $this->plxShow->plxMotor->cible == $k)
						echo '<li id="static-'.intval($k).'" class="active"><a href="'.$url.'" title="'.$name.'">'.$name.'</a></li>';
					else
						echo '<li id="static-'.intval($k).'"><a href="'.$url.'" title="'.$name.'">'.$name.'</a></li>';
				}
			} # Fin du while
		}
	}
	
}
Modification du/des themes


Ouvrez header.php et ajoutez ceci :
<?php
    include_once(PLX_ROOT."/plugins/Myplx.php");
    $Myplx = new Myplx($plxShow);
?>
Toujours dans header.php, remplacez :
<?php $plxShow->staticList('Accueil'); ?>
par:
<?php $Myplx->staticList('Accueil'); ?>
Ensuite j'assume que vous voulez la recherche dans la sidebar, on ouvre donc sidebar.php et on ajoute le formulaire. NB: N'oubliez pas de modifier le paramètre "action" <form>, sous la forme: <?php echo PLX_ROOT ?>/?static[ID de la page]/"> :
<h2>Recherche</h2>
	<form method="post" id="searchform" action="<?php echo PLX_ROOT ?>/?static1/statique-1">
	<p class="searchform">
	<input type="hidden" name="search" value="search" />
	<input type="text" class="searchfield" size="16" name="searchfield" value="Rechercher..." onblur="if(this.value=='') this.value='Rechercher...';" onfocus="if(this.value=='Rechercher...') this.value='';" /> 
	<input type="submit" class="searchbutton" value="Go" />
	</p>
Dernière étape, le contenu de la page statique


Mettez ceci dans votre page statique :
<?php
# Page statique Pluxml : moteur de recherche
# revision 1.0 par Stephane: 
#	- compatibilité pluxml 4.2 
#	- paramètrage du format de la date
# modifié par KnuckOne :
#     - renvoie un message d'information quand le terme de recherche envoyé est vide

if(!defined('PLX_ROOT')) exit;

# Renseignez ici le format de la date
$format_date = '#num_day/#num_month/#num_year(4)';

global $plxShow;

if (!empty($_POST['searchfield'])) {

	$plxGlob_arts = new plxGlob(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles']);
	$aFiles = $plxGlob_arts->query('/[0-9]{4}.([0-9]{3}|home).[0-9]{12}.[a-z0-9-]+.xml$/','search','rsort');

	if(is_array($aFiles)) { # On a des fichiers
    
		$searchword = strtolower(addslashes($_POST['searchfield']));
		ob_start();
		while(list($k,$v) = each($aFiles)) { # On parcourt tous les fichiers
	
			$art = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles'].$v);

			$searchstring  = strtolower(addslashes($art['title'].$art['chapo'].$art['content'])); 
		
			if (substr_count($searchstring,$searchword) > 0) {
				$searchresults = true;
				$art_num = intval($art['numero']);
				$art_url = plxUtils::strCheck($art['url']);
				$art_title = plxUtils::strCheck($art['title']);
				$art_date = plxDate::dateIsoToHum($art['date'], $format_date);
				echo '<li>'.$art_date.': <a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
			}
		}
		$content = ob_get_clean(); 
		if ($content!='')
			echo '<p>Résultats de la recherche pour <strong>'.$searchword.'</strong> : <br /><ol class="search_results">'.$content.'</ol></p>';
		else
			echo '<p>Aucun résultat pour <strong>'.$searchword.'</strong></p>';
	}
} else {
    echo "<p>Veuillez entrer un mot pour la recherche !</p>";
}
?>
Et voila :)

Réponses

  • étant débutant je me suis perdu en route !

    Mise en place d'un pseudo plugin :
    quel nom donner au fichier du dossier de plugins qui doit accueillir le code source donné ?

    Modification du/des themes :
    "Ouvrez header.php et ajoutez ceci : [...]"
    je pense qu'il s'agit du fichier header.php du thème utilisé ?
    L'ajout se fait à la toute fin du fichier ?
    "Toujours dans header.php, remplacez : [...]"
    je n'ai pas cette chaîne...

    Ton tips m'interesse car je voudrais mettre un lien dans le footer vers une page statique "Mentions légales" qui, du coup, n'apparaitra pas avec les autres pages statiques...

    merci d'avance
  • Pour information, la version 4.3 de Pluxml intègre çà par défaut.
  • Il faut positionner "l'ordre d'affichage" de ta page statique à 0 dans l'administration
  • en effet, la page est à présent cachée
    merci beaucoup

    je prendrai le temps de rédiger la page "Gestion des pages statiques" sur le wiki ce weekend :-)
  • ça y est
    PluXml, c'est trop fort !
  • marama a écrit:
    Il faut positionner "l'ordre d'affichage" de ta page statique à 0 dans l'administration
    Ok, Super cette astuce !!!

    Cependant, juste une question, pour le lien à mes pages statiques l'ancien line fonctionne toujours , est-ce normal ???

    href="./?static5/url";

    Alors que cela devrait-être static0 ... non ?

    Cordialement.
  • ça n'a rien à voir avec le n° de création de la page, c'est l'ordre de présentation des pages dans l'interface
  • antistress a écrit:
    ça n'a rien à voir avec le n° de création de la page, c'est l'ordre de présentation des pages dans l'interface
    OK merci ;)
Connectez-vous ou Inscrivez-vous pour répondre.