Diverses modifs sur les pages statiques

novembre 2009 modifié dans Modifications
Bonsoir,

pour un développement j'ai eu besoin de modifier le core et l'admin des pages statiques pour :

dans l'admin:
- ajouter les META keyword et description par page
- ajouter un sous-titre
- choisir si OUI ou NON la page doit être lister dans le menu

L'interêt ?
- les META sont plus précis car entrés par page
- Le sous-titre m'a permis de faire des titres sur 2 lignes avec des tailles et style de texte différents
- lister dans le menu ? Je me suis suis rendu compte qu'il était possible de faire des include de page statiques dans d'autres pages. Ce qui permet de faire des blocs (diaporama par ex.) inclus en page d'accueil gérables facilement dans l'admin. De la, j'ai souhaité ajouter, dans le footer, un lien vers une page statique (mon site ne fonctionne qu'avec des pages statiques donc le menu liste toutes les pages "actives") il m'a donc fallu ajouter l'option MENU => OUI/NON

et voila. j'espère que c'est clair pour vous et que cela vous servira.

VOILA LE CODE.

fichier /core/lib/class.plx.motor.php
line 167
vous remplacer par :
/**
	 * Méthode qui parse le fichier des pages statiques et alimente 
	 * le tableau aStats
	 *
	 * @param	filename	emplacement du fichier XML des pages statiques
	 * @return	null
	 * @author	Florent MONTHEL
	 **/
	function getStatiques($filename) {

		if(!is_readable($filename)) return;
			
		# Mise en place du parseur XML
		$data = implode('',file($filename));
		$parser = xml_parser_create(PLX_CHARSET);
		xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
		xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
		xml_parse_into_struct($parser,$data,$values,$iTags);
		xml_parser_free($parser);
		# On verifie qu'il existe des tags "statique"
		if(isset($iTags['statique'])) {
			# On compte le nombre de tags "statique"
			$nb = sizeof($iTags['statique']);
			# On boucle sur $nb
			for($i = 0; $i < $nb; $i++) {
				# Recuperation du nom de la page statique
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['name']
				= $values[ $iTags['statique'][$i] ]['value'];
				# Recuperation de l'url de la page statique
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['url']
				= strtolower($values[ $iTags['statique'][$i] ]['attributes']['url']);
				# Recuperation du sous titre de la page statique
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['sstitre']
				= strtolower($values[ $iTags['statique'][$i] ]['attributes']['sstitre']);
				# Recuperation des mots clés de la page statique
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['motcles']
				= strtolower($values[ $iTags['statique'][$i] ]['attributes']['motcles']);
				# Recuperation de la description de la page statique
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['description']
				= strtolower($values[ $iTags['statique'][$i] ]['attributes']['description']);
				# Recuperation de l'etat de la page
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['active']
				= intval($values[ $iTags['statique'][$i] ]['attributes']['active']);
				# Recuperation de l'etat du menu de la page
				$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['menu']
				= intval($values[ $iTags['statique'][$i] ]['attributes']['menu']);
				# On verifie que la page statique existe bien
				$file = PLX_ROOT.$this->aConf['racine_statiques'].$values[ $iTags['statique'][$i] ]['attributes']['number'];
				$file .= '.'.$values[ $iTags['statique'][$i] ]['attributes']['url'].'.php';
				if(is_readable($file)) # Le fichier existe
					$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['readable'] = 1;
				else # Le fichier est illisible
					$this->aStats[ $values[ $iTags['statique'][$i] ]['attributes']['number'] ]['readable'] = 0;
			}
		}
	}
fichier /core/admin/statiques.php
vous remplacer tout par :
<?php

/**
 * Edition des pages statiques
 *
 * @package PLX
 * @author	Stephane F et Florent MONTHEL
 **/

include(dirname(__FILE__).'/prepend.php');

# On édite les pages statiques
if(!empty($_POST)) {
	$msg = $plxAdmin->editStatiques($_POST);
	header('Location: statiques.php?msg='.urlencode($msg));
	exit;
}

# On inclut le header	
include(dirname(__FILE__).'/top.php');
?>

<h2>Création et édition des pages statiques</h2>
<form action="statiques.php" method="post" id="change-static-file">
	<fieldset>
		<table class="table">
			<tr>
				<td><strong>Identifiant</strong> :</td>
				<td><strong>Menu</strong> :</td>
				<td><strong>Url</strong> :</td>
				<td><strong>SS Titre</strong> :</td>
				<td><strong>Active</strong> :</td>
				<td><strong>Ordre</strong> :</td>
				<td> </td>
			</tr>
		<?php
		# Initialisation de l'ordre
		$num = 0;
		# Si on a des pages statiques
		if($plxAdmin->aStats) {
			foreach($plxAdmin->aStats as $k=>$v) { # Pour chaque page statique
				echo '<tr><td><label>Page '.$k.'</label></td><td>';
				plxUtils::printInput($k, plxUtils::strCheck($v['name']), 'text', '25-50');
				echo '</td><td>';
				plxUtils::printInput($k.'_url', $v['url'], 'text', '15-50');
				echo '</td><td>';
				plxUtils::printInput($k.'_sstitre', $v['sstitre'], 'text', '25-50');
				echo '</td><td>';
				plxUtils::printSelect($k.'_active', array('1'=>'Oui','0'=>'Non'), $v['active']);
				echo '</td><td>';	
				plxUtils::printInput($k.'_ordre', ++$num, 'text', '3-3');
				echo '</td><td>';
				echo '<a href="statique.php?p='.$k.'" title="Editer le code source de cette page">Éditer</a>';
				echo '</td></tr>';
				echo '<tr><td></td><td style="text-align:center; font-weight:bold">Mot clés :</td><td colspan="3">';
				plxUtils::printInput($k.'_motcles', $v['motcles'], 'text', '50-50');
				echo '</td><td>Menu</td></tr>';
				echo '<tr><td></td><td style="text-align:center; font-weight:bold">Description :</td><td colspan="3">';
				plxUtils::printInput($k.'_description', $v['description'], 'text', '50-50');
				echo '</td><td>';
				plxUtils::printSelect($k.'_menu', array('1'=>'Oui','0'=>'Non'), $v['menu']);
				echo '</td></tr>';
				echo '<tr><td colspan="7"><br /><br /></td></tr>';
			}
			# On récupère le dernier identifiant
			$a = array_keys($plxAdmin->aStats);
			rsort($a);	
		} else {
			$a['0'] = 0;
		}
		?>
		<tr>
		<td>Nouvelle page</td><td>
		<?php
		plxUtils::printInput(str_pad($a['0']+1, 3, '0', STR_PAD_LEFT), '', 'text', '25-50');
		echo '</td><td></td><td></td><td>';
		plxUtils::printSelect(str_pad($a['0']+1, 3, '0', STR_PAD_LEFT).'_active', array('1'=>'Oui','0'=>'Non'), '1');
		echo '</td><td>';
		plxUtils::printInput(str_pad($a['0']+1, 3, '0', STR_PAD_LEFT).'_ordre', ++$num, 'text', '3-3');
		echo '</td></tr>';
		?>
		</table>
		<p class="center"><input type="submit" value="Modifier les pages statiques" /></p>
	</fieldset>
</form>

<div class="help">
	<h3>Ajouter une page statique</h3>
	<p>Pour créer une nouvelle page statique remplissez la ligne "Nouvelle page" en renseignant :</p>
	<ul>
		<li>le nom de cette dernière (code html interdit)</li>
		<li>l'état actif ou non de la page</li>
	</ul>
	<p>Le numéro d'ordre est pré-rempli de façon à ajouter la nouvelle page statique à la fin.</p>
	<p>Une fois la page crée, vous pouvez mettre en place le code source de la page en cliquant sur le lien "éditer le code source".</p>
	<h3>Modifier une page statique</h3>
	<p>Il suffit de modifier les différents champs de la page en question puis de cliquer sur le bouton "Modifier les pages statiques".</p>
	<p>Vous pouvez modifier le code source de la page en cliquant sur le lien "éditer le code source".</p>
	<h3>Supprimer une page statique</h3>
	<p>Il suffit de vider le champ qui comporte le nom de la page en question.</p>
	<h3>A propos des URLs</h3>
	<p>L'utilisation d'urls dites significatives (ex : statique1/contact) nécessite d'avoir un champ renseignant l'URL de chaque page. Ce champ est automatiquement rempli à la création mais ne l'est pas en cas de modification pour garder par défaut une compatibilité des adresses.</p>
</div>

<?php
# On inclut le footer
include(dirname(__FILE__).'/foot.php');
?>
fichier /core/lib/class.plx.admin.php
line 223
vous remplacer par :
/**
	 * Méthode qui édite le fichier XML des pages statiques selon le tableau $content
	 *
	 * @param	content	tableau multidimensionnel des pages statiques
	 * @return	string
	 * @author	Stephane F. et Florent MONTHEL
	 **/
	function editStatiques($content) {

		# Début du fichier XML
		$xml = "<?xml version=\"1.0\" encoding=\"".PLX_CHARSET."\"?>\n";
		$xml .= "<document>\n";
		# On va trier les clés selon l'ordre choisi
		foreach($content as $k=>$v) {
			if(is_numeric($k))
				$array[$k] = $content[$k.'_ordre'];
		}
		asort($array);
		# On va générer l'entrée XML pour chaque page statique
		foreach($array as $k=>$v) {
			$stat_num = $k;
			$stat_name = trim($content[$k]);
			if($stat_name != '') {
				$stat_sstitre = (isset($content[$k.'_sstitre']))?trim($content[$k.'_sstitre']):'';
				$stat_motcles = (isset($content[$k.'_motcles']))?trim($content[$k.'_motcles']):'';
				$stat_description = (isset($content[$k.'_description']))?trim($content[$k.'_description']):'';
				$stat_url = (isset($content[$k.'_url']))?trim($content[$k.'_url']):'';
				$stat_active = intval($content[$k.'_active']);
				$stat_menu = intval($content[$k.'_menu']);
				if($stat_url != '')
					$stat_url = plxUtils::title2url($stat_url);
				else
					$stat_url = plxUtils::title2url($stat_name);
				# URL vide après le passage de la fonction ;)
				if($stat_url == '') $stat_url = 'nouvelle-page-statique';
				# On va vérifier si on a besoin de renommer la page statique
				if(isset($this->aStats[ $stat_num ]) AND $this->aStats[ $stat_num ]['url'] != $stat_url) {
					if(file_exists(PLX_ROOT.$this->aConf['racine_statiques'].$stat_num.'.'.$this->aStats[ $stat_num ]['url'].'.php'))
						@rename(PLX_ROOT.$this->aConf['racine_statiques'].$stat_num.'.'.$this->aStats[ $stat_num ]['url'].'.php',PLX_ROOT.$this->aConf['racine_statiques'].$stat_num.'.'.$stat_url.'.php');
				}
				# On génère notre ligne
				$xml .= "\t<statique number=\"".$stat_num."\" active=\"".$stat_active."\" menu=\"".$stat_menu."\" url=\"".$stat_url."\" sstitre=\"".$stat_sstitre."\" motcles=\"".$stat_motcles."\" description=\"".$stat_description."\"><![CDATA[".$stat_name."]]></statique>\n";
			} else { # On supprime la ligne donc le fichier de la page statique
				if(isset($this->aStats[ $stat_num ]) AND file_exists(PLX_ROOT.$this->aConf['racine_statiques'].$stat_num.'.'.$this->aStats[ $stat_num ]['url'].'.php'))
					@unlink(PLX_ROOT.$this->aConf['racine_statiques'].$stat_num.'.'.$this->aStats[ $stat_num ]['url'].'.php');
			}
		}
		$xml .= "</document>";
		# On écrit le fichier
		if(plxUtils::write($xml,PLX_ROOT.$this->aConf['statiques']))
			return 'Pages statiques modifiées à '.@date('H:i:s');
		else
			return 'Erreur dans la modification du fichier '.PLX_ROOT.$this->aConf['statiques'];
	}
fichier /core/lib/class.plx.show.php
line 790
vous remplacer par :
/**
	 * 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->plxMotor->aConf['title']);
			if($this->plxMotor->mode == 'home' AND $this->plxMotor->cible == '')
				echo '<li id="static-home" class="active"><a class="'.$title.'" href="./" title="'.$title.'">'.$extra.'</a></li>';
			else
				echo '<li id="static-home"><a class="'.$title.'" href="./" title="'.$title.'">'.$extra.'</a></li>';
		}
		# On verifie qu'il y a des pages statiques
		if($this->plxMotor->aStats) {
			foreach($this->plxMotor->aStats as $k=>$v) {
				if($v['readable'] == 1 AND $v['active'] == 1 AND $v['menu'] == 1) { # La page existe bien et elle est active
					$name = plxUtils::strCheck($v['name']);
					$sstitre = $v['sstitre'];
					$url = './?static'.intval($k).'/'.$v['url'];
					if($this->plxMotor->mode == 'static' AND $this->plxMotor->cible == $k)
						echo '<li id="static-'.intval($k).'" class="active"><a class="static-'.intval($k).'" href="'.$url.'" title="'.$name.'">'.$name.'</a></li>';
					else
						echo '<li id="static-'.intval($k).'"><a class="static-'.intval($k).'" href="'.$url.'" title="'.$name.'">'.$name.'</a></li>';
				}
			} # Fin du while
		}
	}
	
	
	
	/**
	 * Méthode qui affiche le soustitre des pages static
	 *
	 * @return	stdout
	 * @author	Anthony GUÉRIN et Florent MONTHEL
	 **/
	function pageSousTitle() {

		if($this->plxMotor->mode == 'static') {
			echo plxUtils::strCheck($this->plxMotor->aStats[ $this->plxMotor->cible ]['sstitre']);
			return;
		}
		
	}
	
	/**
	 * Méthode qui affiche les META mot cles des pages static
	 *
	 * @return	stdout
	 * @author	Anthony GUÉRIN et Florent MONTHEL
	 **/
	function metaMotcleStatic() {

		if($this->plxMotor->mode == 'static') {
			echo plxUtils::strCheck($this->plxMotor->aStats[ $this->plxMotor->cible ]['motcles']);
			return;
		}
		
	}
	
	/**
	 * Méthode qui affiche le META description des pages static
	 *
	 * @return	stdout
	 * @author	Anthony GUÉRIN et Florent MONTHEL
	 **/
	function metaDescriptionStatic() {

		if($this->plxMotor->mode == 'static') {
			echo plxUtils::strCheck($this->plxMotor->aStats[ $this->plxMotor->cible ]['description']);
			return;
		}
		
	}
Je pense ne rien avoir oublié.

Ah si, pour afficher les META il faut mettre
<meta name="description" content="<?php $plxShow->metaDescriptionStatic(); ?>" />
<meta name="keywords" content="<?php $plxShow->metaMotcleStatic(); ?>" />
dans header.php

Réponses

  • FrédéricFrédéric Member
    novembre 2009 modifié
    En effet SapinTremblant très intéressant, des fonctions qui pourrais aussi me servir et qui pourrais être par défaut dans pluxml.

    Ce qui serais bien ca serais aussi de pouvoir inclure des fichiers php dans les pages statiques dédié au dossier du thème.

    Exemple pour la page contact, on pourrais l'afficher sur plusieurs styles différents ayant chacun leur propre class et mise en page donc.

    Édite: Comment et ou s'affiche les Sous-Titres stp ?
  • @mouffin : Je ne suis pas sur de bien comprendre ton idée. Je gère ma page 'contact' depuis l'admin dans 'statique', je la mets 'active' mais pas dans le 'menu'. Je l'appelle depuis mon footer, ou autre, avec '<a href="?staticIDdelaPAGEstatique/MONtitre" title="contact">contactez moi</a>' et du coup son style va prendre celui de mon thème.

    Ai-je répondu à ton questionnement ?
  • En fait pour te répondre,

    Si on prends exemple de la page contact fournie dans le Wiki, celle ci est à intégrer dans une page statique avec tout le code php. Le problème et que si on a un sélecteur de style la mise en page seras identique pour tout les thèmes.

    Je pense qu'il serais bien d'avoir le choix entre insérer le code php de la page statique ou utiliser le fichier php (personnalisé) qui auras le même nom que le titre de la page ou faire un simple includes (impossible actuellement) de ce fichier contact.php qui se trouverais dans le dossier du theme.

    En gros cela permettrais différent affichage de cette page suivant le thème.

    Je c'est pas si c'est bien clair ^^
  • FrédéricFrédéric Member
    novembre 2009 modifié
    Sinon je viens d'appliquer tes modifications et ça marche au poil :) Merci !

    Et voici par screen le problème d'une page statique unique pour tout les thèmes (ici 2)

    mini_091111085559763488.png

    mini_091111085710970561.png
  • Parfait alors.

    Je vais regarder de mon coté pour ton histoire de style sur le formulaire de contact. en fait, tu voudrais que les champs du formulaire soient stylés c'est ça ? Pas que la page, mais le fond des champs, le bouton etc... en fait pour cela il faut récupérer l' ID du style actuel et le passer en class="monstyleactuel" dans la div qui contient le formulaire. Après quoi tu peux styler en CSS chaque formulaire en fonction du style.

    Affaire à suivre.
  • FrédéricFrédéric Member
    novembre 2009 modifié
    Tu as tout compris :)

    Si on peux faire ça avec l'id du thème oui ca serais encore mieux, cela éviteras de charger pluxml de page inutile.

    Là j'ai pris exemple pour la page contact, mais ca peux être n'importe quelle page ;)
  • J'ai un truc pour toi.

    dans class.plx.show.php tu ajoutes à la fin, avant la dernière "}"
    /**
    	 * Méthode qui affiche le style actif
    	 *
    	 * @return	stdout
    	 **/
    	function leStyle() {
    		echo $this->plxMotor->style;
    		return;
    	}
    
    ensuite dans la page header.php de tous tes thèmes tu modifies <body> par
    <body class="<?php $plxShow->LeStyle(); ?>">
    
    ensuite il ne te reste qu'à styler tes formulaires.

    voila.
  • Merci SapinTremblant, je garde ca sur le coude et vois ce que je peux faire avec ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Pour éviter de modifier la classe plxShow tu peux directement utiliser l'instruction suivante à la place de définir une nouvelle fonction leStyle()
    <body class="<?php echo $plxShow->plxMotor->style ?>">
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • encore plus simple du coup. Merci.
  • impossible a mettre en place sur la V5 normal ?

    page blanche systematique

    quequ'un a une solution pour les meta description ?
Connectez-vous ou Inscrivez-vous pour répondre.