[4.2] Cacher une page statique (la recherche dans mon cas)
KnuckOne
Member
dans Modifications
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 :
Ouvrez header.php et ajoutez ceci :
Mettez ceci dans votre page statique :
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 themesOuvrez 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 statiqueMettez 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 Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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
merci beaucoup
je prendrai le temps de rédiger la page "Gestion des pages statiques" sur le wiki ce weekend :-)
PluXml, c'est trop fort !
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.