Pluxopolis

Tout savoir pour devenir un pro de PluXml, mais pas seulement... Pages extraites du site Pluxopolis

PluXml

Table des matieres

PluXml 5.8.11 et la version 5.9.0 en dev

PluXml continue a évolué

La version stable est passée de la 5.8.9 à la 5.8.11, en corrigeant plusieurs petits bugs ou typos

Elle se conforme aux versions de PHP 8.X, évitant ainsi tout les messages désagréables de pratiques de codages devenus obsolètes et bientôt inopérants.

La mise à jour se fait de façon classique sans modifier la structure de vos fichiers de configurations ou des articles.

Vous pouvez suivre les évolutions de PluXml avec les archives des différentes versions . Les archives avec le suffixe -rcX , indiquent une version en développement à tester , à ne pas utiliser pour un site en ligne

Et à propos de la 5.9.0-rcX, qu'en est-il ?

La version 5.9.0, le futur

Cette version fonctionnelle , toujours en développement, à déjà beaucoup modifié et amélioré le cœur de PluXml en factorisant et améliorant un très grand nombre de ses fonctions internes.

L'une des nouveautés est aussi une avancée remarquable dans l’internationalisation (i18n ) du CMS, les url classique de PluXml comme : articleX, categorieX, ...reflètent maintenant la langue configurée pour le site, en traduisant les mot clés des URLs.

Le cas des plugins dans la 5.9.0

Une compatibilité partielle est conservée, principalement pour les plugins "dit officiels".

D'autre part:

La réécriture d'une grosse partie du code de PluXml peut avoir des effets de bords sur certains plugins qui sont encore compatible avec la dernière version stable de PluXml.

De nombreux Plugins ne fonctionnent pas ou partiellement avec PHP8.x , cela ne dépend pas de PluXml.

Enfin, le forum de PluXml reste le meilleur endroit pour obtenir de l'aide sur l'installation et l'usage d'un plugin, quelle que soit la version de Pluxml utilisée

Cas des thèmes

Dans l'ensemble, les thèmes continueront de fonctionner tel quel, certaines nouvelles fonctionnalités ou templates affichables ne seront pas disponibles.

Pour réadapter un thèmes et y ajouter les nouveaux templates , une serie de tutoriels sur pluxthemes.com vous montrerons comment ajouté un template dans votre thèmes.

Table des matieres

développement d'un plugin

Prérequis

Le développement d'un plugin n'est pas chose aisée lorsque l'on ne connait pas bien le fonctionnement de PluXml. Cela peut-être mission impossible si, PHP et vous, êtes de parfais inconnus pour l'un et l'autre.

Un minimum de connaissance en PHP est un prérequis , mais aussi la capacité de déboguer sont propre code. L''idéal est aussi d'avoir quelques compétences en JavaScript , HTML et CSS pour gérer l'ensemble des fonctionnalités du plugin pour son intégration dans votre PluXml et votre thème.

Avec ces prérequis, vous pouvez prendre connaissance de la documentation et de ses quelques exemples fournis. En décortiquant l'un des nombreux plugins disponibles la documentation n'en sera que plus facile à lire et à comprendre.

Je suis prêt, action!

La construction d'un plugin commence par choisir un nom, nom qui servira de répertoire, de nom au fichier php de class et au nom de class de ce Plugin .
Le fichier infos.xml, carte d'identité de votre plugin, est aussi obligatoire .

Ce qui donne comme premier dossier et fichiers de votre projet :

monPlugin

monPlugin.php

infos.xml

C'est bien, c'est le minimum requis pour un plugin.

Ensuite?

en parcourant la documentation , vous allez au fur et à mesure ajouter les codes de base nécessaires à ces deux fichiers et rapidement obtenir le squelette d'un plugin reconnu par PluXml et qui sera installable, mais qui ne fera pas grand chose à ce stade.

Cette partie n'est pas la plus joyeuse et lorsque vous aurez développé quelques plugins, vous reprendrez surement l'un deux pour en garder toutes les bases dont vous avez besoin au lieu de les recoder en gagnant du temps pour aller à l'essentiel.

Peut-on faire plus facile, rapide?

-- Oui, certainement.

Pluxopolis vous propose un générateur de plugin en ligne avec plusieurs options paramétrables pour passer cette première étape, essentielle mais chronophage, avec seulement les fonctionnalités et hooks dont vous aurez besoin. Plus besoin de cloner et de nettoyer un autre projet de plugin pour en démarrer un nouveau.

C'est ici : Le Chaudron à plugin.

Cette marmite à plugin est elle même un plugin que vous pouvez installer chez vous si vous préférez, son archive se trouve sur : Github plugin - theCrok - de son nom.

Cela n’élimine pas les prérequis, il vous restera à coder vos nouvelles fonctionnalités et de l'aide pourra vous être donnée dans le forum de PluXml pour finaliser votre pépite.

Bon dev à tous.

Ce plugin n'est pas le premier outil qui veut vous aider dans les premiers pas du developpement d'un plugin.
Il existe:

ce script en ligne : Plugin Starter

Cette base de plugin :Plugin.zip

et celle-ci test.zip

Entre autre outils , vous avez aussi, kzTranslate.zip pour traduire votre fichier de langue en une ou plusieurs autre langues. Attention, ce plugin ne traduit que du texte brut. Si vous insérer des balises HTML , comme je le fais moi-même fréquemment, le plugin ne finalisera pas la traduction.

Table des matieres

essais SEO

Des questions sur le SEO, ou comment optimiser son site pour les "moteurs de recherches" reviennent régulièrement sur le forum de PluXml

Malgré les qualités indéniables de PluXml, le peut de contributeur et d'expert en différent domaine ne permette pas à PluXml d'évoluer aussi rapidement qu'on le souhaite dans les différents domaines d'expertises afin d'en tirer les meilleur partis, même si l'essentiel existe et est en place dans PluXml

Au delà des bonnes pratiques et des quelques métadonnées que PluXml permet de renseigner , des plugins et scripts existent pour ajouter et améliorer le référencement de votre site.

On peut retrouver des plugins sur le centre de ressources et des scripts et astuces sur le forum de PluXml. Certains sont trop spécifiques pour se suffirent, d'autres sont en parti devenus obsolète avec le changement des bonnes pratiques ou la disparition de certains réseaux sociaux.

En creusant un peu l'on découvre que le sujet est très complexe et qu'il n'est pas nécessaire ou possible de mettre en place toutes les recommandations. Cela dépendra du contenu(sujet de votre Site mais aussi de chaque pages individuellement), de votre public, de vos compétences mais aussi de votre budget si vous souhaitez confier cette tache à un professionnel.

Le plugin, tente de regrouper quelques moyens qui faciliteront le référencement et le partage de votre site. Ce plugin est compatible avec les plugin plxMyMultiLingue, plxMyBetterUrls et plxMySearch .

L'installation du plugin est standard et sa configuration ne présente pas de difficulté particulières. Il s'agit d'activé ou non la génération des métadonnées et des URL canoniques. toutes indépendamment.

Il est aussi possible de voir et d'éditer les fichiers robots.txt et humans.txt. Les fichiers ads.txt et .htaccess ne sont pas concerné dans cette première version.

Les options de configurations sont:

Ajout de l'URL canonique de la page

option d'exclusion de certaines catégories ou page statiques du sitemp de PluXml.

Ajout des données structurées pour des résultats enrichis

Ajout des balises META OpenGraph

Ajout des balises META 'Twitter Card'

l'edition des fichiers robots.txt et humans.txt

Déclarer le plugin plxMySearch comme un moteur de recherche pour le navigateur (création du fichier opensearch.xml)

Le plugin est téléchargeable depuis github : extra_SEO.

Table des matieres

Commentaires dans une page statique

Sur le forum de PluXml, Il revient régulièrement la question de Comment insérer les commentaires dans une page statiques?.

Les astuces proposées se basent toutes sur l'utilisation d'un article, soit en l'affichant dans la page statique avec la fonction lastArtList() soit avec une redirection 301 vers cet article détourné

Avantage:

toutes les fonctions sont déjà présentes dans PluXml, il n'y a rien à développer

les derniers commentaires peuvent s'afficher dans la barre de navigation via la fonction lastComList().

Désavantage:

On veux une page, pas un article

Cela nécessite de créer un article et éventuellement une catégorie dédiée

Cela nécessite de cacher cette article et sa catégorie de la navigation.

accessoirement les extraire du sitemap aussi

pas de pagination , sauf à trouver un plugin pour le faire et pour l'ensemble des articles.

Proposons alors, une autre approche avec un script "maison"! et qui inclus une pagination sur les commentaires.

Alternative: Un script de commentaire dédié à une page.

Ce script est developpé à partir de l'exemple de l'article Paginer le contenu d'une page statique pour la pagination et son visuel ainsi que du fichier commentaires.php du thème par défaut de Pluxml en respectant sa structure HTML et les styles appliqués aux commentaires et au formulaire.

Désavantage

Le script est en partie développé

Les derniers commentaires n'apparaissent pas dans la barre de navigation si vous utilisé la fonction lastComList()

Pas de modération, sauf à le faire manuellement.

Le script est à inclure dans la page statique concernée

Avantages

Le script est en partie développé, on fait ce que l'on veut sans impacté la gestion des commentaires dans les articles.

Le script est configurable et seulement pour la page dans laquelle il se trouve

Le capcha natif de PluXml est disponible.

Ce n'est pas un plugin, le script n'est chargé que dans cette page.

Le script est insensible aux mises à jour, sauf si la fonction de l'appel au capcha de PluXml n'existe plus.

Le script

Option de configuration

Il y a quelques variables qui peuvent être ajusté pour déterminé le visuel et la pagination dans le bloc :

	#########################################
	#configuration
	#########################################
	# nombre de Commentaire à afficher par page
	$bypage = 4;

        # mettre true au lieu de false pour afficher les liens de chaque page
	$intermediaire = false;

	# mettre a true pour afficher la dernière page des commentaires par défaut
	$showLast = true;
	#########################################
	# FIN configuration
	#########################################

Ne toucher à rien d'autre sauf à savoir ce que vous faites et à vos risques.

Le code à copier/coller dans la page statique

‹?php
	# Ajout commentaires dans une page statique
	# Pagination des commentaires
	# reponses aux commentaires
	# inclusion du capcha natif de PluXml
	# @Author Gcyrillus

	# $this is $plxShow
	#########################################
	#configuration
	#########################################

	# nombre de Commentaire à afficher par page
	$bypage = 4;

    # mettre true au lieu de false pour afficher les liens de chaque page
	$intermediaire = false;

	# mettre a true pour afficher la dernière page des commentaires par défaut
	$showLast = true;

	#########################################
	# FIN configuration
	#########################################

	# fichier de stockage des commentaires
	$commentsFile = PLX_ROOT.'/data/statiques/comment-'.$this-›staticId().'.json';
	if(!file_exists($commentsFile)) {
		touch($commentsFile);
		file_put_contents($commentsFile,'[]');
	}

	# extraction des commentaires dans un tableau
	$comments =  json_decode(file_get_contents($commentsFile), true);
	$num = count($comments);
	# format du message aprés soumission du formulaire
	$row ='‹p id="com_message" class="#com_class"›‹strong›#com_message‹/strong›‹/p›';

	# As t-on de nouveaux commentaires ?
	if(isset($_POST)){
		# color boite message par défaut
		$color = 'orange';
		$level='level-0';
		if(isset($_POST['name']) AND isset($_POST['content'])) {

			if( $_POST['name'] =='' OR $_POST['content'] =='') {
				$_SESSION['msgcom'] =  L_NEWCOMMENT_FIELDS_REQUIRED;
			}
			if(!empty($this-›aConf['capcha']) AND (empty($_SESSION['capcha_token']) OR	empty($_POST['capcha_token']) or ($_SESSION['capcha_token'] != $_POST['capcha_token']))) {
				$_SESSION['msgcom'] .= ' '. L_NEWCOMMENT_ERR_ANTISPAM;
			}
			else {
				# On vérifie que le capcha est correct
				if($this-›plxMotor-›aConf['capcha'] == 0 OR $_SESSION['capcha'] == sha1($_POST['rep'])) {
					if(isset($_POST['level']))
					{
						$level = trim($_POST['level']) ;
						if($level == 'level-5' || $level =='level-max' ) {$level ='level-max';}
						else {$level++;}
					}
					$newcomment[] = array(
					'num'		=› trim(strip_tags($_POST['num'])),
					'date'		=› date('d-m-Y') ,
					'name'		=› trim(strip_tags($_POST['name'])) ,
					'mail'		=› trim(strip_tags($_POST['mail']))  ,
					'site'		=› trim(strip_tags($_POST['site'])),
					'content' 	=› trim(strip_tags($_POST['content'])),
					'level'		=› trim(strip_tags($level))
					);

					$color = 'green';
					$_SESSION['msgcom'] = L_COM_PUBLISHED;

					# est ce une reponse à un commentaire particulier?
					if(isset($_POST['index']))
					{
						array_splice($comments, trim($_POST['index'])+1, 0, $newcomment);
					}
					else {

						array_push($comments,$newcomment[0]);

					}

					file_put_contents($commentsFile, json_encode($comments,true|JSON_PRETTY_PRINT) );
				}
				else {
					$_SESSION['msgcom'] =  L_NEWCOMMENT_ERR_ANTISPAM;
				}
			}
		}
	}

	if(count($comments)›0) {
		$tittleComment ="‹h3›".count($comments).' '. L_COMMENT ."‹/h3›";
		if(count($comments)›1) {
			$tittleComment ="‹h3›".count($comments).' '.  L_COMMENTS ."‹/h3›";
		}
		echo $tittleComment ;

		# Style barre pagination commentaires
		echo '‹style›:where(.page-item.page-link.active) { text-decoration:underline;font-weight:bold; padding:0.3em 2em;}.pagination.text-center.center.bordered {border-radius: 5px;width:max-content;  margin:auto;  border:solid 1px}#com_message:has(strong:empty){display: none;}.content_com {  white-space: pre-wrap;}‹/style›';

		#############################
		# extraction et maj variables
		#############################

		# extraction de l'url
		$url = $this-›plxMotor-›urlRewrite('?static' . $this-›staticId() . '/' . $this-›plxMotor-›aStats[str_pad($this-›staticId(), 3, '0', STR_PAD_LEFT)]['url'] );

		# generation du lien
		$link = $this-›plxMotor-›urlRewrite($url."/page");

		// On calcule le nombre de pages total
		$nbr = count($comments);
		$pages = ceil( $nbr / $bypage);
		$position = 1;
		if($showLast==true) $position = $pages;

		# extraction du numéro de page dans l'URL
		$currentPage = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : $position;

		# indice de début, premier article à afficher
		$start = ($currentPage - 1) * $bypage;

		// Calcul du 1er commentaire de la page
		$premier = ($currentPage * $bypage) - $bypage;
		;

		$pagecomments = array_slice($comments, $premier, $bypage);

		foreach($pagecomments as $com =›$val) { # On boucle sur les commentaires
			$index=array_search( $val['num'], array_column( $comments, 'num' ) );
			echo '‹div id="id-'.$val['num'].'" class="comment '.$val['level'].'"›
			‹div id="com-'.$val['num'].'" data-index="'.$index.'" data-level="'.$val['level'].'"›
			‹small›
			‹a class="nbcom" href="'.$_SERVER['REQUEST_URI'].'#com-'.$val['num'].'" title="#commentaire '.$val['num'].'"›#'.$val['num'].'‹/a›
			‹time datetime="'.$val['date'].'"›'.$val['date'].'‹/time› - '.$val['name'].' '. $this-›getLang('SAID').':
			‹/small›
			‹blockquote›
			‹p class="content_com"›'.$val['content'].'‹/p›
			‹/blockquote›';
			if($this-›plxMotor-›aConf['allow_com']){
				echo '‹a rel="nofollow" href="#form" onclick="replyCom(\''.trim($val['num']).'\');"›'.$this-›getLang('REPLY').'‹/a›';
			}
			echo '‹/div›
			‹/div›';
		}
	?›
	‹!-- Affichage de la pagination --›

	‹?php
		############################
		# Affichage de la pagination
		############################
		if($pages›1){
		?›
		‹nav›
			‹ul class="pagination text-center center bordered"›
				‹!-- Lien vers la page précédente (si on ne se trouve pas sur la 1ère page) --›
				‹?= ($currentPage › 1)  ? "‹li class=\"page-item\" ›‹a href=\"".$link . ($currentPage - 1) ."\" class=\"page-link\"›".L_PAGINATION_PREVIOUS."‹/a›‹/li›" : "" ?›

				‹?php if($intermediaire == true)  {
					for($page = 1; $page ‹= $pages; $page++) {
						# Lien vers chacune des pages (activé si on se trouve sur la page correspondante
						echo '‹li class="page-item ';
						if($currentPage == $page)  echo 'active';
						echo "\"›‹a href=\"".$link.$page ."\" class=\"page-link\"›".$page."‹/a›‹/li›";
					}
				}
				else {
					echo "‹li class=\"page-item page-link  active \"›
					".$currentPage." / ". $pages."
					‹/li›";

				}	?›
				‹!-- Lien vers la page suivante (si on ne se trouve pas sur la dernière page) --›
				‹?= ($currentPage ‹ $pages) ? " ‹li class=\"page-item\"›‹a href=\"".$link.($currentPage + 1 )."\" class=\"page-link\"›".L_PAGINATION_NEXT."‹/a›‹/li›" : "" ?›

			‹/ul›
		‹/nav›
		‹?php	}
	}
	else {
		echo L_NO_COMMENT;
	}

	if (!empty($_SESSION['msgcom'])) {
		$message=$_SESSION['msgcom'];
		$row = str_replace('#com_class', 'alert ' . $color, $row);
		unset($_SESSION['msgcom']);
	}
	else {
		$message='';

	}
	$row = str_replace('#com_message',$message , $row);
?›
‹h3›
	‹?php $this-›lang('WRITE_A_COMMENT') ?›
‹/h3›
‹form id="form" action="‹?php echo $_SERVER['REQUEST_URI']; ?›#form" method="post"›

	‹fieldset›

		‹div class="grid"›
			‹div class="col sml-12"›
				‹label for="id_name"›‹?php $this-›lang('NAME') ?›* :‹/label›
				‹input id="id_name" name="name" type="text" size="20" value="" maxlength="30" required="required" /›
			‹/div›
		‹/div›
		‹div class="grid"›
			‹div class="col sml-12 lrg-6"›
				‹label for="id_mail"›‹?php $this-›lang('EMAIL') ?› :‹/label›
				‹input id="id_mail" name="mail" type="text" size="20" value="" /›
			‹/div›
			‹div class="col sml-12 lrg-6"›
				‹label for="id_site"›‹?php $this-›lang('WEBSITE') ?› :‹/label›
				‹input id="id_site" name="site" type="text" size="20" value="" /›
			‹/div›
		‹/div›
		‹div class="grid"›
			‹div class="col sml-12"›
				‹div id="id_answer"›‹/div›
				‹label for="id_content" class="lab_com"›‹?php $this-›lang('COMMENT') ?›* :‹/label›
				‹textarea id="id_content" name="content" cols="35" rows="6" required="required"›‹/textarea›
			‹/div›
		‹/div›

		‹?php echo $row;
		if($this-›plxMotor-›aConf['capcha']): ?›

		‹div class="grid"›
			‹div class="col sml-12"›
				‹label for="id_rep"›‹strong›‹?php echo $this-›lang('ANTISPAM_WARNING') ?›‹/strong›*‹/label›
				‹?php
					$this-›plxMotor-›plxCapcha = new plxCapcha(); # Création objet captcha
					$this-›capchaQ();
				?›
				‹input id="id_rep" name="rep" type="text" size="2" maxlength="1"  required="required" /›
			‹/div›
		‹/div›

		‹?php endif; ?›

		‹div class="grid"›
			‹div class="col sml-12"›
				‹input type="hidden" id="num" name="num" value="‹?php echo $num + 1 ?›"/›
				‹input type="hidden" id="id_parent" name="parent" value="" /›
				‹input class="blue" type="submit" value="‹?php $this-›lang('SEND') ?›" /›
			‹/div›
		‹/div›

	‹/fieldset›

‹/form›

‹script›
	function replyCom(idCom) {
		document.getElementById('id_answer').innerHTML='‹?php $this-›lang('REPLY_TO'); ?› :';
		document.getElementById('id_answer').innerHTML+=document.getElementById('com-'+idCom).innerHTML;
		document.getElementById('id_answer').innerHTML+='‹input type="hidden" name="index" value="'+document.getElementById('com-'+idCom).getAttribute('data-index') +'"›';
		document.getElementById('id_answer').innerHTML+='‹input type="hidden" name="level" value="'+document.getElementById('com-'+idCom).getAttribute('data-level') +'"›';
		document.getElementById('id_answer').innerHTML+='‹a rel="nofollow" href="#form" onclick="cancelCom()"›‹?php $this-›lang('CANCEL'); ?›‹/a›';
		document.getElementById('id_answer').style.display='inline-block';
		document.getElementById('id_parent').value=idCom;
		document.getElementById('id_content').focus();
	}
	function cancelCom() {
		document.getElementById('id_answer').style.display='none';
		document.getElementById('id_parent').value='';
		document.getElementById('com_message').innerHTML='';
	}
	var parent = document.getElementById('id_parent').value;
	if(parent!='') { replyCom(parent) }
‹/script›

Table des matieres

Les données structurées

Qu'est ce que c'est?

Les données structurées sont des données organisées et stockées dans un format spécifique qui leur permet d'être facilement consultées, modifiées et analysées à l'aide d'outils informatiques.

Les données structurées sont organisées de manière à ce que les machines, y compris les moteurs de recherche, puissent facilement comprendre et extraire les informations qu'elles contiennent. Elles sont souvent présentées sous la forme de balises et de métadonnées qui décrivent le contenu d'une page Web. Les moteurs de recherche utilisent ces balises et ces métadonnées pour mieux comprendre le contenu des pages et les afficher plus efficacement dans les résultats de recherche.

Peut-on les intégrées a PluXml ?

Elles le sont déjà en parties si vous remplissez touts les champs d’édition de vos catégories, pages statiques et articles

Ce sont les champs meta (description et keywords) , title et alt pour vos images, entre autres.

Le format JSON-LD (JavaScript Object Notation for Linked Data) est l'un des formats de données structurées les plus populaires et les plus largement utilisés pour les pages Web. De simple script dans vos thèmes peuvent les générées pour vous

Le format JSON-LD

Ce format JSON-LD permet de décrire le contenu d'une page Web de manière claire et précise en utilisant des balises spéciales appelées "contextes" pour indiquer la signification des données. Les données structurées JSON-LD sont également compatibles avec les directives de Google pour les données structurées, ce qui en fait un choix judicieux pour les propriétaires de sites Web souhaitant optimiser leur référencement.

Comment les intégrées à PluXml

Elles peuvent être injecté dans vos pages par le biais des fichiers de votre thème de la même maniére que les titres et contenus de vos pages sont affichés.

De simples scripts se permettront alors d'extraire ces données de PluXml et de les formatées dans le format JSON-LD.

Quelles types de données structurées puis-je injecter dans mon thème?

Le nom de la page, l'image d'accroche, le nom de l'auteur, la hiérarchie de la page avec le fil d’Ariane, un moteur de recherche interne, etc.

Les scripts déjà disponibles

votre site

Ces données servent à presenter votre site, son type de contenu et et eventuellement l'associé à vos outils de réseaux sociaux

Voici le script à mettre dans le fichier header.php de votre thème.

‹script type="application/ld+json"›{
	"@context": "http://schema.org",
	"@type": "WebSite",
	"name": "‹?php $plxShow-›mainTitle(); ?›",
	"url": "‹?php echo $plxShow-›plxMotor-›racine; ?›",
	/*"sameAs": ["https://facebook.com/page", "https://plus.google.com/site", "https://twitter.com/name"],*/
	‹?php if(isset($plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']) && $plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']-›getParam('method') == 'get' && $plxShow-›plxMotor-›aConf['urlrewriting'])  {	?›
"potentialAction": {
			"@type": "SearchAction",
			"target": "‹?php echo $plxShow-›plxMotor-›racine .$plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']-›getParam('url').'?searchfield={searchfield}' ; ?›",
			"query-input": "required name=searchfield"
	}
‹?php } ?›
}‹/script›

L'association à vos réseaux sociaux ou autres site se trouve sur la ligne sameAs. Pour en faire usage, il faut la dé-commenter (retirer les /* et */ entourant cette ligne et y inserer vos liens en place de ceux en exemple.

Si vous avez installer le plugin de moteur de recherche et que celui-ci est configuré avec la méthode get, il sera alors aussi affiché dans vos métadonnées.

données articles

Voici le code qui va extraire les données principales de vos articles.

‹script type="application/ld+json"›
{
    "@context": "https://schema.org",
    "@type": "Article",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "‹?php echo $plxShow-›plxMotor-›plxRecord_arts-›f('url'); ?›"
    },
    "headline": "‹?php $plxShow-›artTitle(); ?›",
    ‹?php if (trim($plxShow-›plxMotor-›plxRecord_arts-›f('thumbnail'))): ?›
    "image": "‹?php echo $plxShow-›plxMotor-›urlRewrite(trim($plxShow-›plxMotor-›plxRecord_arts-›f('thumbnail'))); ?›",
    ‹?php endif; ?›
    "datePublished": "‹?php $plxShow-›artDate('#num_year(4)-#num_month-#num_dayT#hour:#minute:00+#time'); ?›",
    "dateModified": "‹?php  echo plxDate::formatDate($plxShow-›plxMotor-›plxRecord_arts-›f('date_update'), '#num_year(4)-#num_month-#num_dayT#hour:#minute:00+#time') ?›",
    "author": {
        "@type": "Person",
        "name": "‹?php $plxShow-›artAuthor() ?›"
    }
    ‹?php if (trim($plxShow-›plxMotor-›plxRecord_arts-›f('tags'))): ?›
    ,"keywords":"‹?php $plxShow-›artTags('#tag_name ') ?›"
    ‹?php endif; ?›
}
‹/script›

Il est à insérer dans les fichiers suivant de votre thème (et tout ceux ceux dont le nom commence avec le même mot):

article.php

home.php

categorie.php

tags.php

archives.php

Ce script est à insérer dans la boucle listant vos articles .

Ariane : catégorie

Le fil d'ariane sera spécifique à chaque type de page, celui des catégories dans le fichier categorie.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php $plxShow-›catName(); ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ariane : mots clés

pour les pages des mots clés, voici le script à insérer dans le fichier tags.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php $plxShow-›tagName(); ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ariane :archives

pour les pages des archives, voici le script à insérer dans le fichier archives.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php echo plxDate::formatDate($plxShow-›plxMotor-›cible, $plxShow-›lang('ARCHIVES').' #month #num_year(4)') ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ces scripts sont des bases et peuvent-être complétés et améliorés pour correspondre au mieux aux specifités et contenus de votre site: un blog, un site de recette, un site sur l'immobilier, un site proposant du son ou de la vidéo, les avis d'internaute, les evenements à venir, des lieux, etc.

Vous trouverez des exemples à jsonld.com/ pour différents types de contenus .

Cependant, il est important de noter que le format JSON-LD n'est pas le seul format de données structurées disponible. D'autres formats tels que Microdata et RDFa peuvent également être utilisés pour structurer les données d'une page Web.

Le choix du format de données structurées dépend des besoins spécifiques du site Web et des préférences du propriétaire du site. Il est également important de noter que l'utilisation de données structurées ne garantit pas une meilleure visibilité dans les résultats de recherche, mais peut aider les moteurs de recherche à mieux comprendre le contenu de la page et à l'afficher de manière plus pertinente dans les résultats de recherche.

Table des matieres

Pagination via JavaScript

Dans deux précédents articles nous avons vu comment faire usage de la fonction pagination() de Pluxml ou en créer une de toutes pieces.

Cet article vous propose de voir ou revoir une version Javascript de pagination, que vous pourrez utiliser au sein de vos articles ou pages statiques.

Cette fonction a été proposé par Bazooka07 qui l'a intégré à quelques un de ses thèmes en libre services.

Voyons cette fonction et regardons comment en faire usage.

La fonction

(function() {
  'use strict';

  const list = [...document.body.querySelectorAll('.new-page › h2')];
  if(list.length == 0) { return; }

  if(list.length › 1) {
    // On crée une barre de navigation s'il y a plus de 1 chapitre
    var innerHTML = '';
    list.forEach((item, i) =› {
      const caption = item.textContent;
      innerHTML += `‹button data-page="${i}"›${caption}‹/button›`;
    });

    // On crée la barre de navigation
    const pagination_numbers_container = document.createElement('NAV');
    pagination_numbers_container.className = 'art-nav center';
    pagination_numbers_container.innerHTML = innerHTML;

    const page0 = list[0].parentElement;
    page0.parentElement.insertBefore(pagination_numbers_container, page0);

    // On gére le click sur la barre de navigation
    pagination_numbers_container.addEventListener('click', (evt) =› {
      if(evt.target.hasAttribute('data-page')) {
        evt.preventDefault();
        // On affiche uniquement le chapitre demandé
        [...document.body.querySelectorAll('.new-page.active')].forEach((item) =› {
          item.classList.remove('active');
        });
        const i = parseInt(evt.target.dataset.page);
        list[i].parentElement.classList.add('active');
        // On met en évidence uniquement le bouton du chapitre affiché
        [...pagination_numbers_container.querySelectorAll('.active')].forEach((item) =› {
          item.classList.remove('active');
        });
        event.target.classList.add('active');
      }
    });
  }

  // On allume sur le premier .new-page ( Fire up )
  list[0].parentElement.classList.add('active');
  const btn = document.body.querySelector('.art-nav button');
  if(btn != null) {
    btn.classList.add('active');
  }
})();

C'elle ci peut-être intégrée dans l'article ou chargé depuis une balise ‹script› à partir du thème avant la fermeture de la balise ‹body› si vous avez de nombreux articles et pages en faisant usages.

Tip : integrer cette fonction en fin de document ou sur l'evenement onload(). L'article doit-être déjà chargé pour que le script puissent y extraire les données necessaire à la création de la pagination.

Comment fonctionne le script?

Le script va rechercher les conteneur avec la class .new-page et si ceux-ci ont un h2 en enfant direct.

Si il y plus d'un conteneur correspondant à cette condition, alors une barre de navigation est créée et tous les conteneurs .new-page sont cachés, excepté le premier.

Chaque lien de pagination, prendra le texte contenu par premier titre h2 de chaque conteneur. Au click, il affichera alors le conteneur auquel il correspond en cachant les autres. C'est le cas dans cet article que vous lisez.

Conditions requises

Chaque portion de page devra obligatoirement être incluse dans un conteneur avec la class .new-page ayant un titre ‹h2›.

Le squellette HTML de base à reproduire pour chaque section de votre page est:

  ‹div class="new-page"›
    ‹h2›Chapitre X‹/h2›
    ‹!-- Contenus ici --›
  ‹/div›

Dans votre feuille de style, Pour qu'une seule de ces portion s'affiche, il faudra un minimum de style pour n'affiché qu'un seul de ses éléments:

.new-page:not(.active) {
  display: none;
}

Vous trouverez un exemple modifiable en ligne ici : Exemple en ligne du script.

Une autre version de ce script, légèrement différente, permet de paginer les portions en les regroupant par groupe de 1 à X. configuration à partir de la variable constante (ligne 6) const items_per_page = 1;//indiquez ici le nombre à regrouper.

Notez que ce script , cette fonction JavaScript n'est pas dépendante de Pluxml et peut-être utiliser dans n'importe quel autre contexte. Javascript est interprété par le navigateur du visiteur en fonction du contenu de la page affichée. Que ce soit un autre CMS qui à généré cette page ou un seulement un fichier HTML statique, si la structure qui s'affiche à l'écran correspond à ce que ce script attend, pagination du contenu il y aura.

Table des matieres

Paginer le contenu d'une page statique

Parfois nos pages statiques peuvent nécessiter de voir leur contenu découper en plusieurs pages pour en faciliter la lecture.

Pour ce faire, il faut distribuer dans un tableau, chacun de ces morceaux afin de les trier et générer la pagination adéquate .

Prérequis: un minimum de familiarité avec la syntaxe PHP pour insérer les contenus dans le code.

Le code à mettre en œuvre est relativement simple et court.

Ici, la difficulté pour les plus grand débutants, sera d'insérer les contenus sans casser ce script. Rassurez-vous, le code est commenté pour vous indiquer l'écueil à éviter et comment l'éviter ... si vous lisez les commentaires.

La pagination s'affiche dans la langue configurée, l'affichage des liens "précédent/suivant" peuvent-être ponctués par un lien vers chaque page individuellement en passant la valeur false à true de $intermediaire .

ce qui vous donne ce type d'affichage selon la valeur de $intermediaire : visuel barre de pagination

Voici ce code à copier/coller depuis l'administration de PluXml dans votre page statique. , avec un exemple de contenu (9 morceaux).

‹style›:where(.page-item.page-link.active) { text-decoration:underline;font-weight:bold; padding:0.3em 2em;}.pagination.text-center.center.bordered{border-radius: 5px;width:max-content;  margin:auto;  border:solid 1px;display:flex;align-items: center;list-style:none;gap:0.5em}‹/style›‹?php
# $this is $plxShow
	#########################################
	#configuration
	#########################################
	# nombre de bloc à afficher par page
	$bypage = 1;

	$intermediaire = false; //mettre true au lieu de false pour afficher les liens de chaque page
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	# extraction de l'url
	$url = 'static'.$this-›staticId().'/'.$this-›plxMotor-›aStats[$this-›plxMotor-›cible]['url'];

	# generation du lien
	$link = $this-›plxMotor-›urlRewrite($url."/?page");

	# extraction du numéro de page dans l'URL
	$currentPage = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($currentPage - 1) * $bypage;

	#################################################
	# stockage des blocs de contenus dans un tableau
	# tableau defini dans array(). chaque bloc stocké
	# entre deux apostrophe '
	# separé par une virgule ,
	# si un bloc contient une apostrophe '
	# celle-ci doit-être préceder d'un \
	# depuis l'administration de PluXml,
	# Il faut doubler ce signe en \
	# exemple: l\'exemple. C\'est obligatoire.
	#################################################

$blocks = array(
'‹div› A - un div dans la boucle‹/div›',
'‹div› B - un div dans la boucle‹/div›',
'‹div› C - un div dans la boucle‹/div›',
'‹div› D - un div dans la boucle‹/div›',
'‹div› E - un div dans la boucle‹/div›',
'‹div› F - un div dans la boucle‹/div›',
'‹div› G - un div dans la boucle‹/div›',
'‹div› H - un div dans la boucle‹/div›',
'‹div› I - un div dans la boucle, c\'est le dernier‹/div›'
)
;

// Calcul du 1er article de la page
$premier = ($currentPage * $bypage) - $bypage;

// On calcule le nombre de pages total
$nbr = count($blocks);
$pages = ceil( $nbr / $bypage);

$blocks = array_slice($blocks, $premier, $bypage);
?›
‹!-- affichage des blocs selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	foreach ($blocks as $key) {

 echo $key;
	}
?›
‹/div›
‹!-- fin affichage des blocs --›

‹!-- Affichage de la pagination --›
‹?php
	############################
	# Affichage de la pagination
	############################
?›
‹nav›
	‹ul class="pagination text-center center bordered"›
		‹!-- Lien vers la page précédente (si on ne se trouve pas sur la 1ère page) --›
		‹?= ($currentPage › 1)  ? "‹li class=\"page-item\" ›‹a href=\"".$link . ($currentPage - 1) ."\" class=\"page-link\"›".L_PAGINATION_PREVIOUS."‹/a›‹/li›" : "" ?›

		‹?php if($intermediaire == true)  {
		for($page = 1; $page ‹= $pages; $page++) {
		  # Lien vers chacune des pages (activé si on se trouve sur la page correspondante
		  echo '‹li class="page-item ';
		  if($currentPage == $page)  echo 'active';
		  echo "\"›‹a href=\"".$link.$page ."\" class=\"page-link\"›".$page."‹/a›‹/li›";
			}
		}
		else {
		 echo "‹li class=\"page-item page-link  active \"›
				".$currentPage." / ". $nbr."
			‹/li›";

		}	?›
		  ‹!-- Lien vers la page suivante (si on ne se trouve pas sur la dernière page) --›
		 ‹?= ($currentPage ‹ $pages) ? " ‹li class=\"page-item\"›‹a href=\"".$link.($currentPage + 1 )."\" class=\"page-link\"›".L_PAGINATION_NEXT."‹/a›‹/li›" : "" ?›

	‹/ul›
‹/nav›

Table des matieres

Utiliser la fonction pagination() dans une page statique.

Dans nos pages: d'accueil, catégorie, mots clés, archives, ... il y a une fonction de pagination qui permet de dispatcher l'ensemble des articles correspondant sur une ou plusieurs pages aux besoins.

Cet article vous propose de voir comment intégrer cette fonction dans une page statique en extrayant les articles d'une catégorie et en choisissant le nombre à afficher par pages.

Mais pour quel usage, car PluXml le fait déjà , non ?

Pluxml permet de masquer à l'affichage les liens vers une ou plusieurs catégories, vous pouvez donc cacher une catégorie des menus et la présenter au travers d'une page statique en reconfigurant l'affichage à votre guise.

Pour cela il nous faut déclarer quelques variables pour ensuite filtrer et boucler sur les articles à afficher.

Pour faire concis, voici le code de base à utiliser avec quelques commentaires pour vous aider à suivre la logique du script.

‹?php
# $this is $plxShow
	#########################################
	#configuration : categorie(s) et nb/page
	#########################################
	# nombre d'article à afficher par page
	$bypage = 6;
	# choix de la categorie
	$catId = '001';
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	#mode de tri
	$tri = $this-›plxMotor-›aCats[$catId]['tri'];

	# filtrage article par catégorie(s)
	$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$catId.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

	# extraction du numéro de page dans l'URL
	$page = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($page - 1) * $bypage;

	# var publi
	$publi = 'before';

	#clone du tableau des articles
	$plxGlob_arts = clone $this-›plxMotor-›plxGlob_arts;

	# filtrage du tableau cloné
	$aFiles =  $plxGlob_arts-›query($motif, 'art', $tri, $start, $bypage, $publi);

	# extraction/maj variables
	$this-›plxMotor-›motif = $motif;
	$this-›plxMotor-›bypage = $bypage;
	$this-›plxMotor-›page = $page;

	# On boucle sur les articles filtrés
	$artsList = [];
	foreach($aFiles as $v){
			$art = $this-›plxMotor-›parseArticle(PLX_ROOT . $this-›plxMotor-›aConf['racine_articles'] . $v);
			if(!empty($art)) {
					$artsList[] = $art;
			}
	}

	#maj du tableau des données des articles filtrés
	$this-›plxMotor-›plxRecord_arts = new plxRecord($artsList);
?›
‹!-- affichage du ou des articles selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	while($this-›plxMotor-›plxRecord_arts-›loop()) {
?›
	‹article›
		‹h2›
				‹?php $this-›artTitle(); ?›
		‹/h2›
				‹?php $this-›artThumbnail(); ?›
		‹div›
				‹?php $this-›artChapo(); ?›
		‹/div›
	‹/article›
‹?php
	}
?›
‹/div›
‹!-- fin block affichage article

‹!-- Affichage de la pagination --›
    ‹nav  class="pagination text-center"›
‹?php
	############################
	# Affichage de la pagination
	############################
	$this-›pagination();
?›
    ‹/nav›‹!-- fin block affichage pagination--›

Vous pouvez donc configurer la catégorie à filtrer et le nombre d'article par page

L'affichage des articles se fait dans la boucle, vous pouvez aussi choisir les données des articles à afficher ainsi que la structure HTML de façon à ce qu'elle reflète celle de votre thème.

Table des matieres

Choisir des thèmes ou apprendre à les mettre à jour

Tous les amis de Pluxml savent que les versions de ce CMS montent plus vite que les mises à jours des plugins et des thèmes existants ce qui peut être galère pour les débutants qui découvrent notre sympathique gestionnaire de sites.

Mais l'un d'entre-nous a enfin eu l'idée de mettre en ligne une sélection de thèmes (templates) mis à jour pour la dernière version PluXml 5.8.9 mais surtout d'écrire des tutoriels pour apprendre à ses visiteurs de le faire eux-même. :)

Son site, https://pluxthemes.com est à visiter absolument et comme ça, si vous voulez mettre rapidement en ligne un site propulsé par Pluxml, il ne vous faudra que quelques minutes pour choisir le template qui vous va bien et/ou apprendre les bases de la création et mise à jour des thèmes. Ce n'est pas si difficile que cela. ;)

De plus, le gars est plein d'humour et ses textes se lisent avec délectation.

gcyrillus-nomade, c'est le nom avec lequel il signe sur les forums, bien qu'il fasse en privé le modeste, est doué pour pas mal de choses et, sur cet espace depuis si longtemps, est bénévolement à l'origine que beaucoup de matériels que nous utilisons tous les jours pour la création et construction de nos sites.

Il connaît tout de Pluxml.

Quand vous aurez l'occasion de communiquer avec lui, dites-lui "Bonjour" de ma part. ;)

https://pluxthemes.com

Table des matieres

Thème par défaut: installer une bannière sous le logo de PluXml

Nous allons voir comment installer une image en guise de bannière dans le thème par défaut de PluXml 5.6, de manière à remplacer :

par :

Pour rappel, le thème par défaut est dans le dossier: /themes/defaut/

Commençons par copier notre banière banner.jpg, dans le dossier /themes/defaut/img/

J'ai pris une image au format jpg de 640x240. Veillez tout de même à ne pas prendre une image trop lourde. N'hésitez pas à utiliser des services comme https://tinyjpg.com/ pour optimiser le poids de vos images que vous mettez en ligne sur votre site, ceci pour gagner en vitesse d'affichage et en bande passante: pensez à vos visiteurs !

Éditez le fichier /themes/defaut/css/theme.css

Localiser le code suivant:

.header {
	background-color: #1a6699;
	color: #fff;
	padding-bottom: 6rem;
	padding-top: 6rem;
	text-align: center;
}

et remplacer la ligne

background-color: #1a6699;

par

background: url(../img/banner.jpg) top left repeat-x;

Pour afficher une bannière centrée sans qu'elle se répète horizontalement, utilisez à la place le code suivant:

background: url(../img/banner.jpg) top center no-repeat;

Nous remplaçons tout simplement la couleur de fond de l'entête du site par notre image

url : correspond au lien relatif de l'image par rapport au fichier css édité

top left : permet de positionner l'image en haut à gauche de la balise ‹div› identifiée par la classe css .header

repeat-x : permet de répéter l'image sur toute la largeur pour qu'elle occupe horizontalement tout l'écran

Si vous souhaitez masquer le titre du site et sa description, rajoutez à la fin du fichier theme.css

.header h1,
.header h2 {
	display: none;
}

Il est préférable de masquer plutôt que de supprimer le titre du site, pour laisser l'information disponible et accessible aux moteurs de recherche. Dans ce cas là vous pouvez toujours rajouter le titre du site directement sur la bannière en utilisant un logiciel de retouche d'image.

crédit photo: pixabay CC0 Public Domain

Table des matieres

Une barre des menus fixe

Pour remplacer la barre actuelle des menus dans le thème par défaut de PluXml 5.6 et la rendre fixe, éditez le fichier themes/defaut/css/theme.css et remplacer les lignes suivantes:

.nav {
	background-color: #fff;
	height: 4rem;
	text-align: left;
	margin-top: 1rem;
}

par

.nav {
	background-color: #fbfbfb;
	height: 4rem;
	text-align: center;
	padding-top: 0.5rem;
	position: fixed;
	width: 100%;
	z-index: 1;
	border-bottom: 1px #eee solid;
}

La barre sera ainsi fixe en haut de l'écran lors de l'utilistion du scroll vertical à la souris et les menus seront centrés.

Table des matieres

Renommer un fichier dans PluXml à partir du gestionnaire de médias

Avec la sortie de PluXml 5.6, une nouvelle fonctionnalité, certes basique mais qui peut être très utile, est apparue dans le gestionnaire de médias, celle permettant de renommer facilement un fichier.

Comme le montre l'animation ci-dessous, en cliquant sur la petite icône "Renommer fichier" vous pourrez saisir le nouveau nom du fichier à partir d'une fenêtre de dialogue.

Notez qu'il n'est pas nécessaire de saisir l'extension du fichier. Si aucune extension est saisie, PluXml ajoutera automatiquement l'extension existante du fichier à la fin du nouveau nom.

Petite remarque, pensez qui si l'image que vous renommez est utilisée dans un article, le fait de changer son nom provoquera une erreur d'affichage au niveau de l'article car l'ancien fichier ne sera plus trouvé: changer le nom physique d'un fichier, ne change pas son lien dans les articles.

Table des matieres

Afficher les catégories sous forme de menus déroulants

Nous allons voir en 2 étapes comment afficher la liste des catégories dans un menu déroulants, dans la barre des menus des page statiques

1ère étape: modification du fichier thème

Éditer le fichier header.php de votre thème (exemple /themes/defaut/header.php)

Localisez les lignes suivantes

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li class="#static_status" id="#static_id"›‹a href="#static_url" title="#static_name"›#static_name‹/a›‹/li›'); ?›
‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›

Remplacez les par le code suivant

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li class="#static_status" id="#static_id"›‹a href="#static_url" title="#static_name"›#static_name‹/a›‹/li›'); ?›
‹li class="submenus"›
	‹a href="#"›‹?php $plxShow-›lang('CATEGORIES') ?› ▼‹/a›
	‹ul›
		‹?php $plxShow-›catList('','‹li id="#cat_id"›‹a class="#cat_status" href="#cat_url" title="#cat_name"›#cat_name‹/a› (#art_nb)‹/li›'); ?›
	‹/ul›
‹/li›
‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›

2ième étape: modification de la feuille de style

Éditer le fichier theme.css de votre thème (exemple /themes/defaut/css/theme.css)

Rajoutez à la fin du fichier les lignes suivantes

.submenus ul {
    position: relative;
    left: -9999px;
    float: left;
	margin: 0;
	padding: 0;
    list-style: none;
	z-index: 999;
}
.submenus:hover ul {
	left: 0;
	color: #fff;
	background-color:#000;
}
.submenus:hover ul li {
	font-size: 0.9rem;
	clear: both;
	float: left;
	padding: 2px 10px 2px 10px;
	width: 100%;
}
.submenus:hover ul li a {
    display: inline-block;
	margin: 0;
	padding: 3px 0 3px 0;
}
.submenus:hover ul li a:hover {
	text-decoration: none;
}

Et voilà, à vous d'adapter en fonction de vos besoins et de votre thème.

Table des matieres

Afficher un commentaire au hasard dans un article

Au lieu d'afficher tous les commentaires d'un article, voici un bout de code à utiliser pour n'afficher qu'un seul article pris au hasard.

Éditez le fichier commentaires.php présent dans le dossier de votre thème (exemple: /themes/defaut/commentaires.php)

en dessous de la ligne

‹?php if($plxShow-›plxMotor-›plxRecord_coms): ?›

copiez le code suivant

‹?php
	$comments = $plxShow-›plxMotor-›plxRecord_coms;
	$comment[0] = $comments-›result[rand(0, $comments-›size -1)];
	$plxShow-›plxMotor-›plxRecord_coms = new plxRecord($comment);
?›

Table des matieres

Connaître le statut d'un plugin coté visiteur

Bout de code donné récemment sur le forum de http://pluxml.org pour tester l'activation d'un plugin coté visiteur.

‹?php
if(isset($plxMotor-›plxPlugins-›aPlugins['nom_du_plugin']))
	echo "plugin actif";
else
	echo "plugin inexistant ou inactif";
?›

Remplacer "nom_du_plugin" par le nom du plugin à tester (ex: plxMyContact)

Quand un plugin est activé, il apparaît dans le tableau $plxMotor-›plxPlugins-›aPlugins
Il suffit alors de tester si l'index de tableau existe.

PS: Pour le même test coté administration, remplacer $plxMotor par $plxAdmin

Table des matieres

Remplacer le lien "Lire la suite" par une image

Seules quelques lignes de code css sont à rajouter dans la feuille de style de son thème pour remplacer le lien "Lire la suite" par une image. Voyons en détail comment faire...

Ce tuto se base sur le thème par défaut de PluXml.

Étape 1: copiez votre image dans le dossier themes/defaut/img

Pour moi ce sera le fichier more.png

Étape 2: éditez le fichier themes/defaut/css/theme.css

À la fin du fichier, rajoutez les lignes suivantes:

.more a {
	background:url(../img/more.png) no-repeat;
	display: block;
	height: 32px;
	width: 32px;
	text-indent: -999px;
}

Explications

Ce que vous devez modifier en fonction de votre image:

1. Emplacement et nom de l'image

La ligne suivante permet de définir l'emplacement et le nom du fichier à utiliser

	background:url(../img/more.png) no-repeat;

adapter si besoin: ../img/more.png

2. Dimension de l'image

Spécifiez les dimensions de l'image. Ici j'ai utilisé une image de 32x32 pixels. Modifier donc les valeurs de la hauteur et de la largeur en fonction de la taille de votre image.

	height: 32px;
	width: 32px;

La ligne suivante permet d'afficher correctement l'image sur la hauteur avec la valeur spécifiée précédemment.

	display: block;

3. Masquer le lien "Lire la suite"

Ici il n'y a rien à changer. Cette ligne sert juste à déplacer le texte "Lire la suite" à un endroit de l'écran où le texte ne sera pas visible.

	text-indent: -999px;

Et voilà... rien de plus !

Table des matieres

Pages statiques sous forme de menus déroulant en pur css

Envie d'afficher la liste des menus des pages statiques sous forme de menus déroulants ?

Comme on essaye toujours de faire les choses simples avec PluXml avec un minimun de modification, voici comment réaliser des listes déroulantes à partir des groupes des menus des pages statiques avec uniquement du code css.

Commençons par un petit rappel, en voyant comment utiliser la notion des groupes des pages statiques.

Pour pouvoir afficher des listes déroulantes, il faut regrouper les pages par groupe.
Dans la gestion des pages statiques, sur l'écran d'administration, utiliser la colonne Groupe pour regrouper les pages qui seront visibles dans le même menu déroulant. Le nom du groupe sera le nom du menu déroulant

Une fois que vos pages sont créées et triées (colonne Ordre), reportez les modifications suivantes:

Attention: PluCSS requis.

Éditer le fichier header.php du thème par défaut de PluXml (dossier: themes/defaut/)

Remplacez la ligne

‹div class="responsive-menu"›

par

‹div id="dropdown-nav" class="responsive-menu"›

Remplacez la ligne

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li class="#static_status" id="#static_id"›‹a href="#static_url" title="#static_name"›#static_name‹/a›‹/li›'); ?›

par

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'), '‹li class="#static_status" id="#static_id"›‹a href="#static_url" title="#static_name"›#static_name‹/a›‹/li›', '‹div›#group_name‹/div›'); ?›

Éditez la feuille de style de votre thème. Pour le thème par défaut, ouvrez le fichier theme.css (dossier: themes/defaut/css/)
A la fin du fichier ajoutez les lignes suivantes

#dropdown-nav ul li div {
	color: #eee;
	padding: .425rem .7rem;
}
#dropdown-nav ul li {
	position:relative;
}
#dropdown-nav ul ul {
	display:none;
	position:absolute;
	top:100%;
	left:0;
	background:#f6f6f6;
	border: 1px solid #efefef;
	padding:0;
	z-index: 9999;
}
#dropdown-nav ul ul a {
	color: #444;
}
#dropdown-nav ul ul li {
	float:none;
	width:200px;
}
#dropdown-nav ul ul li.active a {
	background:transparent;
}
#dropdown-nav ul ul li:hover {
	background:#ccc;
}
#dropdown-nav ul li:hover › ul {
	display:block;
}

@media (max-width: 768px) {
	#dropdown-nav ul {
		background:#f6f6f6;
	}
	#dropdown-nav ul li.active {
		background-color: #258fd6;
		width: 100%;
	}
	#dropdown-nav ul li.active a {
		color: #fff;
	}
	#dropdown-nav ul li:hover  {
		background:#ccc !important;
		width: 100%;
	}
	#dropdown-nav ul li li:hover a {
		color: #fff;
	}
	#dropdown-nav ul ul {
		width: 100%;
		border: none;
	}
	#dropdown-nav ul li div {
		color: #444;
	}
	#dropdown-nav ul li a {
		color: #444;
	}
}

Voilà, c'est fini. Enjoy !

EDIT: 05/07/2016: ajout du code css pour la partie responsive:
@media (max-width: 768px) { ... }

EDIT: 03/05/2017: mise en surbrillance du menu parent des groups de pages statiques:
La structure html des menus déroulant générée par PluXml 5.5 ne permet pas de mettre en subrillance le menu parent des groupes de pages statiques en utilisant que du code css. L'alternative est d'utiliser quelques lignes de javascript.
L'ensemble de ces modifications sont listées ici : fichier texte

Table des matieres

Ajouter une aide aux thèmes de PluXml 5.5+

Avec le gestionnaire de thème apparu depuis la version 5.5 de PluXml, il est possible d'ajouter une aide aux thèmes, visible sous forme d'un lien Aide au niveau du descriptif du thème. Cet aide peut servir par exemple à indiquer à l'utilisateur des pré-requis, comme les plugins à installer pour le bon fonctionnement du thème.

Nous allons voir quel fichier utiliser et comment le renseigner pour afficher l'aide d'un thème.

Le fichier d'aide est dépendant de la langue sélectionnéee dans PluXml, soit par le paramètre général que l'on trouve dans "Paramètres › Configuration de base › Langue par défaut du site", soit en fonction des préférences de l'utilisateur connecté par rapport à la langue choisie dans son profil à partir du menu "Profil › Langue utilisée dans l'administration".

Le fichier d'aide est un fichier .php stocké dans le dossier themes/defaut/lang, si on parle ici du thème par défaut.

Son nom est normalisé de la façon suivante:

fr-help.php : pour le fichier d'aide en français

en-help.php : pour le fichier d'aide en anglais

Le nom du fichier est donc préfixé par les 2 caractères identifiant la langue (fr, en, de, ru, etc...)

fr-help.php

Concernant le contenu de ce fichier, voici un exemple:

‹?php if (!defined('PLX_ROOT')) exit; ?›
‹p›Aucune aide disponible‹/p›

Vous pouvez y écrire dedans toute l'aide nécessaire au format html pour l'installation et la configuration de votre thème.

Seule la première ligne est fortement recommandée pour des raisons de sécurité.

‹?php if (!defined('PLX_ROOT')) exit; ?›

Cette ligne interdit de visualiser le contenu du fichier si on tape directement dans son navigateur l'url complète pour accéder au fichier d'aide. Avec cette ligne, le contenu ne pourra être lu qu'en passant par le gestionnaire de thèmes en cliquant sur le lien Aide.

Table des matieres

Positionner l'image d'accroche à gauche ou à droite du chapô

L'image d'accroche est une nouvelle fonctionnalité de PluXml 5.5 qui permet d'illustrer un article avec une image. L'ajout de l'image se fait facilement grâce aux champs prévus au niveau de l'écran de rédaction d'un article.

Une fois la mise en forme de l'affichage mise en place au niveau du thème, la présentation sera identique pour chaque article. Ce qui facilite la publication pour avoir une présentation homogène à chaque article.

Nous allons voir comment positionner cette image d'accroche à droite ou à gauche du chapô, simplement à partir de quelques lignes de code css à rajouter dans le fichier theme.css de son thème

Le code css donné ci-dessous est à rajouter à la fin du fichier theme.css qui se trouve pour le thème par défaut dans le dossier: themes/defaut/css

Image d'accroche à gauche du chapô

/* image d'accroche à gauche du chapo */
.article img.art_thumbnail {
    display: inline-block;
    float: left;
    padding: 5px 10px 10px 0;
}

Image d'accroche à droite du chapô

/* image d'accroche à droite du chapo */
.article img.art_thumbnail {
    display: inline-block;
    float: right;
    padding: 5px 0 10px 10px;
}

Table des matieres

Gestionnaire de thème de PluXml

Depuis la version 5.5, un gestionnaire de thème est disponible dans PluXml à partir du menu Paramètres › Thèmes

Les thèmes disponibles sont visibles sous forme de liste avec une image de prévisualisation et différentes informations (auteur, n° de version, etc...). On peut donc choisir et activer le thème à utiliser coté visiteur. Le thème activé est toujours le premier de la liste.

Pour les développeurs, voici les consignes à respecter pour l'image de prévisualisation et comment renseigner le fichier infos.xml qui contient les informations sur le thème.

Tout d'abord l'image de prévisualisation est une image jpg, png ou gif, de préférence de taille 200x200 pixels. Elle est à copier à la racine du dossier du thème sous le nom preview.png, preview.jpg ou preview.gif en fonction de son format et de l'extension du fichier.

Concernant les informations, elles sont à mettre dans un fichier infos.xml, lui aussi à copier à la racine du dossier du thème.
Voilà la structure du fichier à respecter:

‹?xml version="1.0" encoding="UTF-8"?›
‹document›
	‹title›‹![CDATA[defaut]]›‹/title›
	‹author›‹![CDATA[PluXml]]›‹/author›
	‹version›5.5‹/version›
	‹date›09/11/2015‹/date›
	‹site›http://www.pluxml.org‹/site›
	‹description›‹![CDATA[Thème par défaut de PluXml 5.5]]›‹/description›
‹/document›

Les balises suivantes sont à renseigner:

title: titre du thème

author: nom de l'auteur du thème

version: numéro de version du thème

date: date de sortie du thème

site: site de l'auteur du thème

description: texte descriptif sur le thème

Exemple de fichier vièrge à compléter:

‹?xml version="1.0" encoding="UTF-8"?›
‹document›
	‹title›‹![CDATA[]]›‹/title›
	‹author›‹![CDATA[]]›‹/author›
	‹version›‹/version›
	‹date›‹/date›
	‹site›‹/site›
	‹description›‹![CDATA[]]›‹/description›
‹/document›

En respectant ces consignes, le thème développé sera correctement listé dans le gestionnaire

Table des matieres

Mise en place de l'indentation des commentaires dans un ancien thème

Vous venez de mettre à jour votre PluXml en version 5.5, et l'indentation des commentaires n'est pas visible.
Normal, votre thème doit être modifié pour ajouter l'affichage des commentaires imbriqués.
Je vous donne les 3 étapes de base pour faire la migration de l'affichage des commentaires et profiter de cette nouvelle fonctionnalité propre à PluXml 5.5

1. Copiez le fichier commentaires.php du thème par défaut de PluXml 5.5 dans le dossier de votre thème pour remplacer et écraser celui existant

Attention, si vous avez personnalisé le fichier commentaires.php vous allez perdre les modifications en écrasant votre version par celle de PluXml 5.5. Après avoir remplacé ce fichier il faudra reporter dedans vos propres modifications pour retrouver votre visuel, tout en gardant l'imbrication des commentaires.

2. Copiez le dossier lang du thème par de PluXml 5.5 dans le dossier de votre thème pour remplacer et écraser celui existant.

3. Éditez le fichier /themes/‹mon-theme›/css/theme.css et ajoutez à la fin du fichier le code suivant (remplacez ‹mon-theme› par le nom de votre thème):

.level-0 {
	margin-left: 0;
}
.level-1 {
	margin-left: 50px;
}
.level-2 {
	margin-left: 100px;
}
.level-3 {
	margin-left: 150px;
}
.level-4 {
	margin-left: 200px;
}
.level-5,
.level-max {
	margin-left: 250px;
}
#id_answer {
	margin-bottom: 10px;
	padding:15px;
	border:1px solid #eee;
	width:100%;
	background:#fafafa;
	display:none;
}
@media (max-width: 767px) {
	.level-1,
	.level-2,
	.level-3,
	.level-4,
	.level-5,
	.level-max {
		margin-left: 5px;
	}
}

Il se pourra que ces simples 3 étapes ne suffisent pas pour voir l'indentation des commentaires. Tout dépendra de votre thème et de son niveau de personnalisation par rapport au thème par défaut.
Les manipulations données ici permettent de passer facilement un thème à partir de PluXml 5.4.
En fonction de la complexité de votre thème d'autres règles css seront à écrire ou à modifier.
En cas de problème n'hésitez pas à venir sur le forum de PluXml pour trouver de l'aide.

Table des matieres

Plugin CKEditor pour PluXml: ajoutez un compteur de mot

Pour rappel CKEditor est un éditeur de texte disponible sous forme de plugin pour PluXml facilitant la rédaction des articles. Le plugin est disponible sur la page dédiée des Plugins de pluxopolis.net.

CKEditor dispose lui aussi d'un système de plugin interne permettant de rajouter des nouvelles fonctionnalités. Nous allons voir comment rajouter un compteur de mot pour la version 4.5.3 du plugin CKEditor pour PluXml.

Le nombre de mots est affiché en bas à droite de l'éditeur

D'autres plugins dans le centre de ressources et téléchargements Pluxopolis

Table des matieres

Afficher une icône devant les liens des flux rss

Si vous utiliser le thème par défaut de PluXml, deux liens pour accéder aux flux rss des articles et des commentaires sont visibles dans la sidebar.

Nous allons voir comment ajouter rapidement une icône devant ces liens afin d'obtenir l'affichage suivant:

Le code utilisé pour afficher les liens rss dans la sidebar se trouve dans le fichier themes/defaut/sidebar.php:

‹h3›
	RSS
‹/h3›
‹ul class="rss-list unstyled-list"›
	‹li›‹a href="‹?php $plxShow-›urlRewrite('feed.php?rss') ?›" title="‹?php $plxShow-›lang('ARTICLES_RSS_FEEDS'); ?›"›‹?php $plxShow-›lang('ARTICLES'); ?›‹/a›‹/li›
	‹li›‹a href="‹?php $plxShow-›urlRewrite('feed.php?rss/commentaires'); ?›" title="‹?php $plxShow-›lang('COMMENTS_RSS_FEEDS') ?›"›‹?php $plxShow-›lang('COMMENTS'); ?›‹/a›‹/li›
‹/ul›

Nous allons utiliser la classe css rss-list de la balise ‹ul› pour rajouter aux balises ‹a› qui composent la liste html une image.

Éditez le fichier themes/defaut/css/theme.css et ajouter à la fin du fichier le code suivant:

.rss-list a::before{
	margin: 0 5px 0 0;
	content: url('../img/rss.png');
	vertical-align: -10%;
}

Récupérez l'icône ci-dessous et copiez la dans le dossier themes/defaut/img (faire bouton droit de la souris sur l'image et sélectionner le menu "Enregistrer l'image sous").

Voilà, c'est fini !

Table des matieres

Afficher une mention pendant 7 jours pour les nouveaux commentaires

Dans un précédent article, je vous avais montré comment afficher une mention pendant 7 jours pour les nouveaux articles. Sur le même principe je vous propose de voir maintenant comment afficher une mention pendant 7 jours pour les nouveaux commentaires.

L'idée est donc identique: afficher une icone "NEW" à coté des commentaires datés de moins de 7 jours. Pour mettre en place la modification, éditez le fichier commentaires.php de votre thème, et en dessous de la ligne:

		‹div id="‹?php $plxShow-›comId(); ?›" class="comment"›

ajoutez le code suivant:

			‹?php
			$ndays = 7;
			if(floor((strtotime(date('YmdHi')) - strtotime($plxShow-›plxMotor-›plxRecord_coms-›f('date'))) / (60*60*24)) ‹ $ndays) : ?›
				‹p›‹img src="‹?php $plxShow-›template() ?›/img/new.png" alt="" title="" /›‹/p›
			‹?php endif; ?›

Si vous souhaitez augmenter ou réduire la période de 7 jours, changez la valeur 7 dans la ligne suivante:

	$ndays = 7;

Vous pouvez récupérer l'icone "NEW" ci-dessous et la copier dans le dossier img de votre thème. Par exemple dans: /theme/defaut/img/

Table des matieres

Gestionnaire de médias: afficher par défaut "Pas de miniature"

Dans le gestionnaire de médias, sur l'écran pour envoyer des fichiers sur le serveur, une taille pour les miniatures est cochée par défaut. Par exemple comme ceci:

Pour changer la sélection et avoir par défaut "Pas de miniature", aller dans les Paramètres › Options d'affichage et pour la ligne Créer miniatures passer la valeur à Non

De retour dans le gestionnaire de médias c'est la ligne Pas de miniature qui sera maintenant cochée par défaut

Table des matieres

Thème Navan pour PluXml 5.4+

Thème Navan réalisé avec PluCSS

Démonstration
Téléchargement

Table des matieres

Plugins: afficher les boutons dans la barre d'action

Si vous développez des plugins pour PluXml, voici comment afficher les boutons dans la barre d'action sur les écrans d'administration ou de configuration des plugins.

La méthode est très simple. Il suffit d'englober les boutons dans une balise ‹p› qui a comme classe css in-action-bar

‹p class="in-action-bar"›
	‹?php echo plxToken::getTokenPostMethod() ?›
	‹input type="submit" name="submit" value="Enregistrer" /›
‹/p›

La classe css in-action-bar est automatiquement reconnue par PluXml car elle fait partie intégrante des feuilles de style utilisées par PluXml.

Exemple complet d'une page de configuration d'un plugin pour bien situer le contexte

‹?php if(!defined('PLX_ROOT')) exit; ?›
‹?php

# Control du token du formulaire
plxToken::validateFormToken($_POST);

if(!empty($_POST)) {
	$plxPlugin-›setParam('param1', $_POST['param1'], 'string');
	$plxPlugin-›setParam('param2', $_POST['param2'], 'cdata');
	$plxPlugin-›saveParams();
	header('Location: parametres_plugin.php?p=plxMyTest');
	exit;
}
?›

‹form class="inline-form" action="parametres_plugin.php?p=plxMyTest" method="post" id="form_plxMyTest"›
	‹fieldset›
		‹p›
			‹label for="id_param1"›Paramètre 1 :‹/label›
			‹?php plxUtils::printInput('param1',$plxPlugin-›getParam('param1'),'text','20-20') ?›
		‹/p›
		‹p›
			‹label for="id_param2"›Paramètre 2 :‹/label›
			‹?php plxUtils::printInput('param2',$plxPlugin-›getParam('param2'),'text','20-20') ?›
		‹/p›

		‹p class="in-action-bar"›
			‹?php echo plxToken::getTokenPostMethod() ?›
			‹input type="submit" name="submit" value="Enregistrer" /›
		‹/p›
	‹/fieldset›
‹/form›

Table des matieres

Inclure une page statique à partir de son titre ou de son url

Depuis la version 5.4 de PluXml, il est possible d'afficher le contenu d'une page statique à partir de son titre ou de son url.

Rappel de l'utilisation de la fonction staticInclude() permettant d'afficher une page statique à partir de son identifiant mais aussi maintenant comment l'utiliser à partir de son titre ou de son url.

Pour ceux qui connaisse la fonction staticInclude(), vous savez déjà qu'il est possible d'afficher le contenu d'une page statique un peu n'importe où sur son site. Il suffit de passer en paramètre de cette fonction le numéro d'identification de la page, numéro à récupérer dans la colonne Identifiant page dans la gestion des pages statiques de l'administration.

Exemple 1: à partir du numéro d'identification sur 3 chiffres

‹?php $plxShow-›staticInclude('001') ?›

Exemple 2: sans les zéros significatifs (en tapant la valeur '1', PluXml sait qu'il s'agit de la page '001')

‹?php $plxShow-›staticInclude('1') ?›

Depuis la version 5.4 de PluXml, il est également possible d'afficher le contenu d'une page statique, toujours avec la fonction staticInclude(), mais à partir de son titre ou de son url.

Exemple 3: à partir du titre de la page

‹?php $plxShow-›staticInclude('Titre de la page') ?›

Le titre de la page est bien sur ce que vous avez saisi dans la colonne Titre lors de la création de la page.

Exemple 4 : à partir de l'url de la page

‹?php $plxShow-›staticInclude('titre-de-la-page') ?›

L'url est déduite à partir du titre de la page, mais il est possible d'avoir un titre qui ne correspond à l'url, ou inversement, car ces deux informations sont éditables dans la gestion des pages statiques. Les champs Titre et Url sont des zones de saisie libre.

Les lignes de codes données ci-dessus peuvent être utilisées dans les fichiers .php de votre thème, à l'endroit où vous souhaitez inclure et afficher le contenu d'une page statique.

Table des matieres

Des thèmes pour personnaliser la zone d'administration

Avec la sortie de la version 5.4 de PluXml, une nouvelle fonctionnalité est apparue, celle de pouvoir créer des thèmes pour la zone d'administration et de les déclarer facilement dans les paramètres.

Je vous propose donc les 4 thèmes suivant et de voir comment les installer:

Style 1

Style 2

Style 3

Style 4

Pour commencer télécharger le kit complet contenant l'ensemble des 4 thèmes à partir de ce lien:

Télécharger le pack 1 complet

Décompresser le fichier .zip et copier le dossier adminthemes dans le dossier data de votre PluXml.
Je préconise l'utilisation du dossier data (dossier contenant toutes les données de PluXml)

Pour utiliser un des 4 thèmes, allez dans les paramètres de la zone d'administration dans:

Administration › Paramètres › Configuration avancée

et renseignez le champ "Emplacement et nom du fichier css personnel pour la personnalisation de l'interface d'administration" avec l'une des valeurs suivantes:

data/adminthemes/pluxopolis/style1.css

data/adminthemes/pluxopolis/style2.css

data/adminthemes/pluxopolis/style3.css

data/adminthemes/pluxopolis/style4.css

Chaque thème est caractérisé par son fichier style.css et indexé par un numéro 1, 2, 3 ou 4. Ils utilisent une fonte qui ne contient que les icônes utilisées devant les menus de la sidebar. De cette façon avec seulement une dizaine de Ko par thème, on reste dans l'esprit de PluXml avec le minimum de légèreté.
Les fichiers css contiennent les déclarations et la surcharge des classes css utilisées dans le visuel qui repose sur le framework css PluCSS. Ils vous serviront de bases pour comprendre le fonctionnement et créer pourquoi pas votre propre thème.

A vous de choisir le thème que vous appréciez le plus.

Retrouvez l'ensemble des thèmes de Pluxopolis sur la page Thèmes.

EDIT 23/07/2015: Nouveau - Pack n°2: 4 thèmes supplémentaires

Table des matieres

Ajoutez une lettrine aux articles en css

Grâce à la magie du css, nous allons modifier la taille de la première lettre du texte des articles pour créer une lettrine.

Pour se faire, éditez le fichier css de votre thème et ajoutez à la fin du fichier le code suivant:

article section:first-letter {
	float: left;
	margin: 10px 5px 0 0;
	padding: 0 10px 0 0;
	line-height: 52px;
	font-size: 78px;
	color: #00BBFF;
}

Ce code est valable pour le thème par défaut de PluXml 5.3.1.

Il est donc facilement adaptable en fonction de votre thème. Vous pourrez notamment jouer sur les valeurs des paramètres line-height et font-size pour changer la taille de la lettrine, et du paramètre color pour modifier la couleur du caractère mis en évidence.

Table des matieres

Afficher les commentaires en ordre décroissant

Par défaut les commentaires dans PluXml sont affichés par date croissante et numérotés chronologiquement de 1 en 1, du plus petit au plus grand.

Voici les modifications à faire pour afficher les commentaires de façon décroissante, avec la date et le compteur du plus grand au plus petit.

Première étape, allez dans les paramètres de PluXml, sur l'écran Options d'affichage au niveau de la ligne Tri des commentaires, sélectionnez la valeur date décroissante.

Deuxième étape, éditez le fichier commentaires.php situé dans le dossier de votre thème.
Afin de changer le sens du compteur des commentaires pour que l'affichage soit du plus grand au plus petit, remplacer la ligne suivante:

‹a class="num-com" href="‹?php $plxShow-›ComUrl(); ?›" title="#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›i+1 ?›"›#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›i+1 ?›‹/a›

par

‹a class="num-com" href="‹?php $plxShow-›ComUrl(); ?›" title="#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›size - $plxShow-›plxMotor-›plxRecord_coms-›i ?›"›#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›size - $plxShow-›plxMotor-›plxRecord_coms-›i ?›‹/a›

Nous sommes donc passé de cet affichage

à l'affichage suivant, c'est à dire avec un compteur du plus grand au plus petit et avec une date décroissante.

Merci à mathieu pour avoir donné la solution sur le forum de PluXml.

Table des matieres

Afficher une mention pendant 7 jours pour les nouveaux articles

Voici quelques lignes de code à ajouter dans votre thème pour afficher à coté du titre des articles une icône NEW informant qu'il s'agit d'un nouvel article récemment publié.

L'idée est de comparer la date de publication des articles avec la date du jour. Si le nombre de jours trouvé est inférieur à 7, nous décidons qu'il s'agit d'un nouvel article et dans ce cas, on affiche devant le titre de l'article une petite icône "NEW". Dans mon exemple j'utilise une icône de 32 x 32 pixels comme celle-ci.

Copiez cette image dans le dossier img de votre thème. Par exemple dans: /theme/defaut/img/

Éditez le fichier home.php de votre thème (j'utilise ici le thème par défaut de PluXml 5.3.1)

Remplacez les lignes suivantes:

‹h1›
	‹?php $plxShow-›artTitle('link'); ?›
‹/h1›

par

‹h1›
	‹?php
	$ndays = 7;
	if(floor((strtotime(date('YmdHi')) - strtotime($plxShow-›plxMotor-›plxRecord_arts-›f('date'))) / (60*60*24)) ‹ $ndays) : ?›
		‹img src="‹?php $plxShow-›template() ?›/img/new.png" alt="" title="" /›
	‹?php endif; ?›

	‹?php $plxShow-›artTitle('link'); ?›
‹/h1›

Si vous souhaitez augmenter ou réduire la période de 7 jours, changez la valeur 7 dans la ligne suivante:

	$ndays = 7;

L'icône NEW n'est affichée ici que sur la page d'accueil du site. Vous aurez également à modifier si vous le souhaitez les autres fichiers du thème qui affiche les titres des articles.

Table des matieres

Astuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)

Cette astuce a été publiée sur le forum de PluXml par David Revoy. Parce qu'elle est très facile à mettre en place et peut être très utile pour les concepteurs de thème, j'ai trouvé dommage qu'elle reste noyée dans tous les sujets du forum.

Pour rappel, PluCSS est un framework css développé par l'équipe de PluXml qui gère le responsive design, c'est à dire que l'affichage s'adapte en fonction de la taille de l'écran (ordinateur, tablette, smartphone). Suivant donc la taille de l'écran, PluCSS utilise différentes balises reconnaissables par des préfixes sml (small),med (medium), lrg (large) afin d'adapter l'affichage en fonction de la résolution.

Exemple:

Déclarations dans le fichier plucss.css

.sml-text-center {
	text-align: center;
}

@media (min-width: 768px) {
	.med-text-left {
		text-align: left;
	}
}

Déclarations dans le fichier header.php

‹header class="header sml-text-center med-text-left" role="banner"›
	‹h1 class="no-margin"›mainTitle('link'); ?›‹/h1›
	‹h2 class="h5 no-margin"›subTitle(); ?›‹/h2›
‹/header›

De cette façon simplement en utilisant sml-text-center et med-text-left comme ci-dessus, l'affichage sera centré sur un petit écran, mais justifié à gauche sur un affichage moyen (et large par défaut).

L'astuce proposée consiste à afficher en bas à droite du navigateur le mode d'affichage courant avec le texte SML, MED ou LRG. Pour sa mise en place, éditez par exemple le fichier sidebar.php de votre thème et copier-coller le code suivant, de préférence en bas du fichier.

NB: si vous utilisez le thème par défaut collez le code avant la balise ‹/aside›

‹div ›
	‹div class="sml-show med-hide lrg-hide"› SML ‹/div›
	‹div class="sml-hide med-show lrg-hide"› MED ‹/div›
	‹div class="sml-hide med-hide lrg-show"› LRG ‹/div›
‹/div›

Accédez à la page d'accueil de votre site. En redimensionnant la fenêtre de votre navigateur, le mode d'affichage utilisé sera affiché sur fond jaune en bas à droite.

Mode LRG:

Mode MED:

Mode SML:

Toute la documentation de PluCSS est disponible à cette adresse: http://plucss.pluxml.org/

Merci à David pour cette astuce. Je vous invite à visiter son site pour admirer son travail de dessinateur et d'illustrateur.
http://www.davidrevoy.com/

Table des matieres

Afficher les articles sur 2 colonnes

Grâce au CSS3 il est simple et rapide d'afficher les articles sur plusieurs colonnes.
Juste quelques lignes de code dans la feuille de style de son thème sont nécessaires pour changer la disposition du contenu des articles.

Prenons en exemple le thème par défaut de PluXml.
Éditez le fichier /themes/defaut/css/style.css et ajoutez à la fin du fichier le code suivant:

article section  {
	/* nombre de colonnes = 2 */
	-webkit-column-count: 2;
    -moz-column-count: 2;
    column-count: 2;

	/* espace entre les colonnes: 30px */
	-webkit-column-gap: 30px;
    -moz-column-gap: 30px;
    column-gap: 30px;

	/* barre de séparation entre les colonnes */
	-moz-column-rule-color: #ccc;
	-moz-column-rule-style: solid;
	-moz-column-rule-width: 1px;
	-webkit-column-rule-color: #ccc;
	-webkit-column-rule-style: solid ;
	-webkit-column-rule-width: 1px;

	/* espace en haut et en bas de l'article */
	margin-top: 15px;
	margin-bottom: 15px;
}

Les quelques commentaires dans le code vous permettront de faire les changements nécessaires en fonction de vos besoins, genre remplacer la valeur 2 par 3 par exemple pour avoir un affichage sur 3 colonnes au lieu de 2.

L'exemple est compatible:

Chrome 4.0+ (-webkit-)

IE 10.0+

Firefox 2.0+ (-moz-)

Safari 3.1+ (-webkit-)

Opera 15.0+ (-webkit-)

Table des matieres

Liste des constantes dans PluXml

PluXml utilise dans son code php plusieurs constantes définies dans différents fichiers.
Voici par ordre alphabétique la liste exhaustive avec la signification et la valeur par défaut de ces constantes

PLX_ADMIN

Permet de savoir si on est dans la zone d'administration

Valeur à true si présence dans l'administration

Fichier: core/lib/class.plx.admin.php

PLX_AUTHPAGE

Permet de savoir si on est sur la page d'identification de la zone d'administration

Valeur à true si présence sur la mire de connexion

Fichier: core/admin/auth.php

PLX_CHARSET

Jeux de caractères utilisé pour l'affichage du site

Valeur par défaut: 'UTF-8'

Fichier: core/lib/config.php

PLX_CONFIG_PATH

Chemin vers le dossier content les fichiers de configuration

Valeur par défaut: data/configuration/

Fichier: config.php

PLX_CORE

Chemin vers le dossier core

Valeur par défaut: PLX_ROOT.'core/'

Fichiers: index.php, core/admin/prepend.php, feed.php, install.php, sitemap.php, update/index.php

PLX_MICROTIME

Timestamp UNIX initialisé avec l'appel de la fonction getMicrotime()

Fichier: core/lib/config.php

PLX_PLUGINS

Chemin vers le dossier des plugins paramétrés dans l'administration (Paramètres › Configuration avancée)

Fichier: core/lib/class.plx.motor.php

PLX_ROOT

Chemin relatif vers la racine du site

Valeur par défaut: './' si coté visiteur ou '../../' si coté zone administration

Fichiers: index.php, core/admin/prepend.php, feed.php, install.php, sitemap.php, update/index.php

PLX_UPDATE

Chemin vers le dossier contenant les scripts de mise à jour

Valeur par défaut: PLX_ROOT.'update/'

Fichier update/class.plx.update.php

Table des matieres

Faut-il fusionner les dossiers images et documents dans PluXml?

Cette réflexion revient souvent dans mes recherches d’amélioration de PluXml. Elle traine depuis longtemps dans ma tête, car pourquoi utiliser deux dossiers différents pour stocker les fichiers à diffuser sur un site, que ce soient des images, des vidéos ou de la musique. Le système de sous-dossiers permet de hiérarchiser une arborescence et de classer correctement les fichiers en n’ayant qu’un seul premier niveau pour accéder à l’ensemble des fichiers.

Les habitués savent que je défends l’idée de la simplicité que ce soit au niveau de l’ergonomie des écrans pour faciliter l’utilisation de PluXml mais aussi au niveau technique pour avoir un code de programmation propre et facilement compréhensible.

Fusionner les dossiers Images et Documents serait donc dans un premier temps une amélioration technique qui simplifierait la programmation du gestionnaire de médias de PluXml : plus besoin de gérer deux boutons Images et Documents pour basculer d’un dossier à un autre. Le code serait allégé, le contenu de l’écran également.

D’un point de vue utilisateur, on peut se demander si l’utilisation de ces deux boutons est suffisamment intuitive pour un novice ou pratique voir utile pour un habitué. Combien d’entre vous utilisez le dossier Documents ? Si je n’ai aucun doute pour le dossier Images, l’utilisation du dossier Documents est moins évidente, voir surement inexistante.

Alors fusionner les dossiers images et documents, peut-être, mais quel nom donner au nouveau répertoire ? Quelques idées pour le nom du dossier de stockage des fichiers :

Documents

Medias

Fichiers (ou Files)

Avez-vous d’autres suggestions ?

Je ferme volontairement les commentaires de cet article pour vous inviter à me faire part de vos remarques et de vos avis sur le forum de PluXml, afin de regrouper les discussions dans un seul endroit. Rendez-vous donc ici pour continuer à parler de ce sujet.

Table des matieres

CKEditor: comment changer la langue du correcteur orthographique

La manipulation pour changer la langue à utiliser dans le correcteur d'orthographe intégré de CKEditor est simple et rapide:
Cliquez sur l'icone ABC puis sélectionner le menu Langues

Dans l'onglet Langues, sélectionner la langue à utiliser

Table des matieres

Afficher la description des catégories que sur la première page

La description d'une catégories est affichée dans le thème par défaut grâce à l'instruction suivante:

‹?php $plxShow-›catDescription(' : #cat_description'); ?›

Cette description est visible lorsque l'on consulte les articles par catégorie, quelque soit le numéro de page en cours.

Pour restreindre l'affichage de la description uniquement à la première page de la catégorie, éditez le fichier categorie.php stocké dans le dossier de votre thème et utilisez à la place le code suivant.

‹?php
	if($plxShow-›plxMotor-›page==1) {
		$plxShow-›catDescription(' : #cat_description');
	}
?›

Ainsi lorsque vous paginez vers la page 2 et les pages suivantes, la description de la catégorie visitée ne sera pas affichée.

Table des matieres

Comment rajouter des addons à l'éditeur CKEditor pour PluXml

L'éditeur de texte CKEditor possède de nombreux addons qui peuvent être téléchargés à partir de cette page: Addons pour CKEditor

Voici comment installer un addon dans le plugin pour PluXml.

téléchargez l'addon à installer

décompressez et copier les fichiers dans le dossier de PluXml: /plugins/ckeditor/ckeditor/plugins

à partir de la zone d'administration de PluXml, allez dans Paramètres › Plugins › Plugins actifs

sur la ligne du plugin CKEditor, cliquez sur le lien Configuration

rajoutez dans la zone extraPlugins, la valeur du paramètre extraPlugins servant à activer l'utilisation de l'addon. Cette valeur est définie par le concepteur et peut généralement être connue sur la page de téléchargement de l'addon.

Vous pouvez ajouter plusieurs valeurs en les séparant par des virgules.
Exemple:

Table des matieres

Faire une redirection http://www vers http:// avec PluXml

Afin d'éviter les phénomènes de duplication de contenu (duplicate content) qui pénalisent le bon référencement des sites, nous allons voir comment rediriger toutes les pages de type "http://www.monsite.fr" vers "http://monsite.fr"

En effet, le fait de pouvoir accéder à partir de deux urls différentes d'une même page d'un site, et donc d'un même contenu, est mal vu par les moteurs de recherche. Pour pallier à ce souci, il est préférable de mettre en place une redirection automatique.

Dans un premier temps, il faut que le module de réécriture d'url d'apache (mod_rewrite) soit disponible et activé sur votre hébergeur.

Activez la réécriture d'url dans PluXml en passant par la zone d'administration et en allant dans le menu: Paramètres › Configuration avancées et passer sur Oui la ligne Activer la réécriture d'urls.

L'activation de cette option créera à la racine de votre site un fichier .htaccess

Éditez ce fichier et rajoutez les 2 lignes suivantes:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule (.*) http://%1/$1 [R=301,L]

de manière à obtenir un fichier ressemblant à

# BEGIN -- Pluxml
Options -Multiviews
‹IfModule mod_rewrite.c›
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule (.*) http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
‹/IfModule›
‹Files "version"›
	Order allow,deny
	Deny from all
‹/Files›
# END -- Pluxml

Essayez maintenant d’accéder à votre site en tapant dans votre navigateur le lien http://www.monsite.fr, vous verrez que vous serez automatiquement redirigé vers le lien http://monsite.fr.

Table des matieres

Récupérer les adresses emails des commentateurs

Voici un exemple très simple de code pour récupérer le nom et l'adresse email des personnes qui laissent des commentaires sur votre site.
Pour tester cet exemple, faites un simple copier-coller du code suivant dans le contenu d'une page statique, en passant par votre administration, menu Pages statiques puis lien Éditer. Cliquez ensuite sur le lien Voir pour afficher les résultats.

‹?php
$plxMotor = plxMotor::getInstance();
$root = PLX_ROOT.$plxMotor-›aConf['racine_commentaires'];
$plxGlob = plxGlob::getInstance($root, false);
if($files = $plxGlob-›query("/(.*)\.xml$/")) {
	$array = array();
    foreach($files as $idx =› $file) {
        $com = $plxMotor-›parseCommentaire($root.$file);
		if(!in_array($com['mail'], $array)) {
			$array[$com['mail']] = $com['author'].' - '.$com['mail'];
		}
    }
}
echo "‹ul›‹li›".implode("‹/li›‹li›", $array)."‹/li›‹/ul›";
?›

Table des matieres

Édition en ligne des fichiers du thème de votre PluXml

Savez-vous que vous pouvez éditer chaque fichier de votre thème en ligne, directement à partir de PluXml ?

Certes vous n'aurez pas un éditeur avancé, juste le strict minimum pour faire des modifications ponctuelles ou des ajustements de dernière minute sans avoir à récupérer vos fichiers par ftp pour les modifier. Cela peut s'avérer pratique et faire gagner du temps si les modifications à faire ne sont pas trop importantes: un petit copier-coller de code, le changement de nom d'une balise ou la valeur d’un couleur dans la feuille de style.

MAJ le 28/04/2023

Pour pouvoir éditer les fichiers de votre thème, à partir de votre zone d’administration, rendez-vous dans Paramètres › thèmes. Les thèmes disponibles sont affichés et le premier de la liste est celui qui est actif et que vous pouvez modifié.

cliquez sur le lien Éditer les fichiers du thème.

A partir du déroulant Éditer les fichiers du thème vous pourrez sélectionner le fichier à éditer.

Mise en gardes

Avant toutes modifications de fichiers, il est toujours conseillé de garder une copie des fichiers avant modifications, que ce soit vos fichiers de thèmes ou tout autre fichier important que vous manipulez.

À enregistrement de vos fichier, PluXml nettoie tout les \, il faut donc penser à les doubler avant d'enregistrer votre fichier en les réecrivant comme ceci :\\.

Il existe un plugin qui vous aidera à cette tâche en doublant pour vous ceux déjà existant . Ce plugin se trouve sur Git-hub à PLX-cssBackSlash.

Table des matieres

Modifier le titre du menu "Blog"

Si on choisit comme page d'accueil une page statique, Pluxml crée automatiquement un menu "Blog" au niveau de la liste des pages statiques.

Voilà la modification à effectuer pour changer le titre du menu "Blog".

Éditez le fichier header.php stocké dans le dossier de votre thème et localisez la ligne suivante:

‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›

Remplacer #page_name par le nouveau titre.

Exemple: remplacement du titre Blog par Journal

‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="Journal"›Journal‹/a›‹/li›'); ?›

Table des matieres

À quoi sert l'instruction templateCss

L'instruction templaceCss est utilisée dans la partie ‹head› du fichier header.php stocké dans le dossier du thème.

‹?php $plxShow-›templateCss() ?›

Question: à quoi sert cette instruction ?

L'instruction templaceCss permet de charger automatiquement le fichier .css qui porte le même nom qu'un fichier template.

Par exemple, si dans le dossier du thème nous avons des fichiers template avec des noms comme:

static-home.php

categorie-association.php

article-presentation.php

il suffit alors de créer des fichiers css dans le dossier du thème avec les noms correspondants suivant:

static-home.css

categorie-association.css

article-presentation.css

De cette façon lors de la création d'un article, si on lui associe le fichier template article-presentation.php, en visualisant l'article coté visiteur, le fichier css article-presentation.css sera automatiquement déclaré et chargé dans la partie head du site.

Utilisation d'un fichier template pour un article:

Cela a l'avantage d'alléger le fichier css principal style.css du site et de ne pas le surcharger avec du code css qui ne serait utilisé que dans certain cas.

Par exemple si on visualise les pages des archives, il n'est peut-être pas nécessaire de charger le code css utilisé pour l'affichage des articles.

Si l'on regarde le code source html généré coté visiteur lors de la visualisation d'un article utilisant un template, on peut voir que l'ajout du fichier css est automatiquement déclaré et traité par PluXml, sans rien avoir à coder manuellement.

On gagne ainsi sur la taille du fichier css principal (généralement style.css) et on augmente donc les performance du site par des temps de chargement accélérés.

Table des matieres

Ajouter une icône aux menus des pages statiques

Pour ce nouveau tutoriel, je vous propose de voir comment afficher des icônes à gauche des menus des pages statiques, afin d'obtenir ce genre de présentation:

Chaque page statique est identifiée par un numéro unique. Pour connaitre ces identifiants, rendez-vous dans la partie d'administration de votre site et allez dans la gestion des pages statiques:

Relevez les numéros de vos pages statiques dans la colonne Identifiant. Nous en aurons besoin pour la suite.

Pour rappel, l'affichage des menus des pages statiques se fait grâce à l'instruction suivante, présente dans le fichier header.php stocké dans le dossier de votre thème:

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›

Le code html généré ressemble alors à ceci

Nous allons utiliser l'attribut id des balises ‹li› pour définir les propriétés css et ajouter nos icônes.
Pour les icônes je vous conseille de prendre des images de 32x32 pixels et de le copier dans le dossier:

themes/defaut/img/

Éditez maintenant le fichier style.css de votre thème et rajoutez à la fin du fichier les lignes suivantes:

#static-1 {
	background: url(../img/mac_logo.png) no-repeat center left;
	padding: 10px 0 10px 40px;
}

#static-2 {
	background: url(../img/windows_logo.png) no-repeat center left;
	padding: 10px 0 10px 40px;
}

#static-3 {
	background: url(../img/ubuntu_logo.png) no-repeat center left;
	padding: 10px 0 10px 40px;
}

#static-1 permet de définir le comportement visuel de la balise ‹li› définie par id="static-1" correspondant à la page statique "Statique 1".

De la même façon #static-2 permet d'ajouter l'icône à la page "Statique 2", et ainsi de suite...

NB: les valeurs padding: 10px 0 10px 40px; sont adaptées pour le thème par défaut de PluXml que j'ai pris comme modèle pour ce tutoriel. Il est donc fort probable que vous ayez à les adapter pour votre propre thème.

Table des matieres

Créer un page d'erreur 404 personalisée

La page d'erreur par défaut lorsqu'une erreur se produit est affichée grâce au fichier erreur.php stocké dans le dossier du thème.

Avec le thème par défaut la page affichée ressemble à ça:

Avec les outils d'analyses disponibles avec les navigateurs, on peut voir dans l'entête du fichier l'erreur 404 Not Found générée.

Pour afficher notre nouvelle page d'erreur avec un gros 404 au milieu, éditez le fichier erreur.php de votre thème et remplacer tout son contenu par le code suivant:

‹?php if (!defined('PLX_ROOT')) exit; ?›
‹!DOCTYPE html›
‹html lang="‹?php $plxShow-›defaultLang() ?›"›
‹head›
‹meta charset="‹?php $plxShow-›charset('min'); ?›"›
‹meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"›
‹title›‹?php $plxShow-›pageTitle(); ?›‹/title›
‹?php $plxShow-›meta('description') ?›
‹?php $plxShow-›meta('keywords') ?›
‹?php $plxShow-›meta('author') ?›
‹link rel="icon" href="‹?php $plxShow-›template(); ?›/img/favicon.png" /›
‹style›
body {
	font: normal 13px/20px Arial, Helvetica, sans-serif;
	color: #969696;
	margin: 0;
	background-color: #fff;
}
.error-center {
	width: 800px;
	margin-left: -400px;
	position: absolute;
	top: 30%;
	left: 50%;
	text-align: center;
}
.error-404 {
	margin: 0;
	font-size: 200px;
	line-height: 200px;
	font-weight: bold;
}
.error-404 span {
	text-shadow: 1px 5px 7px rgba(150, 150, 150, 1);
}
h1, h2 {
	color: #616161;
}
h2 {
	font-size: 24px;
	line-height: 24px;
}
‹/style›

‹/head›

‹body id="top"›

‹div class="error-center"›

	‹h1 class="error-404"›
		‹span›404‹/span›
	‹/h1›

	‹h2 class="title"›Page non trouvée‹/h2›
	‹p class="message"›
		La page que vous avez demandée n'existe pas.
		‹br /›
		‹a href="javascript:history.go(-1)"›Retour‹/a› ou accueil ‹?php $plxShow-›mainTitle('link'); ?›
	‹/p›
‹/div›

‹/body›

‹/html›

Nous avons ici épuré le contenu de la page par défaut pour ne garder que le strict minimum.

Le chargement des feuilles de style du thème a été supprimé pour utiliser à la place le code css nécessaire écrit entre les balises ‹style› et ‹/style›.

Il ne vous reste plus qu'à imaginer vos propres pages d'erreur 404 et adapter le code en remplaçant votre code css et le contenu de la page entre les balises ‹body› et ‹/body›.

Table des matieres

Tester l'existence d'un plugin à partir d'un plugin

Pour tester l'existence d'un plugin, ajoutez le code suivant dans la classe de votre plugin:

public static function isPluginExists($plugname) {

	if(defined('PLX_ADMIN'))
		$plxObj = plxAdmin::getInstance();
	else
		$plxObj = plxMotor::getInstance();

	return isset($plxObj-›plxPlugins-›aPlugins[$plugname]);
}

A partir de votre plugin vous pouvez maintenant tester l'existence d'un autre plugin en utilisant ce type de code:

if(plxMyPlugin::isPluginExists('plxPlugin_a_Tester') {
	// si le plugin existe
} else {
	// si le plugin n'existe pas
}

Ici plxMyPlugin est le nom de la classe de votre plugin et plxPlugin_a_Tester est le nom de la classe du plugin à tester.

Table des matieres

Donner du style à la liste des catégories des articles

Nous allons voir comment changer l'affichage par défaut de la liste des catégories des articles sur la page de lecture du contenu des articles.
L'objectif est d'afficher à partir de la description des catégories un texte et une image d'illustration des catégories afin d'obtenir une présentation semblable à celle-ci:

Actuellement, la liste des catégories d'un article est affichée dans le fichier article.php du thème grâce aux instructions suivantes:

‹?php $plxShow-›lang('CLASSIFIED_IN') ?› : ‹?php $plxShow-›artCat(); ?›

Le résultat obtenu est:
pour un article classé dans les catégories Rubrique 1, Rubrique 2 et Rubrique 3

Voyons étape par étape pour changer cet affichage et obtenir cette présentation...

Paramétrage des catégories

Avant de nous attaquer à la modification du thème, commençons par renseigner la partie description de nos catégories. L'objectif est d'y ajouter un texte descriptif et une image d'illustration.

À partir de la zone d'administration, aller dans le menu Catégories et cliquez sur le lien Options.

Renseignez la description de la catégorie et ajoutez le code html pour afficher l'image d'illustration de la catégorie.

Exemple:

Ici, l'image correspondant au fichier findingnemo1.png utilisé est stockée dans le dossier data/images/

‹img src="data/images/findingnemo1.png" alt="" /›

Faites de même pour toutes vos autres catégories.

Modification du thème

Nous allons modifier le fichier article.php stocké dans le dossier de notre thème.
Comme toujours, je prends en exemple le thème par défaut livré avec PluXml.

Éditez le fichier article.php de votre thème.

Supprimez la ligne suivante pour ne plus afficher l'ancienne présentation de la liste des catégories de l'article.

‹?php $plxShow-›lang('CLASSIFIED_IN') ?› : ‹?php $plxShow-›artCat(); ?› -

En dessous des lignes suivantes:

‹section›
	‹?php $plxShow-›artContent(); ?›
‹/section›

Ajoutez le code suivant:

‹section›
‹?php
$catIds = $plxShow-›artActiveCatIds();
if($catIds) {
	$output = array();
	foreach($catIds as $catId) {
		$desc = isset($plxMotor-›aCats[$catId]) ? $plxMotor-›aCats[$catId]['description'] : '';
		if($desc!='')
			$output[] = '‹li›‹a title="" href="'.$plxShow-›catUrl($catId).'"›‹div›'.$plxMotor-›aCats[$catId]['name'].'‹/div›'.$desc.'‹/a›‹/li›';
	}
	if($output)
		echo '‹ul class="catDesc"›'.implode(' ', $output).'‹/ul›';
	}
?›
‹/section›

Ce code permet d'afficher la liste des catégories sous forme d'encadré avec:

le titre de la catégorie

la description de la catégorie contenant un texte descriptif + une image d'illustration

Il ne reste plus qu'à ajouter le code css dans le fichier style.css du thème afin de mettre en forme l'affichage pour avoir l'encradré, le titre de la catégorie en gras et le bon positionnement des blocs avec les images.

Éditez le fichier style.css de votre thème et à la fin du fichier ajoutez les lignes suivantes:

ul.catDesc {
	text-align: center;
}

ul.catDesc li div {
	font-weight: bold;
	width: 100%;
}

ul.catDesc li {
	list-style-type: none;
	border: 1px solid #dedede;
    width: 200px;
    display: inline-block;
    vertical-align: top;
    *display: inline;
    *zoom: 1;
	font-size: 0.9em;
	margin: 5px;
}

N'oubliez pas de cocher les catégories lors de la rédaction de votre article afin de le classer dans une ou plusieurs catégories.

Nous sommes à la fin de ce tutoriel. N'hésitez pas à me laisser vos remarques en commentaires ou sur le forum de PluXml.

Table des matieres

Résoudre le problème de réécriture d'url de PluXml sous Apache 1.3.x

Si vous avez activé la réécriture d'url de PluXml et que votre serveur ou hébergeur tourne sous Apache 1.3.x, vous avez certainement rencontré le code erreur 500 Internal Serveur Erreur avec comme message:

En cause une règle d'écriture dans le fichier .htaccess non compatible avec Apache 1.3.x.
Pour contourner ce problème, je vous propose une solution.

Lorsque vous activez la réécriture d'url dans PluXml (Administration › Paramètres › Configuration avancée, puis déroulant Activer la réécriture d'urls sur Oui), un fichier .htaccess est créé à la racine de votre site avec le contenu suivant:

# BEGIN -- Pluxml
Options -Multiviews
‹IfModule mod_rewrite.c›
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
‹/IfModule›
‹Files "version"›
	Order allow,deny
	Deny from all
‹/Files›
# END -- Pluxml

La ligne qui pose problème et qui génère le code erreur 500 est:

RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]

Plus précisément c'est l'utilisation des deux caractères ?! (qu'on appelle negative lookahead ou assertion négative) qui n'est pas reconnue par Apache 1.3.x

Apache 1.3 n'utilise pas les expressions régulières compatibles Perl (PCRE). Il utilise les regexes POSIX. Or les expressions régulières POSIX ne supportent pas les assertions négatives (negative lookahead). Le support de PCRE est une fonctionnalité supportée qu'à partir de Apache 2.

La solution est donc de changer cette ligne en utilisant une syntaxe n'utilisant pas de negative lookahead.

Remplacer la ligne:

RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]

par

RewriteCond $1 !^(feed)
RewriteRule ^(.*)$ index.php?$1 [L]

Votre fichier .htaccess devrait donc maintenant ressembler à ceci:

# BEGIN -- Pluxml
Options -Multiviews
‹IfModule mod_rewrite.c›
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteCond $1 !^(feed)
RewriteRule ^(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
‹/IfModule›
‹Files "version"›
	Order allow,deny
	Deny from all
‹/Files›
# END -- Pluxml

Si vous êtes sous Apache 1.3 et concerné par cette erreur, n'hésitez pas à me laisser un petit message pour me confirmer la résolution du problème.

PS: l'autre solution est de passer sous Apache 2.x

Table des matieres

Inclure un fichier php stocké dans le dossier de son thème

Avez-vous besoin pour votre thème d'utiliser une fonction ou des bouts de code php que vous avez programmé ? Vous vous demander peut-être alors comment appeler un fichier php personnel à partir de mon thème et quelle syntaxe utiliser. La réponse est simple et tient en une ligne de code...

Afin de bien structuré le dossier de votre thème, je vous propose de créer dedans un dossier appelé par exemple php, dans lequel vous enregistrerez le fichier contenant vos lignes de code php.

Éditez le fichier header.php et après la première ligne, collez le code suivant:

‹?php include(PLX_ROOT.$plxMotor-›aConf['racine_themes'].$plxMotor-›style.'/php/monfichier.php') ?›

Quelques explications

PLX_ROOT fait référence à la racine du site

$plxMotor-›aConf['racine_themes'] fait référence au dossier themes paramètré dans les options avancées de l'administration

$plxMotor-›style fait référence au nom du dossier de votre thème

php est le nom du dossier dans lequel est stocké le fichier avec nos lignes de code

monfichier.php est le nom du fichier php contenant notre code php personnel (à changer en fonction de votre choix)

Grâce à cette ligne de code, quelque soit le nom du dossier thème, le chemin vers le fichier monfichier.php restera valide.

Table des matieres

Ajouter un lien dans son thème vers une page statique à partir de son numéro

Voici le bout de code php pour ajouter et coder en dur dans son thème pour PluXml, un lien vers une page statique à partir de son numéro d'identifiant. Le numéro d’une page statique est sur 3 caractères et est par exemple de la forme 001.

‹?php
$staticId = '001';
if(isset($plxMotor-›aStats[$staticId])) {
	$url = $plxMotor-›urlRewrite('?static'.$staticId.'/'.$plxMotor-›aStats[$staticId]['url']);
	$title = plxUtils::strCheck($plxMotor-›aStats[$staticId]['name']);
	echo '‹a href="'.$url.'" title="'.$title.'"›'.$title.'‹/a›';
}
?›

Modifier la valeur de la variable $staticId avec le numéro de la page statique souhaitée (ici 001)

Pour rappel le numéro d'une page statique est à récupérer à partir de l'administration dans la gestion des pages statiques, colonne Identifiant

Vous pouvez faire un copier-coller de ce code et l'ajouter dans votre thème, par exemple dans le fichier sidebar.php

Table des matieres

Mettre en avant les commentaires rédigés à partir de l'administration

Les commentaires rédigés par un visiteur ou à partir de la zone d'administration du site peuvent être différenciés en utilisant la fonction comType() de la classe plxShow.

‹?php $plxShow-›comType(); ?›

Nous allons voir comment utiliser cette fonction pour changer le comportement visuel des commentaires et ainsi mettre en avant ceux rédigés par exemple par l'administreur du site.

La fonction comType() renvoie une des deux valeurs suivantes:

admin : si le commentaire est rédigé à partir de l'administration (en réponse à un commentaire par exemple)

normal : si le commentaire est rédigé par un visiteur à partir du formulaire des commentaires d'un article

Il est donc possible de caractériser l'affichage d'un paragraphe (ou de toute autre balise html) à partir d'une classe css de cette façon:

‹p class="type-comType(); ?›"›
	‹?php $plxShow-›comContent(); ?›
‹/p›

Le code html généré pour un commentaire écrit par un visiteur sera :

‹p class="type-normal"›
	Contenu du commentaire
‹/p›

Le code html généré pour un commentaire écrit par un administrateur sera :

‹p class="type-admin"›
	Contenu du commentaire
‹/p›

Il ne reste plus qu'à définir le comportement de la classe .type-normal ou .type-admin dans la feuille de style du thème (généralement le fichier style.css)

.type-normal {
	background-color: white;
	color: black;
}
.type-admin {
	background-color: black;
	color: white
}

Toutes les règles css sont conservées. Pour définir le comportement visuel des liens dans un commentaire de type admin, on pourra écrire:

.type-admin a {
	text-decoration: underline;
	color: red;
}

Pour rappel, l'affichage des commentaires se fait dans le fichier commentaires.php stocké dans le dossier du theme par défaut /themes/defaut/

Table des matieres

Comment afficher la date d'un article au format J mois AAAA

La fonction artDate() de la classe plxShow permet d'afficher la date de publication d'un article.

Exemple:

$plxShow-›artDate('#num_day #month #num_year(4)');

La variable #num_day permet d'afficher le jour de publication au format JJ. Il n'est pas possible de masquer le 0 significatif à gauche lorsque le jour de publication est inférieur à 10.
Impossible donc d'avoir 6 avril 2014 au lieu de 06 avril 2014.

Voici donc une astuce à base de css pour contourner ce problème.

Tout d'abord commençons par revoir le code permettant d'afficher la date de publication des articles.
Utilisez cette syntaxe:

‹time datetime="‹?php $plxShow-›artDate('#num_year(4)-#num_month-#num_day'); ?›"›
	‹?php $plxShow-›artDate('#num_day #month #num_year(4)'); ?›
‹/time›

L'astuce ici est d'entourer la date affichée par une balise ‹span›, pour laquelle on y ajoute un attribut data-content.
L'attribut data-content est renseigné avec la date de publication de l'article au format JJMMAAAA.

L'idée maintenant est, grâce au css, d'aller tester le contenu de data-content.
Si le premier caractère est un zéro, on va masquer le premier caractère de la balise ‹span›.

Pour cela, éditez le fichier css de votre thème et rajoutez les lignes suivantes:

time span[data-content^="0"]:first-letter  {
	color: transparent;
	font-size: 0;
}
time span {
	display: inline-block;
}

Voilà, maintenant les 0 ne seront plus affichés. Rien de plus à utiliser.

Explications

J'ai utilisé ici 2 notions css: le selecteur d'attribut de la forme E[foo~="bar"] et :first-letter

E[foo^="bar"] signifie tout élément E dont la valeur de l'attribut "foo" commence exactement par la chaîne "bar".

Dans notre cas:

span[data-content^="0"] signifie tout élément de la balise span dont la valeur de l'attribut "data-content" commence par "0" (0 est la valeur significative du jour de publication de l'article que l'on souhaite ne pas afficher)

:first-letter permet d'accèder à la première lettre formatée d'un élément, ici la date affichée entre ‹span› et ‹/span›.

Pour masquer le 0 il ne reste plus qu'à changer la couleur et réduire la taille du caractère pour qu'il ne soit plus visible.

	color: transparent;
	font-size: 0;

NB: :first-letter ne peut être utiliser qu'avec un conteneur de type block. En d'autres termes :first-letter ne fonctionne pas avec une balise span qui est de type inline. C'est pour cela qu'il est nécessaire d'utiliser les lignes suivantes

time span {
	display: inline-block;
}

Pour plus d'information sur les balises css utilisées, voilà de la lecture sur les sélecteurs d'attribut.

Table des matieres

Afficher la liste des pages statiques dans la sidebar

Dans la plupart des thèmes disponibles pour PluXml, la liste des pages statiques est affichée horizontalement dans la partie header du site. C'est le cas pour le thème par défaut de PluXml.

Il est tout a fait possible d'afficher cette liste dans la sibebar de façon verticale, en donnant une hiérarchie à deux niveaux si l'on utilise les groupes de pages statiques.
Nous allons donc voir comment obtenir la même présentation que ci-dessous.

Le thème utilisé est celui de PluXml 5.3.1
Les fichiers à modifier sont stockés dans le dossier themes/defaut/ de votre PluXml.

Création des pages statiques

Je vais reprendre la même liste de pages statiques, comme expliqué dans mon article Réaliser des menus déroulants à partir des menus des pages statiques

Nous allons donc réutilisé la liste de pages suivantes:

Menu Animaux:

Lion

Tigre

Léopard

Menu Planètes:

Mercure

Vénus

Terre

Mars

Modification du thème

La première chose à faire et d'éditer le fichier sidebar.php dans le dossier de son thème et en dessous de la ligne:

‹aside role="complementary"›

ajoutez le code suivant:

‹nav role="navigation"›
‹h3›Menus‹/h3›
‹ul id="static-nav"›
	‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›
	‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›
‹/ul›
‹/nav›

Au passage vous pouvez supprimer ce même code du fichier header.php. Nous n'en avons plus besoin à cet endroit.

Pour le moment notre liste ne ressemble à pas grand chose, tout simplement car il faut supprimer du fichier style.css (stocké dans le dossier css du thème), l'ancien code css utilisé pour mettre en forme la liste des pages statiques.

Éditez le fichier themes/defaut/css/style.css et supprimez toutes les lignes entre

/* ---------- NAV ---------- */

et

/* ---------- HEADER ---------- */

Notre liste maitentant est un peu plus présentable:

Nous pouvons néanmoins y faire quelques améliorations.

En dessous de la ligne

/* ---------- NAV ---------- */

ajoutez le code suivante:

aside nav ul  {
	margin-bottom: 0;
}
aside nav {
	margin-bottom: 50px;
}

Et voilà le résultat final, qui s'intégre pleinement avec le reste de la sidebar

Petite remarque: si vous ne voulez pas afficher un groupe de pages statiques ou simplement masquer le menu d'une seule page, sélectionnez la valeur Masquer dans la colonne Menu des pages concernées.

Table des matieres

Afficher votre profil à la fin des articles

Je vous propose d'afficher dans un encart à la fin des articles votre profil avec une photo et quelques lignes pour vous présenter. Si vous êtes plusieurs rédacteurs vous avez peut-être envie de mettre en valeur les personnes qui contribuent au contenu sur votre site. Voyons donc comment mettre tout ça en place et obtenir quelque chose qui ressemblera à cet affichage:

Renseigner ses informations de profil

Avant toute chose il faut renseigner son profil utilisateur dans l'administration de PluXml.
Aller dans le menu Profil et renseignez vos informations dans le champ Informations. Si vous n'utilisez pas d'éditeurs de texte, le texte à saisir est au format html, vous autorisant ainsi la mise en forme à partir du code html.
J'ai choisi d'afficher:

une photo

mon prénom en gras dans une police de caractère un peu plus grande

un texte pour me décrire

En html cela donne ceci: vous pouvez vous en servir comme modèle

‹div class="author-infos"›
	‹div ›‹img src="data/images/profile.jpg" title="Stéphane" alt="" /›‹/a›‹/div›
	‹span›Stéphane‹/span›‹br /›
	PluXml - Responsable Projet et Développement‹br /›
	Webmasteur et rédacteur du site ‹a href="http://pluxopolis.net" title="Pluxopolis"›Pluxopolis‹/a› dédié à PluXml‹br /›
	Vous pouvez me suivre sur Twitter: ‹a href="https://twitter.com/pluxopolis" title="@pluxopolis"›@pluxopolis‹/a›
‹/div›

Notez que le fichier de la photo profile.jpg est stockée dans le dossier data/images/.
Sa taille est de 75x75 pixels.

Ajouter l'affichage du profil dans son thème

Maintenant que nos informations de profil sont renseignées, pour les afficher à la fin des articles, éditez le fichier article.php stocké dans le dossier de votre thème.

Avant la ligne:

‹?php include(dirname(__FILE__).'/commentaires.php'); ?›

Ajoutez la ligne suivante:

‹?php $plxShow-›artAuthorInfos('#art_authorinfos'); ?›

Mettre en forme l'affichage

Pour mettre en forme l'affichage, nous allons utiliser les propriétés css des balises html utilisées dans le contenu des informations du profil.
Éditez le fichier css de votre thème (généralement le fichier s'appelle style.css) et ajoutez à la fin du fichier les lignes suivantes:

.author-infos {
	padding: 10px;
	font-size: 12px;
	background-color: #f9f9f9;
	border: 2px solid #ccc;
}
.author-infos img {
	border: 1px solid #dedede;
	padding: 3px;
	margin-right: 10px;
}

.author-infos span {
	font-size: 16px;
	font-weight: bold;
}

A vous maintenant de personnaliser l'affichage en fonction de vos préférences.

Table des matieres

Recommander des articles

PluXml ne dispose pas de fonction permettant de recommander la lecture d'articles en fonction d'un article particulier. Je vous propose de mettre en place sur la page de lecture d'un article, une liste aléatoire d'articles publiés dans les mêmes catégories que l'article en cours de visualisation (mode article).

Mise en place

Le code que nous allons utiliser pour afficher la liste des articles à recommander est prévu pour fonctionner uniquement à partir de la page article.php du thème.

Éditer le fichier article.php stocké dans le dossier de votre thème. Pour la démonstration j'utiliserai le thème par défaut de PluXml stocké dans le dossier /themes/defaut/

Avant la ligne:

‹?php include(dirname(__FILE__).'/commentaires.php'); ?›

Ajoutez les lignes suivantes:

‹?php
# paramétrage
$nb_arts = 7;
$format='‹li›#art_date : ‹a href="#art_url" title="#art_title"›#art_title‹/a›‹/li›';
# recherche des catégories actives de l'article en cours de lecture
$cat_ids = $plxShow-›artActiveCatIds();
$cat_ids = ($cat_ids ? implode('|', $cat_ids) : '');
# recherche de tous les articles publiés dans les catégories actives de l'article en cours de lecture
$plxGlob_arts = clone $plxMotor-›plxGlob_arts;
$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.str_pad($cat_ids,3,'0',STR_PAD_LEFT).')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
$aFiles = $plxGlob_arts-›query($motif,'art','rsort',0,9999,'before');
if($aFiles and sizeof($aFiles)›1) {
	$arts = array();
	# recherche aléatoire des articles à recommander
	$random = array_rand($aFiles, ($nb_arts › sizeof($aFiles) ? sizeof($aFiles) : $nb_arts) );
	foreach($random as $numart) {
		# on ne liste pas l'article en cours de lecture
		if($aFiles[$numart] ‹› basename($plxMotor-›plxRecord_arts-›f('filename'))) {
			$art = $plxMotor-›parseArticle(PLX_ROOT.$plxMotor-›aConf['racine_articles'].$aFiles[$numart]);
			$row = str_replace('#art_url',$plxMotor-›urlRewrite('?article'.intval($art['numero']).'/'.$art['url']),$format);
			$row = str_replace('#art_title',plxUtils::strCheck($art['title']),$row);
			$row = str_replace('#art_date',plxDate::formatDate($art['date'],'#num_day/#num_month/#num_year(4)'),$row);
			$author = plxUtils::getValue($plxMotor-›aUsers[$art['author']]['name']);
			$row = str_replace('#art_author',plxUtils::strCheck($author),$row);
			$arts[] = $row;
		}
	}
	# affichage des résultats
	if($arts) {
		echo '‹h2›À lire également‹/h2›';
		echo '‹ul›'.implode('', $arts).'‹/ul›';
	}
}
?›

Explications et paramétrage

Le nombre d'articles affichés est paramétrable grâce à la ligne suivante

‹?php
# paramétrage
$nb_arts = 7;

Dans cet exemple, 7 articles sont choisis aléatoirement parmi les articles publiés dans les catégories de l'article en cours de visualisation. Si l'article en cours de visualisation appartient à la liste aléatoire, il ne sera pas pris en compte et retiré de l'affichage. Ne vous étonnez pas donc si vous ne voyez que 6 articles listés au lieu de 7.

L'affichage des articles se fait sous forme de liste html grâce aux lignes suivantes:

$format='‹li›#art_date : ‹a href="#art_url" title="#art_title"›#art_title‹/a›‹/li›';

et

echo '‹ul›'.implode('', $arts).'‹/ul›';

Dans le format d'affichage vous disposez des variables suivantes:

#art_date: date de publication de l'article

#art_url: url de l'article tenant compte de la réécriture d'url

#art_title: titre de l'article

#art_author: auteur de l'article

Si vous souhaitez changer le titre À lire également, localiser la ligne suivante et faite la modification que vous souhaitez:

echo '‹h2›À lire également‹/h2›';

Voici donc un bon point de départ pour mettre en place facilement une liste d'articles à recommander. Les plus téméraires verront certainement un avantage a en faire un plugin. N'hésitez pas à venir partager vos réalisations sur le forum de PluXml

Vous pouvez voir le résultat plus bas sur cette page sous la ligne: À lire également

Table des matieres

Formater l'affichage des dates

La date de publication d'un article est affichée en utilisant la fonction artDate()

Exemple pour le fichier home.php ou article.php du thème par défaut

‹?php $plxShow-›artDate('#num_day #month #num_year(4)'); ?›

La date de publication d'un commentaire d'un article est affichée en utilisant la fonction comDate()

Exemple pour le fichier commentaires.php du thème par défaut

‹?php $plxShow-›comDate('#day #num_day #month #num_year(4) @ #hour:#minute'); ?›

Le formatage de la date est obtenu grâce à des variables commençant par le caractère #

Détaillons la liste des variables disponibles...

Affichage de l'année

#num_year(2): année sur 2 caractères (exemple: 14)

#num_year(4): année sur 4 caractères (exemple: 2014)

Affichage du mois

#num_month: numéro du mois sur 2 caractères

#month: nom long du mois (exemple: janvier)

#short_month: nom court du mois (exemple: jan)

Affichage du jour

#num_day: numéro du jour sur 2 caractères

#day: nom long du jour (exemple: lundi)

Affichage de l'heure

#hour: heure sur 2 caractères

Affichage des minutes

#minute: minutes sur 2 caractères

Formatage complémentaire

Il est également possible de rajouter des balises html pour formater l'affichage à partir de classes css qui seront définies dans la feuille de style du thème (fichier style.css)

Exemple :

‹?php $plxShow-›artDate('‹span class="j"›#num_day‹/span›‹span class="m"›#short_month‹/span›‹span class="a"›#num_year(4)‹/span›') ?›

Table des matieres

Afficher la liste de tous les tags dans une page statique

Pour afficher la liste de tous les tags dans une page statique, copiez le code suivant dans le contenu d'une page statique:

‹ul›
‹?php
$plxShow = plxShow::getInstance();
$plxShow-›tagList('‹li class="tag #tag_size"›‹a class="#tag_status" href="#tag_url" title="#tag_name"›#tag_name‹/a›‹/li›'); ?›
‹/ul›

La fonction tagList() permet d'afficher la liste des tags associés aux articles. Ici seul le premier paramètre de la fonction est utilisé pour formater l'affichage de la liste html. Pour limiter le nombre de tags à afficher, utilisez le deuxième paramètre de la fonction tagList() en spécifiant le nombre de tags à afficher.

Exemple extrait du fichier sidebar.php du thème par défaut de PluXml

‹ul›
	‹?php $plxShow-›tagList('‹li class="tag #tag_size"›‹a class="#tag_status" href="#tag_url" title="#tag_name"›#tag_name‹/a›‹/li›', 20); ?›
‹/ul›

Ici seuls les vingt premiers tags sont affichés.

Pour d'autres articles sur la gestion des tags, je vous renvoie à ces précédents articles:

Rajouter des couleurs dans son nuage de tags

Comment trier le nuage de tags

Table des matieres

Réaliser des menus déroulants à partir des menus des pages statiques

Dans ce tutorial nous allons voir comment réaliser avec jQuery des menus déroulants à partir des menus et des groupes de pages statiques.

Le thème utilisé est celui de PluXml 5.3.
Les fichiers à modifier sont stockés dans le dossier themes/defaut/ de votre PluXml.

Création des pages statiques

Nous allons dans un premier temps créer des pages statiques pour mettre en place les différents menus.
A partir de la zone d'administration, allez dans la gestion des pages statiques (menu Pages statiques).
Pour la démonstration nous allons créer deux menus Animaux et Planètes de manière à avoir cette arborescence avec les sous-menus suivants:

Menu Animaux:

Lion

Tigre

Léopard

Menu Planètes:

Mercure

Vénus

Terre

Mars

Pour créer les menus nous utilisons la notion de Groupe (voir colonne Groupe).
Ainsi pour regrouper les pages Lion, Tigre et Léopard sous le menu Animaux, renseignez les zones de la colonne "Groupe" pour chacune des pages avec la valeur "Animaux".

Faites de même avec le groupe Planètes pour regrouper les pages statiques Mercure, Vénus, Terre, Mars.

Assurez-vous que la valeur des champs de la colonne Active soit sur Oui et que Afficher soit sélectionné dans la colonne Menu.

Modification du thème

Nous allons maintenant modifier le fichier header.php du thème pour mettre en place les portions de code qui vont créer les menus déroulants.

Éditez donc le fichier header.php

Au dessus de la ligne ‹/head›, ajoutez les lignes suivantes pour déclarer la librairie jQuery et le code pour créer les menus déroulants:

‹script src="http://code.jquery.com/jquery-latest.js"›‹/script›
‹script›
$(document).ready(function() {
	$('#static-nav › li').bind('mouseover', openSubMenu);
	$('#static-nav › li').bind('mouseout', closeSubMenu);
	function openSubMenu() {
		$(this).find('ul').css('visibility', 'visible');
	};
	function closeSubMenu() {
		$(this).find('ul').css('visibility', 'hidden');
	};
});
‹/script›

Attention: si vous avez des plugins qui utilisent déjà jquery, la ligne qui ajoute la librairie jQuery pourrait ne pas être nécessaire, voir être source de problème si jquery est déjà déclaré d'une autre façon ou à un autre endroit de votre site.

Ensuite, localisez la ligne suivante:

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›

et remplacez la par:

‹?php
	$plxShow-›staticList(
		$plxShow-›getLang('HOME'),
		'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›',
		'‹a href="javascript:void(0)" class="#group_class"›#group_name‹/a›'
	);
?›

Nous avons ici utilisé le troisième paramètre de la fonction staticList() afin d'afficher les groupes des pages statiques, de manière à générer le code html suivant:

‹ul id="static-nav"›
	‹li id="static-home"›‹a href="http://localhost/PluXml/" class="active" title="Accueil"›Accueil‹/a›‹/li›
	‹li›
		‹a href="javascript:void(0)" class="static group"›Animaux‹/a›
		‹ul id="static-animaux"›
			‹li id="static-1"›‹a href="http://localhost/PluXml/index.php?static1/lion" class="noactive" title="Lion"›Lion‹/a›‹/li›
			‹li id="static-2"›‹a href="http://localhost/PluXml/index.php?static2/tigre" class="noactive" title="Tigre"›Tigre‹/a›‹/li›
			‹li id="static-3"›‹a href="http://localhost/PluXml/index.php?static3/leopard" class="noactive" title="Léopard"›Léopard‹/a›‹/li›
		‹/ul›
	‹/li›
	‹li›
		‹a href="javascript:void(0)" class="static group"›Planètes‹/a›
		‹ul id="static-planetes"›
			‹li id="static-4"›‹a href="http://localhost/PluXml/index.php?static4/mercure" class="noactive" title="Mercure"›Mercure‹/a›‹/li›
			‹li id="static-5"›‹a href="http://localhost/PluXml/index.php?static5/venus" class="noactive" title="Vénus"›Vénus‹/a›‹/li›
			‹li id="static-6"›‹a href="http://localhost/PluXml/index.php?static6/terre" class="noactive" title="Terre"›Terre‹/a›‹/li›
			‹li id="static-7"›‹a href="http://localhost/PluXml/index.php?static7/mars" class="noactive" title="Mars"›Mars‹/a›‹/li›
		‹/ul›
	‹/li›
‹/ul›

Remarque: cette structure html est une nouveauté de la version 5.3 de PluXml afin de faciliter l'affichage de la hiérarchie des menus, dans l'objectif des créer facilement des menus déroulants avec jQuery.

Il nous reste à ajouter le code css pour mettre en forme les menus déroulants.

Éditez le fichier themes/defaut/css/style.css

A la fin du fichier ajoutez le code suivant:

/* -------------------------- */
/* style des menus déroulants */
/* -------------------- */
#static-nav {
	margin:0;
	padding:0;
	height: 25px; /* hauteur de la barre de navigation */
}
#static-nav li {
	list-style:none;
	float:left;
}
#static-nav li a:link,
#static-nav li a:visited {
	display:block;
	margin:0;
}
#static-nav li a:hover {
}

/* -------------------- */
/* style des sous menus */
/* -------------------- */
#static-nav li ul {
	position:absolute;
	visibility:hidden;
	margin:0;
	padding:0;
}

#static-nav li ul li {
	display:inline;
	float:none;
	margin: 0;
	padding: 0;
}

#static-nav li ul li a:link,
#static-nav li ul li a:visited {
	width:auto;
	padding: 2px 30px 2px 5px;
	background-color: #666; /* couleur de fond des sous menus */
}

#static-navli ul li a:hover {
}

Les pages statiques sont maintenant accessibles sous forme de menus déroulants.
Libre à vous de personnaliser l'affichage des menus en changeant la couleur de fonds ou du texte par exemple en jouant avec les propriétés css des menus

Edit: solution en cas de problème si le menu déroulant s'ouvre bien mais impossible d'aller cliquer un sous menu.

Dans le code css ajouté dans le thème de votre site rajouter la ligne z-index: 9999; au niveau du code suivant:

/* -------------------- */
/* style des sous menus */
/* -------------------- */
#static-nav li ul {
	position:absolute;
	visibility:hidden;
	margin:0;
	padding:0;
	z-index: 9999;
}

Pour faire fonctionner les menus déroulants assurez-vous également d'avoir dans le fichier header.php du thème id="static-nav" au niveau de la ligne ‹ul id="static-nav" class="menu expanded"›.

Avec le thème par défaut de PluXml 5.4, vous devrez avoir:

‹ul id="static-nav" class="menu expanded"›
	‹?php
		$plxShow-›staticList(
			$plxShow-›getLang('HOME'),
			'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›',
			'‹a href="javascript:void(0)" class="#group_class"›#group_name‹/a›'
		);
	?›
	‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›
‹/ul›

Table des matieres

Déplacer le menu Blog

Par défaut le menu "Blog" est affiché à la fin de la liste des menus des pages statiques. Ce menu Blog n'apparait que lorsqu'une page statique est configurée comme Page d'accueil. Depuis la version 5.3 de PluXml il est possible de déplacer ce menu pour le positionner n'importe où dans la liste des pages statiques.

Voyons comment déplacer le menu blog en exemple.

Petit rappel pour commencer: pour configurer une page statique comme "Page d'accueil", allez dans la gestion des pages statiques et pour la page statique désirée cochez la case correspondante dans la colonne Page d'accueil, puis cliquez sur le bouton Modifier la liste des pages statiques. Le menu Blog apparaitra sur votre site alors automatiquement à la suite des menus des pages statiques.

La liste des pages statiques, et donc aussi du menu blog, est affichée grâce au code suivant que l'on trouve dans le fichier header.php stocké dans le dossier du thème de son site.

‹ul id="static-nav"›
	‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›
	‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›
‹/ul›

La fonction staticList() permet d'afficher la liste des pages statiques, tandis que la fonction pageBlog() affiche le menu "Blog" lorsqu'une page statique est définie comme page d'accueil.

Pour déplacer le menu Blog en première position, vous pouvez tout simplement déplacer la ligne avec l'instruction pageBlog() de cette façon:

‹ul id="static-nav"›
	‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/a›‹/li›'); ?›
	‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›
‹/ul›

Le menu "Blog" sera affiché en première position.

Autre cas de figure qui ne peut être réalisé qu'à partir de la version 5.3 de PluXml: positionner le menu "Blog" entre les menus "Statique 1" et "Statique 2".
Pour cela, utilisez le code suivante:

‹ul id="static-nav"›
	‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›', '', 3); ?›
‹/ul›

Pour déplacer le menu Blog, nous n'avons plus besoin de l'instruction pageBlog(): la ligne avec cette instruction a été supprimée.
En revanche nous avons rajouté deux paramètres à la fonction staticList().

Les paramètres utilisés sont les suivants;

Paramètre 1: titre du menu Acceuil

Paramètre 2: format d'affichage des différents menus

Paramètre 3: (optionnel) format du texte pour chaque groupe de pages

Paramètre 4: position du menu Blog. Ici la valeur 3 permet de positionner le menu Blog entre "Statique 1" et "Statique 2"

C'est donc en renseignant le quatrième paramètre de la fonction staticList() que le menu Blog peut être déplacé.

Table des matieres

Comment trier le nuage de tags

Le nuage de tags est affiché principalement dans la sidebar du site grâce aux lignes de code suivantes que l'on trouve dans le fichier sidebar.php stocké dans le dossier de son thème

‹ul›
	‹?php $plxShow-›tagList('‹li class="tag #tag_size"›‹a class="#tag_status" href="#tag_url" title="#tag_name"›#tag_name‹/a›‹/li›', 20); ?›
‹/ul›

La fonction utilisée tagList() de la classe plxShow accepte depuis la version 5.3 de PluXml un troisième paramètre permettant de trier l'affichage des mots clés du nuage de tags. Mais commençons par un petit rappel sur l'utilisation de cette fonction et des différents paramètres qu'elle utilise.

Paramètre 1: format d'affichage des tags

Le premier paramètre de la fonction tagList() permet de formater l'affichage de chaque mot clé dans la liste html ‹ul›

'‹li class="tag #tag_size"›‹a class="#tag_status" href="#tag_url" title="#tag_name"›#tag_name‹/a›‹/li›'

Signification des variables utilisées:

#tag_size: renvoie la taille de 1 à 10: plus la taille est grande, plus le mot clé est utilisé dans des articles. permet de personnaliser l'affichage en utilisant une classe css. L'article suivant vous expliquera comment utiliser la taille des tags pour leur donner une couleur différente en fonction du nombre d'utilisation PluXml: Rajouter des couleurs dans son nuage de tags

#tag_status: renvoie la valeur "active" si le mot clé est sélectionné et permet de mettre en évidence la sélection par une classe css

#tag_url: url du tag permettant d'afficher tous les articles référencés avec le mot clé lorsqu'on clique dessus

#tag_name: nom du tag

D'autres variables sont également disponibles

#tag_id: renvoie un identifiant unique composé à partir du nom du tag (exemple: tag-pluxml)

#nb_art: renvoie le nombre d'articles associé au tag

Paramètre 2: nombre de tags à afficher

Le deuxième paramètre permet de limiter le nombre des tags à afficher. En spécifiant par exemple la valeur 20, seuls les vingt premiers tags trouvés sont affichés dans le nuage de tags.

Paramètre 3: tri des tags

Le troisième paramètre permet de trier les tags soit par ordre alphabétique, soit par ordre aléatoire.

alpha: trie les tags par ordre alphabétique

random: trie les tags par ordre aléatoire

Exemple:

‹ul›
	‹?php $plxShow-›tagList('‹li class="tag #tag_size"›‹a class="#tag_status" href="#tag_url" title="#tag_name"›#tag_name‹/a›‹/li›', 20, 'alpha'); ?›
‹/ul›

Table des matieres

Afficher le menu d'une catégorie dans la barre des menus des pages statiques

La barre des menus horizontaux généralement affichée dans la plupart des thèmes de PluXml, correspond à la liste des pages statiques visibles et actives.
Toujours dans un esprit de personnlisation de son thème, il est peut être utile voir intéressant de rajouter dans cette liste de menus, un menu donnant accès au contenu d'une catégorie d'articles. Voyons comment rajouter ce menu et quel code php utiliser.

Le code utilisé pour afficher la liste des pages statiques sous forme de menus est dans le fichier header.php du thème et est identifiable par les lignes suivantes:

‹ul›
	‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›
	‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/li›'); ?›
‹/ul›

La ligne avec la fonction staticList permet d'afficher le menu Accueil et la liste des pages statiques, tandis que la fonction pageBlog affiche le lien "Blog" si une page statique a été définie comme page d'accueil du site.

Le bout de code suivant permet d'afficher le menu d'une catégorie en formatant le lien pour l'intégrer dans la liste des pages statiques en tenant compte de la réécriture d'url et de la mise en surbrillance du lien lorsque celui est sélectionné (les classes css .active et .noactive sont utilisées à cet effet).

‹?php
$idCat = '001';
if(isset($plxMotor-›aCats[$idCat])) {
	if($plxMotor-›aCats[$idCat]['menu']=='oui' AND $plxMotor-›aCats[$idCat]['active']) {
		$id = 'cat-'.intval($idCat);
		$url = $plxMotor-›urlRewrite('?categorie'.intval($idCat).'/'.$plxMotor-›aCats[$idCat]['url']);
		$name = plxUtils::strCheck($plxMotor-›aCats[$idCat]['name']);
		$active = ($plxShow-›catId()==intval($idCat)?'active':'noactive');
		echo '‹li id="'.$id.'"›‹a class="'.$active.'" title="'.$name.'" href="'.$url.'"›'.$name.'‹/a›‹/li›';
	}
}
?›

Pour rappel, chaque catégorie est identifiable par un numéro unique sur trois caractères: par exemple 001. Pour connaitre l'identifiant d'une catégorie il suffit d'aller dans la gestion des catégories (menu Catégories) de la zone d'administration. Les numéros sont affichés dans la colonne "Identifiant" du tableau listant toutes les catégories. Pour afficher votre catégorie, modifiez donc la ligne suivante en remplaçant 001 par le numéro de catégorie souhaitée.

$idCat = '001';

Notez que le menu ne sera affiché que si la catégorie est active et que le paramètre de la colonne "Menu" dans la gestion des catégories est réglé sur "Afficher".

Le code est à ajouter dans le fichier header.php stocké dans le dossier de votre thème, de manière à obtenir par exemple les lignes suivantes:

‹ul›
	‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'‹li id="#static_id"›‹a href="#static_url" class="#static_status" title="#static_name"›#static_name‹/a›‹/li›'); ?›
	‹?php
	$idCat = '001';
	if(isset($plxMotor-›aCats[$idCat])) {
		if($plxMotor-›aCats[$idCat]['menu']=='oui' AND $plxMotor-›aCats[$idCat]['active']) {
			$id = 'cat-'.intval($idCat);
			$url = $plxMotor-›urlRewrite('?categorie'.intval($idCat).'/'.$plxMotor-›aCats[$idCat]['url']);
			$name = plxUtils::strCheck($plxMotor-›aCats[$idCat]['name']);
			$active = ($plxShow-›catId()==intval($idCat)?'active':'noactive');
			echo '‹li id="'.$id.'"›‹a class="'.$active.'" title="'.$name.'" href="'.$url.'"›'.$name.'‹/a›‹/li›';
		}
	}
	?›
	‹?php $plxShow-›pageBlog('‹li id="#page_id"›‹a class="#page_status" href="#page_url" title="#page_name"›#page_name‹/li›'); ?›
‹/ul›

Table des matieres

Donnez du style à vos titres

Envie de changer la police de caractère utilisée pour votre titre en remplaçant les classiques Arial, Helvetica ou autre Serif par une fonte plus attrayante ? Je vous propose de mettre en place des webfonts dans le thème de votre PluXml pour personnaliser l'apparence des titres.

Étape 1: Trouver la fonte de son choix

Les sites pour trouver des fontes, généralement au format ttf, sont nombreux. Voici deux liens qui proposent de nombreuses polices à télécharger.

http://www.fontsquirrel.com/

http://www.dafont.com/fr/

Étape 2: Convertir la police ttf aux formats pour le web

Le format ttf ne suffit pas pour être utilisé sur un site web car tous les navigateurs ne reconnaissent pas ce format. Il faut donc passer par un outil de convertion qui créera les fichiers et formats manquants.

Après avoir récupéré la fonte de votre choix au format .ttf, je vous propose d'utiliser l'outil de conversion disponible sur le site fontsquirrel: Webfont Generator.

Son utilisation est très simple:

Cliquez sur le bouton "Add Fonts" et sélectionnez votre fichier .ttf

Laissez l'option par défaut "Optimal" sélectionnée

Cochez "Yes, the fonts I'm uploading are legally eligible for web embedding"

Cliquez sur le bouton "DOWNLOAD YOU KIT"

Étape 3: Copier les fichiers dans votre PluXml

Créez un dossier fonts dans le dossier de votre thème, pour obtenir par exemple:

/themes/defaut/fonts

Note: defaut correspond au nom du thème par défaut de PluXml.

Après avoir téléchargé et décompressé le fichier généré par l'outil de conversion (voir étape 2), récupérez tous les fichiers avec les extensions .eot, .svg, .tff et .woff et copiez les dans le dossier fonts créé précedemment.

Étape 4: Déclaration des fontes dans la feuille de style de PluXml

Dans le dossier qui contient les fichiers des polices après la décompression de l'archive téléchargée, il y a aussi un fichier stylesheet.css. Éditez ce fichier et récupérez les lignes de code présentes. Faites un copier-coller de ces lignes au début du fichier style.css de votre thème dans /themes/defaut/style.css. Elles correspondent aux instructions à ajouter dans le feuille de style du thème de PluXml pour utiliser les nouvelles fontes.

Exemple de code à copier:

@font-face {
    font-family: 'desyrelregular';
    src: url('fonts/desyrel-webfont.eot');
    src: url('fonts/desyrel-webfont.eot?#iefix') format('embedded-opentype'),
         url('fonts/desyrel-webfont.woff') format('woff'),
         url('fonts/desyrel-webfont.ttf') format('truetype'),
         url('fonts/desyrel-webfont.svg#desyrelregular') format('svg');
    font-weight: normal;
    font-style: normal;
}

Notez ici le nom de la police à identifier sur la ligne suivante

    font-family: 'desyrelregular';

Notez également l'emplacement des fichiers .eot, .woff, .ttf et .svg dans le dossier fonts

Exemple: le fichier desyrel-webfont.eot est stocké dans le dossier fonts (chemin relatif par rapport au fichier style.css du thème de PluXml)

    src: url('fonts/desyrel-webfont.eot');

'desyrelregular' après l'instruction font-family est le nom de la nouvelle police de caractère.

Étape 5: Personnalisation des titres de PluXml avec la nouvelle police de caractère

Il ne reste plus maintenant qu'à changer la police de caractère utilisée pour les titres de PluXml que vous voulez changer. Ici les cas de figure peuvent être différents en fonction de votre thème actuel car le fichier de style style.css ne sera pas le même en fonction des thèmes. A titre d'exemple je vais prendre le thème par défaut de PluXml (version 5.2 au moment de la rédaction de cet article). Cela vous donnera des indications pour modifier votre propre thème.

Pour modifier la police du titre du site, éditez le fichier themes/defaut/style.css et remplacez le code suivant

body › header h1 {
	font-size: 2.2em;
	margin: 0;
}

par

body › header h1 {
	font-family: 'desyrelregular';
	font-size: 2.2em;
	margin: 0;
}

Ici la déclaration de la police 'desyrelregular' est ajoutée grâce à l'instruction font-family.

Pour modifier la police du titre des articles, éditez le fichier themes/defaut/style.css et remplacez le code suivant

article h1,
article h1 a {
	color: #444;
	font-weight: bold;
	line-height: 1.1;
	margin: 0;
}

par

article h1,
article h1 a {
	font-family: 'desyrelregular';
	color: #444;
	font-weight: bold;
	line-height: 1.1;
	margin: 0;
}

Ici aussi la ligne font-family: 'desyrelregular'; permet de spécifier la fonte à utiliser.

Résultat obtenu après utilisation d'une webfont

De la même façon, maintenant vous pouvez définir le style des titres de niveau ‹h2›, ‹h3›, voir même du texte utilisé pour le chapo ou le contenu des articles.

Table des matieres

Afficher une sidebar différente pour chaque page statique

Voici une petite astuce pour afficher une sidebar différente pour chaque page statique.
L'idée est d'avoir plusieurs fichiers sidebar avec un contenu et une mise en forme différente adaptés à chaque page statique. Voyons comment mettre en place ces fichiers et les utiliser.

Imaginons que nous voulons trois sidebars différentes: il nous faut donc trois fichiers

sidebar-1.php : sidebar correspondant à la page statique avec l'identifiant 001

sidebar-2.php : sidebar correspondant à la page statique avec l'identifiant 002

sidebar-3.php : sidebar correspondant à la page statique avec l'identifiant 003

Dans le dossier de notre thème, prenons par exemple le thème par défaut stocké dans le dossier themes/defaut/, créez ces trois fichiers. Il suffit de dupliquer le fichier sidebar.php et de donner aux fichiers le nom sidebar-1.php, sidebar-2.php et sidebar-3.php.
Modifiez et adaptez ces fichiers en fonction de vos besoins.

Pour rappel, les pages statiques sont affichées grâce au fichier static.php, dans lequel l'instruction suivante permet d'afficher la sidebar (fichier sidebar.php)

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

Remplacez donc cette ligne par le code ci-dessous:

‹?php
	$sidebar = dirname(__FILE__).'/sidebar-'.$plxShow-›staticId().'.php';
	if(file_exists($sidebar))
		include($sidebar);
	else
		include(dirname(__FILE__).'/sidebar.php');
?›

Nous utilisons ici la fonction staticId() de la classe plxShow (fichier core/lib/class.plx.show.php) qui renvoie la valeur numérique de l'identifiant de la page statique en cours de visualisation.
Ainsi, lorsqu'on visualise la page statique avec l'identifiant 001, la fonction staticId() renvoie la valeur 1.

Ce que fait le nouveau code est de regarder si le fichier sidebar-1.php existe.

Si le fichier sidebar-1.php est présent alors on affiche le contenu du fichier sidebar-1.php
Sinon on affiche la sidebar par défaut, c'est à dire le fichier sidebar.php

Le principe est le même si on est sur la page 002 (sidebar-2.php) ou sur la page statique 003 (fichier sidebar-3.php). S'il n'y a pas de fichier sidebar dédié, c'est le fichier sidebar.php qui est utilisé.

Voilà vous pouvez donc préparer autant de fichier sidebar que nécessaire pour vos pages statiques.

Une autre méthode aurait été d'utiliser un template différent pour chaque page statique en y adaptant le contenu de la sidebar.

Table des matieres

Modifier l'affichage du chapo en mode article

Voici une astuce pour avoir un affichage différent du chapo et du contenu d'un article en mode article, c'est à dire lors de la visualisation du détail d'un article.

Comme toujours, je prends comme référence le thème par défaut de PluXml (5.2), stocké dans le dossier themes/defaut.

Modifications

Editez le fichier article.php et remplacez les lignes suivantes:

‹section›
	‹?php $plxShow-›artContent(); ?›
‹/section›

par

‹section›
	‹div class="chapo"›
		‹?php $plxShow-›artChapo('', false); ?›
	‹/div›
	‹?php $plxShow-›artContent(false); ?›
‹/section›

Editez le fichier style.css du thème et ajoutez à la fin du fichier les lignes suivantes:

.chapo {
	margin-top: 15px;
	font-size: 12px;
	font-style:italic;
}

Explications

Affichage du chapo

Pour afficher uniquement le chapo en mode article nous utilisons la fonction suivante:

$plxShow-›artChapo('', false); ?›

Le premier paramètre sert à formater le lien "Lire la suite". Comme nous sommes en mode article, nous n'avons pas besoin de cet affichage, c'est pourquoi le paramètre est à blanc.

Le deuxième paramètre est un booléen qui permet d'afficher le contenu de l'article.
Si le paramètre est true, le contenu de l'article est affiché.
Si le paramètre est false, le contenu de l'article n'est pas affiché.

Ici nous ne voulons pas afficher le contenu de l'article car nous allons utiliser pour cela l'instruction $plxShow-›artContent().

Remarquez que nous avons utilisé une balise ‹div› pour englober l'affichage du chapo. C'est cette balise ‹div› qui nous permet de personnaliser l'affichage grâce à la feuille de style en définissant les proprités de la classe .chapo (voir plus bas le paragraphe: Mise en forme du chapo).

Affichage du contenu

Pour afficher le contenu de l'article nous utilisons l'instruction:

$plxShow-›artContent(false);

$plxShow-›artContent() permet à la fois d'afficher le chapo et le contenu de l'article.
Ici nous ne voulons pas afficher le chapo car nous l'avons fait précedemment avec l'instruction $plxShow-›artChapo().
Pour ne pas afficher le chapo, il suffit de passer la valeur false comme paramètre à $plxShow-›artContent().

Mise en forme du chapo

Le chapo étant englober dans une balise ‹div› identifiée par la classe chapo, il ne reste plus qu'à définir ses propriétés dans la feuille de style (fichier style.css) du thème.

.chapo {
	margin-top: 15px;
	font-size: 12px;
	font-style:italic;
}

Il est donc possible ici de changer la taille de la police de caractère utilisée, la couleur, les marges ou padding du bloc ‹div› pour personnaliser le chapo.

A vous maintenant d'imaginer votre style de présentation.

Table des matieres

Changer le titre du menu Accueil

Il y a deux solutions pour changer le titre du menu Accueil.

Solution 1

Le thème par défaut est un thème multi-langues. La langue utilisée peut être changée à partir de la zone d'administration en allant dans le menu Paramètres › Configuration de base et en modifiant la valeur de la liste déroulante Langue par défaut du site.

Les clés de traduction sont stockées dans les fichiers du dossier themes/defaut/lang.
Ainsi dans le fichier fr.php de ce dossier on trouve la ligne:

'HOME'					=› 'Accueil',

En changeant Accueil par le titre de remplacement souhaité, le titre du menu sera changé.

La même modification est à faire dans tous les fichiers de langue du dossier themes/defaut/lang si vous utilisez d'autres langues que le français.

Solution 2

La deuxième solution est plus simple et rapide. Elle consiste à modifer directement le fichier header.php.

Éditez le fichier themes/defaut/lang/header.php.

Localisez la ligne suivante:

‹?php $plxShow-›staticList($plxShow-›getLang('HOME'),'

#static_name

'); ?›

Remplacez le texte suivant par le titre que vous souhaitez afficher

$plxShow-›getLang('HOME')

Exemple:

‹?php $plxShow-›staticList('Page d\'accueil','

#static_name

'); ?›

Table des matieres

Validation des commentaires en jQuery

Avec ce tutoriel nous allons voir comment valider en jQuery les champs de saisie du formulaire des commentaires. L'objectif est d'afficher des messages "Champ obligatoire", "Adresse email invalide", "Url invalide" lorsque les critères de saisie ne seront pas corrects.

Pour la démo, j'utilise:

Le thème par défaut de PluXml 5.1.7,

jQuery 1.10.2,

le plugin jQuery de validation des formulaires jQuery Validation Plugin.

Mode d'emploi...

Pré-requis

Commencez par téléchargez les fichiers jquery.min.js et jquery.validate.min.js
Déposez ces fichiers dans le dossier de votre thème: themes/defaut/js/

Installation

Editez le fichier header.php de votre thème.
Avant la ligne ‹/head›, ajoutez le code suivant:

‹?php if($plxShow-›mode()=='article') : ?›
‹!-- ‹comments validation› --›
‹script src="‹?php $plxShow-›template(); ?›/js/jquery-1.10.2.min.js"›‹/script›
‹script src="‹?php $plxShow-›template(); ?›/js/jquery.validate.min.js"›‹/script›

‹script type="text/javascript"›
$(document).ready(function(){
	$("#commentform").validate({
		messages: {
			name: "Champ obligatoire",
			site: "Url invalide",
			mail: {
				required: "Champ obligatoire",
				email: "Adresse email invalide"
			},
			content: "Champ obligatoire"
		}
	});
});
‹/script›
‹style type="text/css"›
#commentform label.error {
	width: auto;
	display: block;
	color: #ff0000;
	margin:5px 0;
	padding:0;
	font-size: 11px;
}
#commentform p {
	margin-top: 15px;
}
input, textarea {
	margin: 0 !important;
}
‹/style›
‹!-- ‹/comments validation› --›
‹?php endif; ?›

Editez le fichier commentaires.php de votre thème.
Supprimer les lignes suivantes,

		‹form action="‹?php $plxShow-›artUrl(); ?›#form" method="post"›
			‹fieldset›
				‹p›‹label for="id_name"›‹?php $plxShow-›lang('NAME') ?› :‹/label›‹/p›
				‹p›‹input id="id_name" name="name" type="text" size="20" value="‹?php $plxShow-›comGet('name',''); ?›" maxlength="30" /›
				‹/p›
				‹p›
					‹label for="id_site"›‹?php $plxShow-›lang('WEBSITE') ?› :‹/label›
				‹/p›
				‹p›
					‹input id="id_site" name="site" type="text" size="20" value="‹?php $plxShow-›comGet('site',''); ?›" /›
				‹/p›
				‹p›
					‹label for="id_mail"›‹?php $plxShow-›lang('EMAIL') ?› :‹/label›
				‹/p›
				‹p›
					‹input id="id_mail" name="mail" type="text" size="20" value="‹?php $plxShow-›comGet('mail',''); ?›" /›
				‹/p›
				‹p›
					‹label for="id_content" class="lab_com"›‹?php $plxShow-›lang('COMMENT') ?› :‹/label›
				‹/p›
				‹p›
					‹textarea id="id_content" name="content" cols="35" rows="6"›‹?php $plxShow-›comGet('content',''); ?›‹/textarea›
				‹/p›
				‹p class="com-alert"›
					‹?php $plxShow-›comMessage(); ?›
				‹/p›
				‹p›
					‹?php if($plxShow-›plxMotor-›aConf['capcha']): ?›
					‹label for="id_rep"›‹strong›‹?php echo $plxShow-›lang('ANTISPAM_WARNING') ?›‹/strong› :‹/label›
				‹/p›
				‹p›
					‹?php $plxShow-›capchaQ(); ?› : ‹input id="id_rep" name="rep" type="text" size="10" /›
					‹?php endif; ?›
				‹/p›
				‹p›
					‹input type="submit" value="‹?php $plxShow-›lang('SEND') ?›" /›
				‹/p›
			‹/fieldset›
		‹/form›

et remplacez les par le code suivant:

		‹form action="‹?php $plxShow-›artUrl(); ?›#form" method="post" id="commentform"›
			‹fieldset›
				‹p›
					‹label for="id_name"›‹?php $plxShow-›lang('NAME') ?› :‹/label›‹/p›
					‹input class="required" id="id_name" name="name" type="text" size="20" value="‹?php $plxShow-›comGet('name',''); ?›" maxlength="30" /›
				‹/p›
				‹p›
					‹label for="id_site"›‹?php $plxShow-›lang('WEBSITE') ?› :‹/label›
					‹input class="url" id="id_site" name="site" type="text" size="20" value="‹?php $plxShow-›comGet('site',''); ?›" /›
				‹/p›
				‹p›
					‹label for="id_mail"›‹?php $plxShow-›lang('EMAIL') ?› :‹/label›
					‹input class="required email" id="id_mail" name="mail" type="text" size="20" value="‹?php $plxShow-›comGet('mail',''); ?›" /›
				‹/p›
				‹p›
					‹label for="id_content" class="lab_com"›‹?php $plxShow-›lang('COMMENT') ?› :‹/label›
					‹textarea class="required" id="id_content" name="content" cols="35" rows="6"›‹?php $plxShow-›comGet('content',''); ?›‹/textarea›
				‹/p›
				‹p class="com-alert"›
					‹?php $plxShow-›comMessage(); ?›
				‹/p›
				‹p›
					‹?php if($plxShow-›plxMotor-›aConf['capcha']): ?›
					‹label for="id_rep"›‹strong›‹?php echo $plxShow-›lang('ANTISPAM_WARNING') ?›‹/strong› :‹/label›
				‹/p›
				‹p›
					‹?php $plxShow-›capchaQ(); ?› : ‹input id="id_rep" name="rep" type="text" size="10" /›
					‹?php endif; ?›
				‹/p›
				‹p›
					‹input type="submit" value="‹?php $plxShow-›lang('SEND') ?›" /›
				‹/p›
			‹/fieldset›
		‹/form›

Sauvegardez les fichiers. Voilà notre système de validation est en place.

Explications

Au niveau du formulaire des commentaires, nous avons mis en place poour la balise ‹form› un id

id="commentform"

Nous avons rajouté pour les champs à controler une classe avec les mots clés gérés par le script de validation.

Exemple: pour le champ Vote nom ou votre pseudo

class="required"

Le mot clé required impose la saisie obligatoire.

Exemple: pour le champ Votre site Internet

class="url"

Le mot clé url impose la saisie d'une url valide.

Exemple: pour le champ Votre adresse e-mail

class="required email"

Le mot clé required impose la saisie obligatoire, et le mot clé email impose une adresse email valide.

Toutes la liste des mots clés sont disponibles sur la page de documentation du plugin: Documentation

Les messages à afficher en cas d'erreurs sont spécifiés avec le bout de code suivante

‹script type="text/javascript"›
$(document).ready(function(){
	$("#commentform").validate({
		messages: {
			name: "Champ obligatoire",
			site: "Url invalide",
			mail: {
				required: "Champ obligatoire",
				email: "Adresse email invalide"
			},
			content: "Champ obligatoire"
		}
	});
});
‹/script›

Le comportement visuel des messages (couleur rouge, positionnement en dessous des champs) est fait avec ce code:

‹style type="text/css"›
#commentform label.error {
	width: auto;
	display: block;
	color: #ff0000;
	margin:5px 0;
	padding:0;
	font-size: 11px;
}
#commentform p {
	margin-top: 15px;
}
input, textarea {
	margin: 0 !important;
}
‹/style›

Le code css peut être déporté dans le fichier style.css de votre thème.

Petite remarque: afin de ne prendre en compte la validation que lors de la visualisation d'un article, je fais un test sur le mode d'affichage en cours pour ne charger les scripts et le code nécessaire qu'en mode article

‹?php if($plxShow-›mode()=='article') : ?›
...
‹?php endif; ?›

En cas de problèmes

Quelques pistes à vérifier si le système de validation des commentaires ne fonctionne pas:

Est-ce que les fichiers jquery.min.js et jquery.validate.min.js sont bien présents dans le dossier themes/defaut/js ?

Est-ce que jquery est utilisé plusieurs fois sur votre site, où plusieurs versions différentes viendraient en conflit ? Veuillez à n'avoir jquery de charger qu'une seule fois.

Utilisez-vous le plugin jquery qui viendrait en conflit avec jQquery 1.10.2 chargé au début de la page header.php

Avez-vous bien respecter la procédure d'installation et le copier-coller

Si les messages d'erreurs s'affichent mal, les propriétés css rentrent peut-être en conflit avec celles de votre feuille de style (fichier style.css)

N'hésitez pas à tester le système de validation des commentaires avec le thème par défaut de PluXml pour vous assurez qu'il est opérationnel et comprendre son fonctionnement. Cela vous sera plus facile pour l'adapter et l'intégrer à votre site. Les problèmes sont souvent liés à l'organisation de votre thème.

Table des matieres

Créer une pagination pour les commentaires

Je vous propose de mettre en place un système de pagination pour les commentaires à base de jQuery.
Pour ce tutoriel je me base sur:

Le thème par défaut de PluXml 5.1.7,

jQuery 1.10.2,

le script de pagination Paginate.

Mode d'emploi...

Installation

Commencez par télécharger cette archive et décompressez le fichier .zip dans le dossier de votre thème. Pour la démo j'utilise le thème par défaut de PluXml stocké dans le dossier themes/defaut. Ce fichier .zip contient les scripts javascript pour faire fonctionner le système de pagination des commentaires.

Editez le fichier header.php de votre thème.
Avant la ligne ‹/head›, ajoutez le code suivant:

‹?php if($plxShow-›mode()=='article') : ?›
‹!-- ‹comments pagination› --›
‹script src="‹?php $plxShow-›template(); ?›/paginate/paginate.min.js"›‹/script›
‹script›
$(document).ready(function(){
	$('#paginate_container').pajinate({
		item_container_id:'.paginate_content',
		nav_panel_id:'.paginate_navigation',
		items_per_page:5,
		nav_label_first:'«', // premier
		nav_label_prev:'‹', // précédent
		nav_label_next:'›', // suivant
		nav_label_last:'»', // dernier
		abort_on_small_lists:true
	});

	$('.page_navigation a').click(function(){
		var new_position = $('#comments').offset();
		window.scrollTo(new_position.left,new_position.top);
		return false;
	});

});
‹/script›
‹style›
#paginate_container li{
	list-style: none;
	padding:0;
	margin:0;
}
.paginate_navigation {
	margin: 0 0 15px 60px;
}
.paginate_navigation a, .alt_paginate_navigation a{
	margin:0 7px 0 0;
	text-decoration:none;
	font-family: Tahoma;
	font-size: 12px;
	color:#666;
}
.active_page{
	color:#ff0000 !important;
}
‹/style›
‹!-- ‹/comments pagination› --›
‹?php endif; ?›

Editez le fichier commentaires.php de votre thème.
Supprimer les lignes suivantes,

	‹div id="comments"›

	‹h2›
		‹?php echo $plxShow-›artNbCom() ?›
	‹/h2›

		‹?php while($plxShow-›plxMotor-›plxRecord_coms-›loop()): # On boucle sur les commentaires ?›

		‹div id="‹?php $plxShow-›comId(); ?›" class="comment"›
			‹blockquote›
				‹p class="info_comment"›‹a class="num-com" href="‹?php $plxShow-›ComUrl() ?›" title="#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›i+1 ?›"›#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›i+1 ?›‹/a› ‹?php $plxShow-›comDate('#day #num_day #month #num_year(4) @ #hour:#minute'); ?› ‹?php $plxShow-›comAuthor('link'); ?› ‹?php $plxShow-›lang('SAID') ?› : ‹/p›
				‹p class="content_com type-‹?php $plxShow-›comType(); ?›"›‹?php $plxShow-›comContent() ?›‹/p›
			‹/blockquote›
		‹/div›

		‹?php endwhile; # Fin de la boucle sur les commentaires ?›

		‹div class="rss"›
			‹?php $plxShow-›comFeed('rss',$plxShow-›artId()); ?›
		‹/div›

	‹/div›

et remplacez les par le code suivant:

	‹div id="comments"›

	‹h2›
		‹?php echo $plxShow-›artNbCom() ?›
	‹/h2›

	‹div id="paginate_container"›
		‹ul class="paginate_content"›
		‹?php while($plxShow-›plxMotor-›plxRecord_coms-›loop()): # On boucle sur les commentaires ?›
		‹li›
		‹div id="‹?php $plxShow-›comId(); ?›" class="comment"›
			‹p class="info_comment"›‹a class="num-com" href="‹?php $plxShow-›ComUrl() ?›" title="#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›i+1 ?›"›#‹?php echo $plxShow-›plxMotor-›plxRecord_coms-›i+1 ?›‹/a› ‹?php $plxShow-›comDate('#day #num_day #month #num_year(4) @ #hour:#minute'); ?› ‹?php $plxShow-›comAuthor('link'); ?› ‹?php $plxShow-›lang('SAID') ?› : ‹/p›
			‹p class="content_com type-‹?php $plxShow-›comType(); ?›"›‹?php $plxShow-›comContent() ?›‹/p›
		‹/div›
		‹/li›
		‹?php endwhile; # Fin de la boucle sur les commentaires ?›
		‹/ul›
		‹div class="paginate_navigation"›‹/div›
	‹/div›

	‹div class="rss"›
		‹?php $plxShow-›comFeed('rss',$plxShow-›artId()); ?›
	‹/div›

	‹/div›

Sauvegardez les fichiers. Voilà le système de pagination est en place.

Explications

Paginate est un script javascript qui utilise jQuery pour créer un système de pagination à partir d'une liste html.
Pour fonctionner il faut:

un bloc containeur appelé paginate_container

une liste d'éléments appelée paginate_content

un bloc paginate_navigation qui recevra le sytème de pagination

Exemple:

‹div id="paginate_container"›
	‹ul class="paginate_content"›
		‹li›
			‹p›One‹/p›
		‹/li›
		‹li›
			‹p›Two‹/p›
		‹/li›
		‹li›
			‹p›Three‹/p›
		‹/li›
		‹li›
			‹p›Four‹/p›
		‹/li›
		‹li›
			‹p›Five‹/p›
		‹/li›
		‹li›
			‹p›Six‹/p›
		‹/li›
		‹li›
			‹p›Seven‹/p›
		‹/li›
		‹li›
			‹p›Eight‹/p›
		‹/li›
	‹/ul›
	‹div class="paginate_navigation"›‹/div›
‹/div›

Les paramètres du système de pagination sont les suivants:

	item_container_id:'.paginate_content',
	nav_panel_id:'.paginate_navigation',
	items_per_page:5,
	nav_label_first:'«', // premier
	nav_label_prev:'‹', // précédent
	nav_label_next:'›', // suivant
	nav_label_last:'»', // dernier
	abort_on_small_lists:true

item_container_id: nom du container principal

nav_panel_id: nom de bloc de pagination

items_per_page: nombre de commentaires par page

nav_label_first: libellé du lien permettant d'aller à la première page

nav_label_prev: libellé du lien permettant d'aller à la page précédente

nav_label_next: libellé du lien permettant d'aller à la page suivante

nav_label_last: libellé du lien permettant d'aller à la dernière page

abort_on_small_lists: si true pas d'affichage du système de commentaires quand peu de commentaires (autre valeur possible: false)

D'autres paramètres sont disponibles sur cette page.

Un problème du script paginate que j'ai trouvé est que lorsque l'on clique sur un numéro de page, l'affichage reste en bas de page, ce qui nous oblige à scroller vers le haut pour lire le premier commentaire de la liste affichée. J'ai donc écrit ce petit "hack" avec quelques lignes de jquery pour faire un scroll automatique de la page vers le haut dès que l'on clique sur un lien ‹a› dans la barre de navigation identifiée par la ‹div class="page_navigation"›

	$('.page_navigation a').click(function(){
		var new_position = $('#comments').offset();
		window.scrollTo(new_position.left,new_position.top);
		return false;
	});

Celui-ci ne fonctionnera que si dans la page commentaires.php la ligne suivante est présente.

‹div id="comments"›

Si besoin, changez dans le code #comments par l'id de la balise où il faut remonter.

Petite remarque: afin de ne prendre en compte le système de pagination que lors de la visualisation d'un article, je fais un test sur le mode d'affichage en cours pour ne charger les scripts et le code nécessaire qu'en mode article

‹?php if($plxShow-›mode()=='article') : ?›
...
‹?php endif; ?›

Pour personnaliser l'affichage de la barre de navigation, c'est au niveau du code css ajouté dans la balise ‹style› dans le fichier header.php

‹style›
#paginate_container li{
	list-style: none;
	padding:0;
	margin:0;
}
.paginate_navigation {
	margin: 0 0 15px 60px;
}
.paginate_navigation a, .alt_paginate_navigation a{
	margin:0 7px 0 0;
	text-decoration:none;
	font-family: Tahoma;
	font-size: 12px;
	color:#666;
}
.active_page{
	color:#ff0000 !important;
}
‹/style›

En jouant sur les différents propriétés css vous pourrez par exemple modifier la couleur des textes des pages et la couleur de fond.

En cas de problèmes

Quelques pistes à vérifier si le système de pagination des commentaires ne fonctionne pas:

Est-ce que le dossier paginate est bien présent dans votre thème de manière à avoir le répertoire themes/defaut/paginate ?

Est-ce que jquery est utilisé plusieurs fois sur votre site, où plusieurs versions différentes viendraient en conflit ?

Utilisez-vous le plugin jquery qui viendrait en conflit avec jQquery 1.10.2 chargé au début de la page header.php

Avez-vous bien respecter la procédure d'installation et le copier-coller

Si la barre de navigation s'affiche mal, les propriétés css rentrent peut-être en conflit avec celles de votre feuille de style (fichier style.css)

N'hésitez pas à tester le système de pagination des commentaires avec le thème par défaut de PluXml pour vous assurez qu'il est opérationnel et comprendre son fonctionnement. Cela vous sera plus facile pour l'adapter et l'intégrer à votre site. Les problèmes sont souvent liés à l'organisation de votre thème.

Table des matieres

Bonne pratique pour déclarer jQuery dans un plugin

Pour tester si jQuery est déjà présent en mémoire et éviter de le charger inutilement plusieurs fois, voici la déclaration à utiliser dans un plugin de PluXml.

‹script type="text/javascript"›
/* ‹![CDATA[ */
   if(typeof(jQuery) === "undefined") document.write(\'‹script  type="text/javascript" src="‹?php echo PLX_PLUGINS; ?›monPlugin/jquery-x.xx.x.min.js"›‹\/script›\');
/* !]]› */
‹/script›

Si vous le pouvez, n'hésiter pas à déclarer jQuery en fin de page en utilisant le hook ThemeEndBody pour la partie visiteur ou le hook AdminFootEndBody pour la partie administration.

Exemple avec le hook ThemeEndBody:

‹?php

class monPlugin extends plxPlugin {

	public function __construct($default_lang) {

        # appel du constructeur de la classe plxPlugin (obligatoire)
        parent::__construct($default_lang);

		$this-›addHook('ThemeEndBody', 'ThemeEndBody');

    }

	public function ThemeEndBody() {?›

‹script type="text/javascript"›
/* ‹![CDATA[ */
   if(typeof(jQuery) === "undefined") document.write(\'‹script  type="text/javascript" src="‹?php echo PLX_PLUGINS; ?›monPlugin/jquery-x.xx.x.min.js"›‹\/script›\');
/* !]]› */
‹/script›

	‹?php
	}
}
?›

Adaptez avec le nom de votre plugin (monPlugin) et compléter le numéro de version utilisé de jQuery dans le nom du fichier (jquery-x.xx.x.min.js).

src="monPlugin/jquery-x.xx.x.min.js"

Merci à Jerry Wham pour avoir partagé cette bonne pratique sur le forum de PluXml.

Table des matieres

Ajouter un contenu dans la sidebar en fonction d'une page statique

Voici une petite astuce très simple pour ajouter du contenu dans la sidebar en fonction de la page statique en cours de visualisation. Sa mise en place est très rapide et ne nécessite que quelques lignes de code à rajouter dans le fichier sidebar.php de son thème.

Éditer donc le fichier sidebar.php et coller les lignes suivantes à l'endroit où vous souhaitez afficher votre texte.

‹?php
	if($plxMotor-›mode=='static' AND $plxMotor-›cible=='002') {
		echo "Texte à afficher lors de la visualisation de la page statique 002";
	}
?›

Remplacer la valeur 002, par l'identifiant de la page statique qui conditionne l'affichage du texte.
L'identifiant de la page concernée est à récupérer dans l'administration des pages statiques. Il est de la forme 001, 002,... (voir colonne Identifiant).

Pour afficher une image vous pouvez remplacer la ligne:

echo "Texte à afficher lors de la visualisation de la page statique 002";

par

echo '‹img src="data/images/monimage.jpg" alt="" title="Mon image" /›';

Adapter le bon chemin de l'image en modifiant data/images/monimage.jpg

Table des matieres

Afficher le contenu d'une page statique dans la sidebar

Pour afficher le contenu d'une page statique dans la sidebar, nous allons procéder en deux étapes.

Etape 1: création d'une page statique

créer une page nouvelle page statique dans l'administration des pages statiques,

donnez lui comme titre par exemple Sidebar,

sélectionner la valeur Oui dans la colonne Active,

sélectionner la valeur Masquer dans la colonne Menu,

cliquez sur le bouton Modifier la liste des pages statiques pour créer la nouvelle page.

Éditer votre page en cliquant sur son lien Éditer pour y ajouter le contenu que vous voulez afficher dans la sidebar en remplissant le champ Contenu. Il n'est pas nécessaire de remplir les autres champs: vous pouvez les laisser vides.

Sauvegardez en cliquant sur le bouton Enregistrer cette page statique.

Etape 2: modification du fichier sidebar.php

Éditer le fichier sidebar.php de votre thème et ajoutez les lignes suivantes à l'endroit où vous souhaitez afficher le contenu de la page statique 002.

‹?php $plxShow-›staticInclude('002') ?›

Remplacer la valeur '002' par l'identifiant de votre page statique Sidebar à récupérer dans l'administration des pages statiques (colonne Identifiant).

Cette méthode à l'avantage qu'une fois mise en place, il est très facile de changer les données affichées dans la sidebar en éditant simplement le contenu de la page statique.

Table des matieres

Ajoutez une signature dans vos flux rss

Savez-vous qu'il est possible de rajouter une signature (texte ou image) ou une publicité dans les flux rss de vos articles rédigés avec PluXml ?

Rendez-vous dans la partie d'administration de votre site. Cliquez sur les menus Paramètres, puis Configuration avancée. Dans la zone Texte à ajouter comme signature au bas de chaque flux Rss des articles, saisissez au format html le texte à afficher à la fin de vos flux rss.

Cliquez sur le bouton "Modifier les options d'affichage" pour enregister les modifications.

Table des matieres

un nouvel écran de gestion des plugins ?

Pour la prochaine version de PluXml (la version actuelle est la 5.1.7), des petits changements seront visibles sur l'écran de gestion des plugins.

Vous étiez plusieurs à signaler sur le forum de PluXml qu'il était difficile de distinguer visuellement les plugins actifs de ceux inactifs. Voilà qui va être résolu avec deux menus distincts: un menu "Plugins actifs" et "Plugins inactifs". Une case à cocher est également prévue pour sélectionner en une fois tous les plugins de la page, ce qui permettra de tout activer ou désactiver rapidement.
Comme vous pouvez le voir ces modifications ne sont pas une révolution en soi, mais cela fait partie de ces petits détails qui améliorent l'ergonomie et rend l'outil plus compréhensible et accessible.

A noter également qu'une partie du moteur des plugins a été réécrite pour optimiser le temps de chargement et l'occupation mémoire. En contrepartie il pourra y avoir un impact sur le fonctionnement de certains plugins qu'il faudra corriger pour qu'ils (re)deviennent compatibles. Rien de bien méchant mais si vous avez utilisez le type d'instruction comme ci-dessous, attendez-vous à déployer un correctif pour vos plugins.

$this-›plxMotor-›plxPlugins-›aPlugins['monPlugin']['instance']

sera à remplacer tout simplement par:

$this-›plxMotor-›plxPlugins-›aPlugins['monPlugin']

Bien entendu tout sera précisé plus en détails quand il le faudra...

Table des matieres

Structure des fichiers xml des articles

Après avoir vu dans cet article la composition du nom des fichiers xml des articles de PluXml, détaillons maintenant les différentes balises xml qui composent un fichier article.

Les données d'un articles sont enregistrées dans un fichier xml. Sa structure est très simple et se résume ainsi:

‹?xml version='1.0' encoding='UTF-8'?›
‹document›
	‹title›‹![CDATA[]]›‹/title›
	‹allow_com›‹/allow_com›
	‹template›‹![]]›‹/template›
	‹chapo›‹![CDATA[]]›‹/chapo›
	‹content›‹![CDATA[]]›‹/content›
	‹tags›‹![CDATA[]]›
	‹meta_description›‹![CDATA[]]›‹/meta_description›
	‹meta_keywords›‹![CDATA[]]›‹/meta_keywords›
	‹title_htmltag›‹![CDATA[]]›‹/title_htmltag›
‹/document›

Détaillons les balises xml

title: titre de l'article (format texte)

allow_com: autorise ou pas l'ajout de commentaires (format numérique). Les valeurs autorisées sont: 0 (commentaires interdits), 1 (commentaire autorisés)

template: nom du fichier template utilisé pour afficher le détail de l'article (format texte). Le fichier est stocké dans le dossier du thème courant. Son nom doit être de la forme: article-xxxx.php (où xxxx est un texte permettant d'identifier le template, par exemple: article-evenement.php). Par défaut c'est le fichier article.php du thème courant qui est utilisé

chapo: contient le texte du chapo de l'article (format texte)

content: contenu de l'article (format texte)

tags: contient la liste des mots clés séparés par des virgules (format texte)

meta_description: contient le contenu de la balise meta description dans l'entête de la page partie ‹head› (format texte)

meta_keyword: contient le contenu de la balise meta keywords dans l'entête de la page partie ‹head› (format texte)

title_htmltag: contient le contenu de la balise ‹title› de la page (format texte). Par défaut la balise ‹title› est renseignée automatiquement à partir du titre de l'article. Pour améliorer le référencement de l'article, le contenu de la balise ‹title› peut être personnalisé grâce à title_htmltag

Exemple de fichier xml d'un article:

‹?xml version="1.0" encoding="UTF-8"?›
‹document›
	‹title›‹![CDATA[Premier article]]›‹/title›
	‹allow_com›1‹/allow_com›
	‹template›‹![CDATA[article.php]]›‹/template›
	‹chapo›
		‹![CDATA[Voici le premier article rédigé sur ce blog]]›
	‹/chapo›
	‹content›
		‹![CDATA[

Ceci est un article créé lors de l'installation de PluXml. Editez-le depuis la zone d'administration.

]]›
	‹/content›
	‹tags›
		‹![CDATA[PluXml, Blog]]›
	‹/tags›
	‹meta_description›
		‹![CDATA[Premier article publié sur monsite.com]]›
	‹/meta_description›
	‹meta_keywords›
		‹![CDATA[PluXml, Web, Blog, Xml, Article]]›
	‹/meta_keywords›
	‹title_htmltag›
		‹![CDATA[]]›
	‹/title_htmltag›
‹/document›

Toutes ces informations sont enregistrées dans le fichier xml lorsque l'article est sauvegardé à partir de la page de rédaction dans la zone d'administration de son site.

Table des matieres

Comprendre le nom des fichiers xml des articles

PluXml n’utilise pas de base de données. Le contenu des articles est stocké dans des fichiers xml. Si vous utilisez la configuration par défaut, ces fichiers sont enregistrés dans le dossier data/articles. Chaque nom de fichier est composé de certaines informations propre à l’article. Voyons quelles sont ces informations.

Le nom du fichier d’un article est composé de plusieurs données.
Exemple:

_0001.002.001.201304251142.premier-article.xml

Si nous détaillons le nom du fichier avec des couleurs, nous avons:
_ 0001 . 002 . 001 . 201304251142 . premier-article . xml

_ est un caractère optionnel. Il indique que l'article est en attente de validation.

0001 est l'identifiant de l'article. Il peut aller jusqu'à 9999, donc 9999 articles.

002 contient l'identifiant de la catégorie dans laquelle l'article est classé. Il peut avoir plusieurs identifiants séparés par des virgules (exemple 001,002). Ici l'article est donc classé dans la catégorie 002. Il n'y a pas de limite dans le nombre de catégories possibles, du moment qu'elles sont bien séparées par des virgules. Il est possible d'avoir également la valeur draft qui indique que l'article est un brouillon, ou la valeur home qui indique que l'article est publié dans la catégorie Page d'accueil. Il est donc tout a fait possible d'avoir 0001.001,002,draft.001.201304251142.premier-article.xml

001 est l'identifiant de l'utilisateur qui a rédigé l'article.

201304251142 est la date de publication de l'article. Cela peut être une date future. Cette date est de la forme AAAAMMJJHHMM où:
AAAA = année
MM = mois
JJ = jour
HH = heure
MM = minute

premier-article est l'url de l'article. On la retrouve dans:
http://mondomaine.com/index.php?article1/premier-article

xml est l'extension du fichier.

Table des matieres

Rajouter des couleurs dans son nuage de tags

PluXml gère les tags et permet d’afficher un nuage tag.

Pour rappel un tag est un mot clé que l’on associe à un ou plusieurs articles. L’objectif de l’utilisation des tags est de regrouper les articles de même thématique. Cela permet de connaître facilement la liste de tous les articles identifiés par un même mot clé.
Le nuage de tags permet d’afficher tous les tags avec une taille de police de caractère différente, plus ou moins grande, en fonction du nombre d’utilisation des mots clés. Plus un tag est grand, plus il y a d’articles rédigés associés à ce tag. Ce système donne une information aux visiteurs pour orienter ses lectures. Il est donc important de bien les choisir.

Voyons comment dans ce nuage mettre des couleurs différentes en fonction de la taille de chaque tag.

Le nuage de tags de PluXml est affiché grâce à fonction tagList de la class plxShow. Elle est généralement utilisée dans la sidebar (fichier sidebar.php de son thème).

‹?php $plxShow-›tagList('‹span class="tag #tag_size"›‹a class="#tag_status" href="#tag_url" title="#tag_name"›#tag_name‹/a›‹/span›', 20); ?›

Nb: le deuxième paramètre de la fonction tagList permet de limiter le nombre de tags affichés (ici à 20).

La taille de chaque tag est définie dans la feuille de style (fichier style.css dans le dossier du thème). Pour le thème par défaut de PluXml nous avons:

.tag-size-1 	{ font-size: 1em; }
.tag-size-2 	{ font-size: 1.1em; }
.tag-size-3 	{ font-size: 1.2em; }
.tag-size-4 	{ font-size: 1.3em; }
.tag-size-5 	{ font-size: 1.4em; }
.tag-size-6 	{ font-size: 1.5em; }
.tag-size-7 	{ font-size: 1.6em; }
.tag-size-8 	{ font-size: 1.7em; }
.tag-size-9 	{ font-size: 1.8em }
.tag-size-10 	{ font-size: 1.9em; }
.tag-size-max 	{ font-size: 2em; }

Si un tag n’est utilisé qu’une fois, c’est la classe css .tag-size-1 qui est utilisée et le tag sera afiiché avec une taille de 1em.
Si un tag n’est utilisé que 5 fois, c’est la class css .tag-size-5 qui est utilisée avec donc une taille de 1.4em.
Si un tag est utilisé plus de 10 fois c’est la class .tag-size-max qui est utilisée avec la taille correspondante.

Les tags sont des liens cliquables définit par la balise html ‹a›.
Pour changer la couleur de leur balise ‹a› il faut donc intervenir sur tous les arguments:

 .tag-size-x a

Pour définir une couleur différente de chaque tag en fonction de sa taille, rajoutez le code suivant à la fin du fichier style.css

.tag-size-1 a	{ color: #999999; }
.tag-size-2 a	{ color: #000000; }
.tag-size-3 a	{ color: #cc0000; }
.tag-size-4 a	{ color: #3366ff; }
.tag-size-5 a	{ color: #cc66cc; }
.tag-size-6 a	{ color: #996633; }
.tag-size-7 a	{ color: #6666cc; }
.tag-size-8 a	{ color: #339999; }
.tag-size-9 a	{ color: #009900; }
.tag-size-10 a	{ color: #ff99ff; }
.tag-size-max a	{ color: #ff6600; }

Si vous voulez un comportement différent au passage de la souris sur les liens, jouez sur a:hover de chaque tag.

.tag-size-1 a:hover	{ color: #999999; }

Voilà, à vous maitenant de choisir les couleurs qui vous plaisent en modifiant les valeurs #999999, etc...

Table des matieres

Mettre en place un édito

Je vous propose mettre en place sur votre site un édito, c'est à dire un article qui va rester en haut de la page d'accueil jusqu'à la publication d'un nouvel édito (ou le temps que vous choisirez).

Pour ce tutorial je me base sur le thème par défaut de PluXml 5.1.7

Les deux points clés qui vont être utilisés sont :

Création d’une catégorie Edito qui sera réservée aux éditos.

Utilisation de la fonction lastArtList de la classe plxShow pour afficher le dernier édito publié sur le site.

Création et paramétrage de la catégorie Edito

Commençons par créer une nouvelle catégorie que nous appellerons Edito.

A partir de l’administration de votre PluXml, allez dans le menu Catégories et créez une nouvelle catégorie de manière à obtenir la ligne Edito.

Reportez bien dans les colonnes les valeurs :

Nb art/page : 1

Menu : Masquer

Relevez l’identifiant de la catégorie (colonne Identifiant): ici nous avons la valeur 002. Nous utiliserons cette valeur plus tard.

Cliquez sur le lien Options de la catégorie Edito.

Réglez le déroulant Afficher les articles de cette catégorie sur la page d'accueil sur la valeur Non et cliquez sur le bouton Mettre à jour cette catégorie pour enregistrer la modification.

Modification du thème pour afficher les éditos

Editez le fichier home.php stocké dans le dossier theme/defaut/

Au dessus de la ligne

‹?php while($plxShow-›plxMotor-›plxRecord_arts-›loop()): ?›

Rajoutez le code suivant :

‹article role="article" class="edito"›
‹?php $plxShow-›lastArtList('‹header›‹h1›‹a href="#art_url" title="#art_title"›#art_title‹/a›‹/h1›‹p›Par #art_author‹/p›‹/header›‹section›#art_content(9999)‹/section›', 1, '002') ?›
‹/article›

Ici nous utilisons la fonction lastArtList de la classe plxShow car elle permet d’afficher les derniers articles publiés sur le site.

Les 3 premiers paramètres utilisés de lastArtList sont :

Paramètre 1 : contient le code html affiché où chaque variable suivante sera remplacée par la donnée correspondante de l’article

#art_url : url de l’article

#art_title : titre de l’article

#art_author : non du rédacteur de l’article

#art_content(nb caractères) : contenu de l’article

Ce code html peut bien sûr être adapté selon vos besoins. D’autres variables sont disponibles :

#art_id: identifiant de l’article

#art_chapo : chapo de l’article

#art_date : date de publication de l’article

#art_hour : heure de publication de l’article

#cat_list : nom de la catégorie

#art_nbcoms : nombre de commentaires

Paramètre 2 : nombre maximum d’articles affichés. Ici nous avons 1 car nous ne souhaitons afficher que le dernier article de la catégorie Edito.

Paramètre 3 : Reportez ici l’identifiant de votre catégorie Edito créée précédemment. Le numéro est affiché sur l’écran de gestion des catégories dans la colonne Identifiant.

Il ne reste plus qu’à mettre en forme l’affichage de l’édito avec un peu de code css que nous allons copier à la fin du fichier style.css du thème, stocké dans le dossier themes/defaut

.edito {
	background-color: #efefef;
	border: 1px solid #ccc;
	padding: 10px 15px 20px 15px;
	font-size: 0.9em;
	margin-bottom: 20px;
}
.edito header,
.edito section {
	background-color: #efefef;
}
.edito h1 {
	font-size: 1.5em;
	margin: 0;
	padding: 0;
	text-align: left;
}
.edito p {
	text-align: left;
}
.edito section {
	margin: 0;
	padding: 0;
}

La classe css utilisée est .edito
Elle permet de définir le comportement visuel de chaque élément html

Rédaction du premier édito

Il ne reste maintenant plus qu’à rédiger notre premier édito.

Créez un nouvel article et surtout publié le dans la catégorie Edito.
Avec le paramètrage que nous avons fait pour la catégorie Edito, l’article créé restera visible sur la page d’accueil tant qu’un nouvel article ne sera pas publié dans cette catégorie. Donc n’oubliez pas de cocher la catégorie Edito.

Afficher/Masquer l'article édito

(Mise à jour le 31/03/2014)

Comme demandé dans les commentaires, voici une modification qui permet de ne pas afficher la partie Edito si on le souhaite.

Tout d'abord, à la place du code proposé au début de l'article, au dessus de la ligne

‹?php while($plxShow-›plxMotor-›plxRecord_arts-›loop()): ?›

Rajoutez le code suivant :

‹?php
$catEdito = '002';
if($plxShow-›plxMotor-›aCats[$catEdito]['active']) {
	$plxShow-›lastArtList('‹article role="article" class="edito"›‹header›‹h1›‹a href="#art_url" title="#art_title"›#art_title‹/a›‹/h1›‹p›Par #art_author‹/p›‹/header›‹section›#art_content(9999)‹/section›‹/article›', 1, $catEdito);
}
?›

Remplacez la valeur 002 par l'identifiant de votre catégorie Edito au niveau de la ligne

$catEdito = '002';

Ce code a l'avantage de ne pas laisser de balises html ‹article›‹/article› vide si aucun édito n'est rédigé.

Maintenant si un article est publié dans la catégorie Edito et que vous souhaitez ne plus l'afficher, il vous suffit de désactiver la catégorie en allant dans la gestion des catégories, de sélectionner la valeur Non dans la colonne Active et de sauvegarder la modification en cliquant sur le bouton Modifier la liste des catégories.

Edit: 07/03/2016: Afficher le chapo avec un lien "Lire la suite de l'édito"

Si votre édito est long, vous pouvez utiliser le chapo pour rédiger la partie qui sera visible sur la page d'accueil, et mettre le reste du texte dans la partie contenu de l'article. Dans ce cas au niveau du code à rajouter dans le fichier home.php du thème, utiliser le code suivant pour afficher le chapo avec en dessous un lien "Lire la suite de l'édito".

‹article role="article" class="edito"›
‹?php $plxShow-›lastArtList('‹header›‹h1›‹a href="#art_url" title="#art_title"›#art_title‹/a›‹/h1›‹p›Par #art_author‹/p›‹/header›‹section›#art_chapo‹/section›‹footer›‹a href="#art_url" title="#art_title"›Lire la suite de #art_title‹/a›‹/footer›', 1, '002') ?›
‹/article›

Table des matieres

Des bannières pour promouvoir le projet

Le site PluXml.org mets à votre disposition plusieurs bannières de couleurs différentes pour promouvoir et marquer votre soutien au projet.

Bannières taille 400x100 pixels

Bannières taille 80x15 pixels

N'hésitez pas donc à utiliser ces images sur vos sites ou sur les forums pour améliorer la visibilité de PluXml sur internet.

Utilisez cette syntaxe dans la signature de votre profil sur les forums où vous êtes inscrits (syntaxe au format bbcode)

[url=http://pluxml.org][img]http://extern.pluxml.org/ban_bleu_400x100.png[/img][/url]

Toutes ces bannières sont disponibles à cette adresse : http://extern.pluxml.org

Table des matieres

Contrôler l'affichage du chapo et du contenu des articles

Lors de la consultation d'un article, il se peut que l'affichage du chapo et du contenu ne corresponde pas à ce que l'on veut: manque d'espace entre les deux, envie d'encadrer le chapo ou de le mettre sur un fond de couleur différent. Voyons comment donner un visuel différent pour le chapo et le contenu d'un article.

Dans le fichier article.php du thème c'est la fonction artContent (de la classe plxShow) qui est utilisée pour afficher à la fois le chapo et le contenu de l'article.

‹?php $plxShow-›artContent(); ?›

Pour donner un visuel différent au chapo et au contenu de l'article, nous allons utiliser les deux fonctions suivantes:

artChapo()

artContent()

Le fichier du thème à modifier est article.php

Affichage du chapo

Nous avons déjà vu dans l'article Personnaliser l'affichage du lien "Lire la suite" que le premier paramètre de la fonction artChapo permettait de modifier le lien "Lire la suite" affiché sur la page d'accueil.
artChapo possède un deuxième paramètre qui permet de supprimer l'affichage du contenu de l'article en spécifiant la valeur false.

‹?php $plxShow-›artChapo('', false); ?›

Avec cette syntaxe, seul le chapo est affiché.

Affichage du contenu

Nous avons précédemment affiché le chapo, il ne reste plus qu'à afficher le contenu de l'article.
Si nous utilisons la fonction artContent sans paramètre, le chapo (s'il existe) va être affiché (et donc faire doublon avec celui affiché par l'appel de la fonction artChapo). Pour ne pas afficher le chapo, il suffit de spécifier la valeur false dans l'appel de artContent.

‹?php $plxShow-›artContent(false); ?›

Ce qui nous donne avec les deux fonctions appelées ensemble:

‹?php
	$plxShow-›artChapo('', false);
	$plxShow-›artContent(false);
?›

Nous pouvons maintenant rajouter du code pour avoir un affichage différent du chapo et du contenu.

Exemple 1: ajout d'un ligne vide entre le chapo et le contenu

	‹?php $plxShow-›artChapo('', false); ?›
	‹br /›
	‹?php $plxShow-›artContent(false); ?›

Exemple 2: ajout d'un encadré sur un fond de couleur pour le chapo

‹div class="art-chapo" ›
	‹?php $plxShow-›artChapo('', false); ?›
‹/div›
‹div class="art-content"›
	‹?php $plxShow-›artContent(false); ?›
‹/div›

Il sera bien sur préférable d'utilisé les class css art-chapo et art-content dans la feuille de style (fichier style.css du thème) à la place de la balise style

.art-chapo {
    background-color:#efefef;
    border:1px solid #ddd;
    margin-bottom: 15px
 }

Table des matieres

Personnaliser le menu d'administration d'un plugin

Lorsqu'un fichier admin.php est présent dans le dossier d'un plugin, un menu dans la sidebar d'administration est automatiquement ajouté, à condition que les droits d'accès à ce menu aient été définis pour le profil de l'utilisateur connecté. Ce menu permet de visualiser le contenu de la page admin.php

Par défaut le menu porte le nom du plugin et est positionné à la fin de la liste des tous les menus de la sidebar.

Nous allons voir comment changer son nom et comment le positionner dans la liste des menus.

Rappelons tout d'abord comment autoriser l'accès au fichier admin.php

Définir les droits d'accès au fichier admin.php

Même si le fichier admin.php est présent dans le dossier de notre plugin et que les droits pour y accéder n'ont pas été définis, PluXml fait un contrôle et interdit de visualiser le contenu de admin.php

Lorsqu'un utilisateur se connecte à l'administration de PluXml, il possède un profil qui lui a été définit par l'administrateur du site. Ces droits sont identifiés dans le code de PluXml par des constantes:

PROFIL_ADMIN

PROFIL_MANAGER

PROFIL_MODERATOR

PROFIL_EDITOR

PROFIL_WRITER

Chaque profil permet des actions différents dans l'administration

| Articles | Catégories | Commentaires | Pages Statiques | Paramètres
Administrateur | X | X | X | X | X
Manager | X | X | X | X |
Modérateur | X | X | X |  |
Editeur | X | X |  |  |
Rédacteur | X |  |  |  |

Pour limiter donc l'accès au fichier admin.php en fonction du profil de l'utilisateur, il faut dans le code de notre plugin utiliser la fonction setAdminProfil et spécifiant comme paramèters le ou les profils autorisés.

Exemple: pour n'autoriser que le profil PROFIL_ADMIN

$this-›setAdminProfil(PROFIL_ADMIN);

Exemple: pour n'autoriser que les profils PROFIL_ADMIN et PROFIL_MANAGER

$this-›setAdminProfil(PROFIL_ADMIN, PROFIL_MANAGER);

Nous voyons donc qu'il faut spécifier les profils que l'on veut autoriser en les séparant par une virgule.

La fonction setAdminProfil est à utiliser dans le constructeur du plugin.

class plxMonPlugin extends plxPlugin {

  public function __construct($default_lang) {
    # appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);
    # droits pour accèder à la page admin.php du plugin
    $this-›setAdminProfil(PROFIL_ADMIN);
  }

}

Changer le titre et positionner le menu dans la sidebar

Une seule fonction permet à la fois de changer le titre et de positionner le menu pour accèder au fichier admin.php
Cette fonction s'appelle: setAdminMenu et possède 3 paramètres:

paramètre 1 titre du menu
paramètre 2 position du menu dans la sidebar
paramètre 3 légende du menu (balise title du lien)

On peut donc l'appeler de cette façon

$this-›setAdminMenu('Mon plugin', 2, 'Accès administration de mon plugin');

Cette instruction est à utiliser dans le constructeur de notre plugin

class plxMonPlugin extends plxPlugin {

  public function __construct($default_lang) {
    # appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);
    # droits pour accèder à la page admin.php du plugin
    $this-›setAdminProfil(PROFIL_ADMIN);
    # définition des propriétés du menu pour accèder à la page admin.php du plugin
    $this-›setAdminMenu('Mon plugin', 2, 'Accès administration de mon plugin');
  }

}

Le résultat en image:

Table des matieres

Personnaliser l'affichage du lien "Lire la suite"

Par défaut dans PluXml, le lien "Lire la suite" est de la forme:

Lire la suite de + titre de l'article

Exemple:

Lire la suite de Personnaliser l'affichage du lien "Lire la suite"

Le lien "Lire la suite" est obtenu par le code

‹?php $plxShow-›artChapo(); ?›

que l'on trouve dans les fichiers du thème (/themes/‹mon theme›/').

archives.php

categories.php

home.php

tags.php

La fonction artChapo affiche donc le chapo de l'article s'il existe + le lien "Lire la suite", sinon seul le contenu de l'article est affiché (et donc pas de lien "Lire la suite").

Pour personnaliser le lien, il est possible de changer le paramètre dans l'appel de la fonction artChapo.

Voici quelques exemples:

‹?php $plxShow-›artChapo("Lire la suite..."); ?›

affichera tout simplement:

Lire la suite...

En utilisant la variable #art_title d'autres fantaisies sont possibles. Par exemple:

‹?php $plxShow-›artChapo('Je veux lire la suite de : #art_title'); ?›

affichera:

Je veux lire la suite de : Personnaliser l'affichage du lien "Lire la suite"

#art_title est remplacé par le titre de l'article.

A vous de jouer. N'oubliez pas de faire la modification dans les 4 fichiers du thème où est utilisé artChapo (voir la liste des fichiers plus haut).

Table des matieres

Compter le nombre de pages statiques

Voici un petit bout de code que l'on m'a demandé récemment pour compter le nombre de pages statiques dans son PluXml.

Dans le fichier header.php de son thème après la ligne:

‹?php if (!defined('PLX_ROOT')) exit; ?›

ajoutez le code suivant:

‹?php
function nbStatics() {
    global $plxMotor;
    $count=0;
    if($plxMotor-›aStats) {
        foreach($plxMotor-›aStats as $k=›$v) {
            if($v['active']) $count++;
        }
    }
    return $count;
}
?›

La fonction nbStatics() compte et renvoie le nombre de pages statiques qui sont actives.
Pour afficher ce nombre, ajoutez simplement la ligne suivante dans un des fichiers du thème à l'endroit où vous voulez:

Nombre de pages statiques: ‹?php echo nbStatics(); ?›

Bout de code

Table des matieres

Commentaires dans une page statique

Sur le forum de PluXml, Il revient régulièrement la question de Comment insérer les commentaires dans une page statiques?.

Les astuces proposées se basent toutes sur l'utilisation d'un article, soit en l'affichant dans la page statique avec la fonction lastArtList() soit avec une redirection 301 vers cet article détourné

Avantage:

toutes les fonctions sont déjà présentes dans PluXml, il n'y a rien à développer

les derniers commentaires peuvent s'afficher dans la barre de navigation via la fonction lastComList().

Désavantage:

On veux une page, pas un article

Cela nécessite de créer un article et éventuellement une catégorie dédiée

Cela nécessite de cacher cette article et sa catégorie de la navigation.

accessoirement les extraire du sitemap aussi

pas de pagination , sauf à trouver un plugin pour le faire et pour l'ensemble des articles.

Proposons alors, une autre approche avec un script "maison"! et qui inclus une pagination sur les commentaires.

Alternative: Un script de commentaire dédié à une page.

Ce script est developpé à partir de l'exemple de l'article Paginer le contenu d'une page statique pour la pagination et son visuel ainsi que du fichier commentaires.php du thème par défaut de Pluxml en respectant sa structure HTML et les styles appliqués aux commentaires et au formulaire.

Désavantage

Le script est en partie développé

Les derniers commentaires n'apparaissent pas dans la barre de navigation si vous utilisé la fonction lastComList()

Pas de modération, sauf à le faire manuellement.

Le script est à inclure dans la page statique concernée

Avantages

Le script est en partie développé, on fait ce que l'on veut sans impacté la gestion des commentaires dans les articles.

Le script est configurable et seulement pour la page dans laquelle il se trouve

Le capcha natif de PluXml est disponible.

Ce n'est pas un plugin, le script n'est chargé que dans cette page.

Le script est insensible aux mises à jour, sauf si la fonction de l'appel au capcha de PluXml n'existe plus.

Le script

Option de configuration

Il y a quelques variables qui peuvent être ajusté pour déterminé le visuel et la pagination dans le bloc :

	#########################################
	#configuration
	#########################################
	# nombre de Commentaire à afficher par page
	$bypage = 4;

        # mettre true au lieu de false pour afficher les liens de chaque page
	$intermediaire = false;

	# mettre a true pour afficher la dernière page des commentaires par défaut
	$showLast = true;
	#########################################
	# FIN configuration
	#########################################

Ne toucher à rien d'autre sauf à savoir ce que vous faites et à vos risques.

Le code à copier/coller dans la page statique

‹?php
	# Ajout commentaires dans une page statique
	# Pagination des commentaires
	# reponses aux commentaires
	# inclusion du capcha natif de PluXml
	# @Author Gcyrillus

	# $this is $plxShow
	#########################################
	#configuration
	#########################################

	# nombre de Commentaire à afficher par page
	$bypage = 4;

    # mettre true au lieu de false pour afficher les liens de chaque page
	$intermediaire = false;

	# mettre a true pour afficher la dernière page des commentaires par défaut
	$showLast = true;

	#########################################
	# FIN configuration
	#########################################

	# fichier de stockage des commentaires
	$commentsFile = PLX_ROOT.'/data/statiques/comment-'.$this-›staticId().'.json';
	if(!file_exists($commentsFile)) {
		touch($commentsFile);
		file_put_contents($commentsFile,'[]');
	}

	# extraction des commentaires dans un tableau
	$comments =  json_decode(file_get_contents($commentsFile), true);
	$num = count($comments);
	# format du message aprés soumission du formulaire
	$row ='‹p id="com_message" class="#com_class"›‹strong›#com_message‹/strong›‹/p›';

	# As t-on de nouveaux commentaires ?
	if(isset($_POST)){
		# color boite message par défaut
		$color = 'orange';
		$level='level-0';
		if(isset($_POST['name']) AND isset($_POST['content'])) {

			if( $_POST['name'] =='' OR $_POST['content'] =='') {
				$_SESSION['msgcom'] =  L_NEWCOMMENT_FIELDS_REQUIRED;
			}
			if(!empty($this-›aConf['capcha']) AND (empty($_SESSION['capcha_token']) OR	empty($_POST['capcha_token']) or ($_SESSION['capcha_token'] != $_POST['capcha_token']))) {
				$_SESSION['msgcom'] .= ' '. L_NEWCOMMENT_ERR_ANTISPAM;
			}
			else {
				# On vérifie que le capcha est correct
				if($this-›plxMotor-›aConf['capcha'] == 0 OR $_SESSION['capcha'] == sha1($_POST['rep'])) {
					if(isset($_POST['level']))
					{
						$level = trim($_POST['level']) ;
						if($level == 'level-5' || $level =='level-max' ) {$level ='level-max';}
						else {$level++;}
					}
					$newcomment[] = array(
					'num'		=› trim(strip_tags($_POST['num'])),
					'date'		=› date('d-m-Y') ,
					'name'		=› trim(strip_tags($_POST['name'])) ,
					'mail'		=› trim(strip_tags($_POST['mail']))  ,
					'site'		=› trim(strip_tags($_POST['site'])),
					'content' 	=› trim(strip_tags($_POST['content'])),
					'level'		=› trim(strip_tags($level))
					);

					$color = 'green';
					$_SESSION['msgcom'] = L_COM_PUBLISHED;

					# est ce une reponse à un commentaire particulier?
					if(isset($_POST['index']))
					{
						array_splice($comments, trim($_POST['index'])+1, 0, $newcomment);
					}
					else {

						array_push($comments,$newcomment[0]);

					}

					file_put_contents($commentsFile, json_encode($comments,true|JSON_PRETTY_PRINT) );
				}
				else {
					$_SESSION['msgcom'] =  L_NEWCOMMENT_ERR_ANTISPAM;
				}
			}
		}
	}

	if(count($comments)›0) {
		$tittleComment ="‹h3›".count($comments).' '. L_COMMENT ."‹/h3›";
		if(count($comments)›1) {
			$tittleComment ="‹h3›".count($comments).' '.  L_COMMENTS ."‹/h3›";
		}
		echo $tittleComment ;

		# Style barre pagination commentaires
		echo '‹style›:where(.page-item.page-link.active) { text-decoration:underline;font-weight:bold; padding:0.3em 2em;}.pagination.text-center.center.bordered {border-radius: 5px;width:max-content;  margin:auto;  border:solid 1px}#com_message:has(strong:empty){display: none;}.content_com {  white-space: pre-wrap;}‹/style›';

		#############################
		# extraction et maj variables
		#############################

		# extraction de l'url
		$url = $this-›plxMotor-›urlRewrite('?static' . $this-›staticId() . '/' . $this-›plxMotor-›aStats[str_pad($this-›staticId(), 3, '0', STR_PAD_LEFT)]['url'] );

		# generation du lien
		$link = $this-›plxMotor-›urlRewrite($url."/page");

		// On calcule le nombre de pages total
		$nbr = count($comments);
		$pages = ceil( $nbr / $bypage);
		$position = 1;
		if($showLast==true) $position = $pages;

		# extraction du numéro de page dans l'URL
		$currentPage = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : $position;

		# indice de début, premier article à afficher
		$start = ($currentPage - 1) * $bypage;

		// Calcul du 1er commentaire de la page
		$premier = ($currentPage * $bypage) - $bypage;
		;

		$pagecomments = array_slice($comments, $premier, $bypage);

		foreach($pagecomments as $com =›$val) { # On boucle sur les commentaires
			$index=array_search( $val['num'], array_column( $comments, 'num' ) );
			echo '‹div id="id-'.$val['num'].'" class="comment '.$val['level'].'"›
			‹div id="com-'.$val['num'].'" data-index="'.$index.'" data-level="'.$val['level'].'"›
			‹small›
			‹a class="nbcom" href="'.$_SERVER['REQUEST_URI'].'#com-'.$val['num'].'" title="#commentaire '.$val['num'].'"›#'.$val['num'].'‹/a›
			‹time datetime="'.$val['date'].'"›'.$val['date'].'‹/time› - '.$val['name'].' '. $this-›getLang('SAID').':
			‹/small›
			‹blockquote›
			‹p class="content_com"›'.$val['content'].'‹/p›
			‹/blockquote›';
			if($this-›plxMotor-›aConf['allow_com']){
				echo '‹a rel="nofollow" href="#form" onclick="replyCom(\''.trim($val['num']).'\');"›'.$this-›getLang('REPLY').'‹/a›';
			}
			echo '‹/div›
			‹/div›';
		}
	?›
	‹!-- Affichage de la pagination --›

	‹?php
		############################
		# Affichage de la pagination
		############################
		if($pages›1){
		?›
		‹nav›
			‹ul class="pagination text-center center bordered"›
				‹!-- Lien vers la page précédente (si on ne se trouve pas sur la 1ère page) --›
				‹?= ($currentPage › 1)  ? "‹li class=\"page-item\" ›‹a href=\"".$link . ($currentPage - 1) ."\" class=\"page-link\"›".L_PAGINATION_PREVIOUS."‹/a›‹/li›" : "" ?›

				‹?php if($intermediaire == true)  {
					for($page = 1; $page ‹= $pages; $page++) {
						# Lien vers chacune des pages (activé si on se trouve sur la page correspondante
						echo '‹li class="page-item ';
						if($currentPage == $page)  echo 'active';
						echo "\"›‹a href=\"".$link.$page ."\" class=\"page-link\"›".$page."‹/a›‹/li›";
					}
				}
				else {
					echo "‹li class=\"page-item page-link  active \"›
					".$currentPage." / ". $pages."
					‹/li›";

				}	?›
				‹!-- Lien vers la page suivante (si on ne se trouve pas sur la dernière page) --›
				‹?= ($currentPage ‹ $pages) ? " ‹li class=\"page-item\"›‹a href=\"".$link.($currentPage + 1 )."\" class=\"page-link\"›".L_PAGINATION_NEXT."‹/a›‹/li›" : "" ?›

			‹/ul›
		‹/nav›
		‹?php	}
	}
	else {
		echo L_NO_COMMENT;
	}

	if (!empty($_SESSION['msgcom'])) {
		$message=$_SESSION['msgcom'];
		$row = str_replace('#com_class', 'alert ' . $color, $row);
		unset($_SESSION['msgcom']);
	}
	else {
		$message='';

	}
	$row = str_replace('#com_message',$message , $row);
?›
‹h3›
	‹?php $this-›lang('WRITE_A_COMMENT') ?›
‹/h3›
‹form id="form" action="‹?php echo $_SERVER['REQUEST_URI']; ?›#form" method="post"›

	‹fieldset›

		‹div class="grid"›
			‹div class="col sml-12"›
				‹label for="id_name"›‹?php $this-›lang('NAME') ?›* :‹/label›
				‹input id="id_name" name="name" type="text" size="20" value="" maxlength="30" required="required" /›
			‹/div›
		‹/div›
		‹div class="grid"›
			‹div class="col sml-12 lrg-6"›
				‹label for="id_mail"›‹?php $this-›lang('EMAIL') ?› :‹/label›
				‹input id="id_mail" name="mail" type="text" size="20" value="" /›
			‹/div›
			‹div class="col sml-12 lrg-6"›
				‹label for="id_site"›‹?php $this-›lang('WEBSITE') ?› :‹/label›
				‹input id="id_site" name="site" type="text" size="20" value="" /›
			‹/div›
		‹/div›
		‹div class="grid"›
			‹div class="col sml-12"›
				‹div id="id_answer"›‹/div›
				‹label for="id_content" class="lab_com"›‹?php $this-›lang('COMMENT') ?›* :‹/label›
				‹textarea id="id_content" name="content" cols="35" rows="6" required="required"›‹/textarea›
			‹/div›
		‹/div›

		‹?php echo $row;
		if($this-›plxMotor-›aConf['capcha']): ?›

		‹div class="grid"›
			‹div class="col sml-12"›
				‹label for="id_rep"›‹strong›‹?php echo $this-›lang('ANTISPAM_WARNING') ?›‹/strong›*‹/label›
				‹?php
					$this-›plxMotor-›plxCapcha = new plxCapcha(); # Création objet captcha
					$this-›capchaQ();
				?›
				‹input id="id_rep" name="rep" type="text" size="2" maxlength="1"  required="required" /›
			‹/div›
		‹/div›

		‹?php endif; ?›

		‹div class="grid"›
			‹div class="col sml-12"›
				‹input type="hidden" id="num" name="num" value="‹?php echo $num + 1 ?›"/›
				‹input type="hidden" id="id_parent" name="parent" value="" /›
				‹input class="blue" type="submit" value="‹?php $this-›lang('SEND') ?›" /›
			‹/div›
		‹/div›

	‹/fieldset›

‹/form›

‹script›
	function replyCom(idCom) {
		document.getElementById('id_answer').innerHTML='‹?php $this-›lang('REPLY_TO'); ?› :';
		document.getElementById('id_answer').innerHTML+=document.getElementById('com-'+idCom).innerHTML;
		document.getElementById('id_answer').innerHTML+='‹input type="hidden" name="index" value="'+document.getElementById('com-'+idCom).getAttribute('data-index') +'"›';
		document.getElementById('id_answer').innerHTML+='‹input type="hidden" name="level" value="'+document.getElementById('com-'+idCom).getAttribute('data-level') +'"›';
		document.getElementById('id_answer').innerHTML+='‹a rel="nofollow" href="#form" onclick="cancelCom()"›‹?php $this-›lang('CANCEL'); ?›‹/a›';
		document.getElementById('id_answer').style.display='inline-block';
		document.getElementById('id_parent').value=idCom;
		document.getElementById('id_content').focus();
	}
	function cancelCom() {
		document.getElementById('id_answer').style.display='none';
		document.getElementById('id_parent').value='';
		document.getElementById('com_message').innerHTML='';
	}
	var parent = document.getElementById('id_parent').value;
	if(parent!='') { replyCom(parent) }
‹/script›

Table des matieres

exclure les liens de l'article affiché

Lorsque vous consultez un article, si celui ci est l'un des derniers parus, vous retrouvez son lien dans la liste des "derniers articles". et éventuellement d'autres liens vers l'article dans "les derniers commentaires".

Pour éviter ce qui peut-être vu comme un défaut. Il est possible d'exclure les liens de l'article en cours ainsi que les liens vers ses commentaires.

Les données qui permettent d'extraire le lien vers un article sont stockées dans $plxShow-›plxMotor-›plxGlob_arts-›aFiles et les commentaires sont stockés dans $plxShow-›plxMotor-›plxGlob_coms-›aFiles sous forme de tableaux ( array() ). Il faut alors exclure les clés correspondantes de ces deux tableaux.

Cela peut-être fait à l'aide d'un petit script à inclure dans vos thèmes.

Exclure l'article du tableau.

Avant d'exclure cette article du tableau, il faut traiter son affichage :) , et exclure l'article juste après.

Dans le thème par défaut , il est possible d’insérer cette commande dans les fichier templates des articles (article.php et article-full-width.php ) juste avant l'inclusion de la sidebar ‹?php include __DIR__.'/sidebar.php'; ?› ou à la deuxieme ligne du fichier sidebar.php .

Le code à inserer pour retire la clé de l'article est

‹?php unset($plxShow-›plxMotor-›plxGlob_arts-›aFiles[str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT)]); ?›

Exclure les commentaires

Si vous avez des commentaires récents sur cet article, il seront affichés dans la sidebar avec un message d'erreur car l'article auquel ils sont rattachés n'existe plus.

Il faut aussi exclure tous ces commentaires reliés à cette article et compléter la ligne de code excluant l'article.

Il est possible de boucler sur tous les commentaires et de les retirer un a un

foreach ($plxShow-›plxMotor-›plxGlob_coms-›aFiles as $key =› $value) {
	if (substr($value, 0, 4) == str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT) )  {
		unset($plxShow-›plxMotor-›plxGlob_coms-›aFiles[$key]);
	}
}

ou d'utiliser la fonction array_diff_key() pour les exclure.

$plxShow-›plxMotor-›plxGlob_coms-›aFiles = array_diff_key($plxShow-›plxMotor-›plxGlob_coms-›aFiles, array_filter($plxShow-›plxMotor-›plxGlob_coms-›aFiles, function ($value, $key) use ($plxShow) {
	return substr($value, 0, 4) === str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT);
}, ARRAY_FILTER_USE_BOTH))

Finaliser l'exclusion des liens de l'article affiché

Si vous décidez de modifier les fichier template article de votre thème, l'insertion du script suivant, avant l'inclusion de sidebar.php, suffit.

unset($plxShow-›plxMotor-›plxGlob_arts-›aFiles[str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT)]);
$plxShow-›plxMotor-›plxGlob_coms-›aFiles = array_diff_key($plxShow-›plxMotor-›plxGlob_coms-›aFiles, array_filter($plxShow-›plxMotor-›plxGlob_coms-›aFiles, function ($value, $key) use ($plxShow) {
	return substr($value, 0, 4) === str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT);
}, ARRAY_FILTER_USE_BOTH));

Si pour ne modifier qu'un fichier vous optez pour inclure ce script dans sidebar.php, il faudra tester le mode d'affichage de PluXml pour pour n'exclure l'article et ses commentaire uniquement lorsque vous êtes sur la page de cet article.

pour le test du mode d'affichage , voir :Connaître le mode d'affichage de PluXml

testons donc si $plxShow-›mode() =='article'

Le script à inserer à la deuxieme ligne de sidebar.php est :

if($plxShow-›mode() =='article') {
	unset($plxShow-›plxMotor-›plxGlob_arts-›aFiles[str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT)]);
	$plxShow-›plxMotor-›plxGlob_coms-›aFiles = array_diff_key($plxShow-›plxMotor-›plxGlob_coms-›aFiles, array_filter($plxShow-›plxMotor-›plxGlob_coms-›aFiles, function ($value, $key) use ($plxShow) {
		return substr($value, 0, 4) === str_pad($plxShow-›artId(), 4, "0", STR_PAD_LEFT);
	}, ARRAY_FILTER_USE_BOTH));
}

C'est ce dernier script qui est utilisé dans les fichiers du thème du site.

Table des matieres

URL canonical et PluXml

Le site pluxthemes.com propose de donner à vos thèmes la capacité de générer vos URL canoniques avec quelques lignes de codes à insérer dans le fichier template 'header.php' de votre thème.

Un plugin est aussi disponible pour ne pas avoir à modifier vos thèmes : myCannonical plugin

Voici les quelques lignes à ajouter pour en bénéficier:

		# URL canonique
		# Author Gcyrillus @ re7net.com
		# genere l'url canonique de votre page , d'acceuil, categorie, statique ou article  sous la forme ‹link rel="canonical" href="URL" /›
		# conformémént à votre configuration urlrewriting, compatible avec le plugin MyBetterUrl
		# indique le numero de page : page1
		# identifie les plugins generant une page
		$pagination='';
		$reqUri=   $plxShow-›plxMotor-›get;
		preg_match('/(\/?page[0-9]+)$/', $reqUri, $matches);
		if( $matches) $pagination =$reqUri;
		if($plxShow-›catId(true) AND intval($plxShow-›catId()) =='0') echo '	‹link rel="canonical" href="'.$plxShow-›plxMotor-›urlRewrite().$pagination.'" /›'.PHP_EOL  ;
		if($plxShow-›catId(true) AND intval($plxShow-›catId()) !='0') echo '	‹link rel="canonical" href="'.$plxShow-›plxMotor-›urlRewrite('?categorie'. intval($plxShow-›catId()).'/'.$plxShow-›plxMotor-›aCats[$plxShow-›catId()]['url']).$pagination.'" /›'.PHP_EOL  ;
		if($plxShow-›plxMotor-›mode=='article'  AND $plxShow-›plxMotor-›plxRecord_arts-›f('numero')) echo '	‹link rel="canonical" href="'.$plxShow-›plxMotor-›urlRewrite('?article' . intval($plxShow-›plxMotor-›plxRecord_arts-›f('numero')) . '/' . $plxShow-›plxMotor-›plxRecord_arts-›f('url')).'" /›'.PHP_EOL  ;
		if( $plxShow-›plxMotor-›mode=='static'  ) {
			echo '	‹link rel="canonical" href="'.$plxShow-›plxMotor-›urlRewrite('?static'. intval($plxShow-›staticId()).'/'.$plxShow-›plxMotor-›aStats[str_pad($plxShow-›staticId(),3,0,STR_PAD_LEFT)]['url']).'" /›'.PHP_EOL ;
		}
		else{
	# enfin on regarde si il s'agit de la page d'un plugin
	foreach($plxShow-›plxMotor-›plxPlugins-›aPlugins as $plug){
		if($plug-›getParam('url') == $plxShow-›plxMotor-›mode)  echo '	‹link rel="canonical"  href="'.$plxShow-›plxMotor-›urlRewrite('?'.$_SERVER['QUERY_STRING']).'"/›'.PHP_EOL;
			}
		}

Le script teste si il s'agit de la page d'accueil, puis si c'est une catégorie, un article ou une page statique.avant de servir cette balise "canonical". Il inclus aussi les pages des plugins ainsi que la pagination.

En echo au précédent article, connaitre le mode d'affichage de PluXml est au coeur de ce bout de codes.

Table des matieres

Connaître le mode d'affichage de PluXml

Pour connaitre le mode d'affichage de Pluml:

‹?php echo $plxShow-›mode(); ?›

Cela n'a d’intérêt que lorsque vous souhaitez afficher ou appeler un script seulement sur un certain type de pages et, ou a des fin de débogages.

Quels sont ces modes?

home

article

static

categorie

tags

archives

erreur

Vous pouvez filtré ces modes, types de pages pour y afficher ou non un contenu supplémentaire

Par exemple, affiché une boite uniquement sur la page d'accueil:

‹?php
 if ($plxShow-›mode() =='home') { ?›
      ‹div class="boiteHome"›
           ‹p›Bienvenue sur mon site PluXml!‹/p›
      ‹/div›
‹?php }?›

Cela peut-être aussi pour embarquer un plugin seulement sur une page spécifique

Exemple: Affichons le formulaire de recherche dans la sidebar uniquement pour la page d’erreur.

‹?php
 if ($plxShow-›mode() =='erreur') { ?›
‹div class="sidebox"›
        ‹h3› Rechercher ‹/h3›
        ‹?php eval($plxShow-›callHook('MySearchForm')) ?›
‹/div›
‹?php }?›

Insérer ce code dans le fichier sidebar.php . le formulaire s'affichera seulement si c'est une page d'erreur

Vous pouvez donc selon le type de page ajouter automatiquement des contenus spécifiques, insérer un plugin, chargé un script, une feuille de style... à partir de l'un des fichiers communs de votre thème sans toucher au coeur de PluXml ou créer un plugin.

Table des matieres

Les données structurées

Qu'est ce que c'est?

Les données structurées sont des données organisées et stockées dans un format spécifique qui leur permet d'être facilement consultées, modifiées et analysées à l'aide d'outils informatiques.

Les données structurées sont organisées de manière à ce que les machines, y compris les moteurs de recherche, puissent facilement comprendre et extraire les informations qu'elles contiennent. Elles sont souvent présentées sous la forme de balises et de métadonnées qui décrivent le contenu d'une page Web. Les moteurs de recherche utilisent ces balises et ces métadonnées pour mieux comprendre le contenu des pages et les afficher plus efficacement dans les résultats de recherche.

Peut-on les intégrées a PluXml ?

Elles le sont déjà en parties si vous remplissez touts les champs d’édition de vos catégories, pages statiques et articles

Ce sont les champs meta (description et keywords) , title et alt pour vos images, entre autres.

Le format JSON-LD (JavaScript Object Notation for Linked Data) est l'un des formats de données structurées les plus populaires et les plus largement utilisés pour les pages Web. De simple script dans vos thèmes peuvent les générées pour vous

Le format JSON-LD

Ce format JSON-LD permet de décrire le contenu d'une page Web de manière claire et précise en utilisant des balises spéciales appelées "contextes" pour indiquer la signification des données. Les données structurées JSON-LD sont également compatibles avec les directives de Google pour les données structurées, ce qui en fait un choix judicieux pour les propriétaires de sites Web souhaitant optimiser leur référencement.

Comment les intégrées à PluXml

Elles peuvent être injecté dans vos pages par le biais des fichiers de votre thème de la même maniére que les titres et contenus de vos pages sont affichés.

De simples scripts se permettront alors d'extraire ces données de PluXml et de les formatées dans le format JSON-LD.

Quelles types de données structurées puis-je injecter dans mon thème?

Le nom de la page, l'image d'accroche, le nom de l'auteur, la hiérarchie de la page avec le fil d’Ariane, un moteur de recherche interne, etc.

Les scripts déjà disponibles

votre site

Ces données servent à presenter votre site, son type de contenu et et eventuellement l'associé à vos outils de réseaux sociaux

Voici le script à mettre dans le fichier header.php de votre thème.

‹script type="application/ld+json"›{
	"@context": "http://schema.org",
	"@type": "WebSite",
	"name": "‹?php $plxShow-›mainTitle(); ?›",
	"url": "‹?php echo $plxShow-›plxMotor-›racine; ?›",
	/*"sameAs": ["https://facebook.com/page", "https://plus.google.com/site", "https://twitter.com/name"],*/
	‹?php if(isset($plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']) && $plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']-›getParam('method') == 'get' && $plxShow-›plxMotor-›aConf['urlrewriting'])  {	?›
"potentialAction": {
			"@type": "SearchAction",
			"target": "‹?php echo $plxShow-›plxMotor-›racine .$plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']-›getParam('url').'?searchfield={searchfield}' ; ?›",
			"query-input": "required name=searchfield"
	}
‹?php } ?›
}‹/script›

L'association à vos réseaux sociaux ou autres site se trouve sur la ligne sameAs. Pour en faire usage, il faut la dé-commenter (retirer les /* et */ entourant cette ligne et y inserer vos liens en place de ceux en exemple.

Si vous avez installer le plugin de moteur de recherche et que celui-ci est configuré avec la méthode get, il sera alors aussi affiché dans vos métadonnées.

données articles

Voici le code qui va extraire les données principales de vos articles.

‹script type="application/ld+json"›
{
    "@context": "https://schema.org",
    "@type": "Article",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "‹?php echo $plxShow-›plxMotor-›plxRecord_arts-›f('url'); ?›"
    },
    "headline": "‹?php $plxShow-›artTitle(); ?›",
    ‹?php if (trim($plxShow-›plxMotor-›plxRecord_arts-›f('thumbnail'))): ?›
    "image": "‹?php echo $plxShow-›plxMotor-›urlRewrite(trim($plxShow-›plxMotor-›plxRecord_arts-›f('thumbnail'))); ?›",
    ‹?php endif; ?›
    "datePublished": "‹?php $plxShow-›artDate('#num_year(4)-#num_month-#num_dayT#hour:#minute:00+#time'); ?›",
    "dateModified": "‹?php  echo plxDate::formatDate($plxShow-›plxMotor-›plxRecord_arts-›f('date_update'), '#num_year(4)-#num_month-#num_dayT#hour:#minute:00+#time') ?›",
    "author": {
        "@type": "Person",
        "name": "‹?php $plxShow-›artAuthor() ?›"
    }
    ‹?php if (trim($plxShow-›plxMotor-›plxRecord_arts-›f('tags'))): ?›
    ,"keywords":"‹?php $plxShow-›artTags('#tag_name ') ?›"
    ‹?php endif; ?›
}
‹/script›

Il est à insérer dans les fichiers suivant de votre thème (et tout ceux ceux dont le nom commence avec le même mot):

article.php

home.php

categorie.php

tags.php

archives.php

Ce script est à insérer dans la boucle listant vos articles .

Ariane : catégorie

Le fil d'ariane sera spécifique à chaque type de page, celui des catégories dans le fichier categorie.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php $plxShow-›catName(); ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ariane : mots clés

pour les pages des mots clés, voici le script à insérer dans le fichier tags.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php $plxShow-›tagName(); ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ariane :archives

pour les pages des archives, voici le script à insérer dans le fichier archives.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php echo plxDate::formatDate($plxShow-›plxMotor-›cible, $plxShow-›lang('ARCHIVES').' #month #num_year(4)') ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ces scripts sont des bases et peuvent-être complétés et améliorés pour correspondre au mieux aux specifités et contenus de votre site: un blog, un site de recette, un site sur l'immobilier, un site proposant du son ou de la vidéo, les avis d'internaute, les evenements à venir, des lieux, etc.

Vous trouverez des exemples à jsonld.com/ pour différents types de contenus .

Cependant, il est important de noter que le format JSON-LD n'est pas le seul format de données structurées disponible. D'autres formats tels que Microdata et RDFa peuvent également être utilisés pour structurer les données d'une page Web.

Le choix du format de données structurées dépend des besoins spécifiques du site Web et des préférences du propriétaire du site. Il est également important de noter que l'utilisation de données structurées ne garantit pas une meilleure visibilité dans les résultats de recherche, mais peut aider les moteurs de recherche à mieux comprendre le contenu de la page et à l'afficher de manière plus pertinente dans les résultats de recherche.

Table des matieres

Pagination via JavaScript

Dans deux précédents articles nous avons vu comment faire usage de la fonction pagination() de Pluxml ou en créer une de toutes pieces.

Cet article vous propose de voir ou revoir une version Javascript de pagination, que vous pourrez utiliser au sein de vos articles ou pages statiques.

Cette fonction a été proposé par Bazooka07 qui l'a intégré à quelques un de ses thèmes en libre services.

Voyons cette fonction et regardons comment en faire usage.

La fonction

(function() {
  'use strict';

  const list = [...document.body.querySelectorAll('.new-page › h2')];
  if(list.length == 0) { return; }

  if(list.length › 1) {
    // On crée une barre de navigation s'il y a plus de 1 chapitre
    var innerHTML = '';
    list.forEach((item, i) =› {
      const caption = item.textContent;
      innerHTML += `‹button data-page="${i}"›${caption}‹/button›`;
    });

    // On crée la barre de navigation
    const pagination_numbers_container = document.createElement('NAV');
    pagination_numbers_container.className = 'art-nav center';
    pagination_numbers_container.innerHTML = innerHTML;

    const page0 = list[0].parentElement;
    page0.parentElement.insertBefore(pagination_numbers_container, page0);

    // On gére le click sur la barre de navigation
    pagination_numbers_container.addEventListener('click', (evt) =› {
      if(evt.target.hasAttribute('data-page')) {
        evt.preventDefault();
        // On affiche uniquement le chapitre demandé
        [...document.body.querySelectorAll('.new-page.active')].forEach((item) =› {
          item.classList.remove('active');
        });
        const i = parseInt(evt.target.dataset.page);
        list[i].parentElement.classList.add('active');
        // On met en évidence uniquement le bouton du chapitre affiché
        [...pagination_numbers_container.querySelectorAll('.active')].forEach((item) =› {
          item.classList.remove('active');
        });
        event.target.classList.add('active');
      }
    });
  }

  // On allume sur le premier .new-page ( Fire up )
  list[0].parentElement.classList.add('active');
  const btn = document.body.querySelector('.art-nav button');
  if(btn != null) {
    btn.classList.add('active');
  }
})();

C'elle ci peut-être intégrée dans l'article ou chargé depuis une balise ‹script› à partir du thème avant la fermeture de la balise ‹body› si vous avez de nombreux articles et pages en faisant usages.

Tip : integrer cette fonction en fin de document ou sur l'evenement onload(). L'article doit-être déjà chargé pour que le script puissent y extraire les données necessaire à la création de la pagination.

Comment fonctionne le script?

Le script va rechercher les conteneur avec la class .new-page et si ceux-ci ont un h2 en enfant direct.

Si il y plus d'un conteneur correspondant à cette condition, alors une barre de navigation est créée et tous les conteneurs .new-page sont cachés, excepté le premier.

Chaque lien de pagination, prendra le texte contenu par premier titre h2 de chaque conteneur. Au click, il affichera alors le conteneur auquel il correspond en cachant les autres. C'est le cas dans cet article que vous lisez.

Conditions requises

Chaque portion de page devra obligatoirement être incluse dans un conteneur avec la class .new-page ayant un titre ‹h2›.

Le squellette HTML de base à reproduire pour chaque section de votre page est:

  ‹div class="new-page"›
    ‹h2›Chapitre X‹/h2›
    ‹!-- Contenus ici --›
  ‹/div›

Dans votre feuille de style, Pour qu'une seule de ces portion s'affiche, il faudra un minimum de style pour n'affiché qu'un seul de ses éléments:

.new-page:not(.active) {
  display: none;
}

Vous trouverez un exemple modifiable en ligne ici : Exemple en ligne du script.

Une autre version de ce script, légèrement différente, permet de paginer les portions en les regroupant par groupe de 1 à X. configuration à partir de la variable constante (ligne 6) const items_per_page = 1;//indiquez ici le nombre à regrouper.

Notez que ce script , cette fonction JavaScript n'est pas dépendante de Pluxml et peut-être utiliser dans n'importe quel autre contexte. Javascript est interprété par le navigateur du visiteur en fonction du contenu de la page affichée. Que ce soit un autre CMS qui à généré cette page ou un seulement un fichier HTML statique, si la structure qui s'affiche à l'écran correspond à ce que ce script attend, pagination du contenu il y aura.

Table des matieres

Paginer le contenu d'une page statique

Parfois nos pages statiques peuvent nécessiter de voir leur contenu découper en plusieurs pages pour en faciliter la lecture.

Pour ce faire, il faut distribuer dans un tableau, chacun de ces morceaux afin de les trier et générer la pagination adéquate .

Prérequis: un minimum de familiarité avec la syntaxe PHP pour insérer les contenus dans le code.

Le code à mettre en œuvre est relativement simple et court.

Ici, la difficulté pour les plus grand débutants, sera d'insérer les contenus sans casser ce script. Rassurez-vous, le code est commenté pour vous indiquer l'écueil à éviter et comment l'éviter ... si vous lisez les commentaires.

La pagination s'affiche dans la langue configurée, l'affichage des liens "précédent/suivant" peuvent-être ponctués par un lien vers chaque page individuellement en passant la valeur false à true de $intermediaire .

ce qui vous donne ce type d'affichage selon la valeur de $intermediaire : visuel barre de pagination

Voici ce code à copier/coller depuis l'administration de PluXml dans votre page statique. , avec un exemple de contenu (9 morceaux).

‹style›:where(.page-item.page-link.active) { text-decoration:underline;font-weight:bold; padding:0.3em 2em;}.pagination.text-center.center.bordered{border-radius: 5px;width:max-content;  margin:auto;  border:solid 1px;display:flex;align-items: center;list-style:none;gap:0.5em}‹/style›‹?php
# $this is $plxShow
	#########################################
	#configuration
	#########################################
	# nombre de bloc à afficher par page
	$bypage = 1;

	$intermediaire = false; //mettre true au lieu de false pour afficher les liens de chaque page
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	# extraction de l'url
	$url = 'static'.$this-›staticId().'/'.$this-›plxMotor-›aStats[$this-›plxMotor-›cible]['url'];

	# generation du lien
	$link = $this-›plxMotor-›urlRewrite($url."/?page");

	# extraction du numéro de page dans l'URL
	$currentPage = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($currentPage - 1) * $bypage;

	#################################################
	# stockage des blocs de contenus dans un tableau
	# tableau defini dans array(). chaque bloc stocké
	# entre deux apostrophe '
	# separé par une virgule ,
	# si un bloc contient une apostrophe '
	# celle-ci doit-être préceder d'un \
	# depuis l'administration de PluXml,
	# Il faut doubler ce signe en \
	# exemple: l\'exemple. C\'est obligatoire.
	#################################################

$blocks = array(
'‹div› A - un div dans la boucle‹/div›',
'‹div› B - un div dans la boucle‹/div›',
'‹div› C - un div dans la boucle‹/div›',
'‹div› D - un div dans la boucle‹/div›',
'‹div› E - un div dans la boucle‹/div›',
'‹div› F - un div dans la boucle‹/div›',
'‹div› G - un div dans la boucle‹/div›',
'‹div› H - un div dans la boucle‹/div›',
'‹div› I - un div dans la boucle, c\'est le dernier‹/div›'
)
;

// Calcul du 1er article de la page
$premier = ($currentPage * $bypage) - $bypage;

// On calcule le nombre de pages total
$nbr = count($blocks);
$pages = ceil( $nbr / $bypage);

$blocks = array_slice($blocks, $premier, $bypage);
?›
‹!-- affichage des blocs selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	foreach ($blocks as $key) {

 echo $key;
	}
?›
‹/div›
‹!-- fin affichage des blocs --›

‹!-- Affichage de la pagination --›
‹?php
	############################
	# Affichage de la pagination
	############################
?›
‹nav›
	‹ul class="pagination text-center center bordered"›
		‹!-- Lien vers la page précédente (si on ne se trouve pas sur la 1ère page) --›
		‹?= ($currentPage › 1)  ? "‹li class=\"page-item\" ›‹a href=\"".$link . ($currentPage - 1) ."\" class=\"page-link\"›".L_PAGINATION_PREVIOUS."‹/a›‹/li›" : "" ?›

		‹?php if($intermediaire == true)  {
		for($page = 1; $page ‹= $pages; $page++) {
		  # Lien vers chacune des pages (activé si on se trouve sur la page correspondante
		  echo '‹li class="page-item ';
		  if($currentPage == $page)  echo 'active';
		  echo "\"›‹a href=\"".$link.$page ."\" class=\"page-link\"›".$page."‹/a›‹/li›";
			}
		}
		else {
		 echo "‹li class=\"page-item page-link  active \"›
				".$currentPage." / ". $nbr."
			‹/li›";

		}	?›
		  ‹!-- Lien vers la page suivante (si on ne se trouve pas sur la dernière page) --›
		 ‹?= ($currentPage ‹ $pages) ? " ‹li class=\"page-item\"›‹a href=\"".$link.($currentPage + 1 )."\" class=\"page-link\"›".L_PAGINATION_NEXT."‹/a›‹/li›" : "" ?›

	‹/ul›
‹/nav›

Table des matieres

Utiliser la fonction pagination() dans une page statique.

Dans nos pages: d'accueil, catégorie, mots clés, archives, ... il y a une fonction de pagination qui permet de dispatcher l'ensemble des articles correspondant sur une ou plusieurs pages aux besoins.

Cet article vous propose de voir comment intégrer cette fonction dans une page statique en extrayant les articles d'une catégorie et en choisissant le nombre à afficher par pages.

Mais pour quel usage, car PluXml le fait déjà , non ?

Pluxml permet de masquer à l'affichage les liens vers une ou plusieurs catégories, vous pouvez donc cacher une catégorie des menus et la présenter au travers d'une page statique en reconfigurant l'affichage à votre guise.

Pour cela il nous faut déclarer quelques variables pour ensuite filtrer et boucler sur les articles à afficher.

Pour faire concis, voici le code de base à utiliser avec quelques commentaires pour vous aider à suivre la logique du script.

‹?php
# $this is $plxShow
	#########################################
	#configuration : categorie(s) et nb/page
	#########################################
	# nombre d'article à afficher par page
	$bypage = 6;
	# choix de la categorie
	$catId = '001';
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	#mode de tri
	$tri = $this-›plxMotor-›aCats[$catId]['tri'];

	# filtrage article par catégorie(s)
	$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$catId.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

	# extraction du numéro de page dans l'URL
	$page = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($page - 1) * $bypage;

	# var publi
	$publi = 'before';

	#clone du tableau des articles
	$plxGlob_arts = clone $this-›plxMotor-›plxGlob_arts;

	# filtrage du tableau cloné
	$aFiles =  $plxGlob_arts-›query($motif, 'art', $tri, $start, $bypage, $publi);

	# extraction/maj variables
	$this-›plxMotor-›motif = $motif;
	$this-›plxMotor-›bypage = $bypage;
	$this-›plxMotor-›page = $page;

	# On boucle sur les articles filtrés
	$artsList = [];
	foreach($aFiles as $v){
			$art = $this-›plxMotor-›parseArticle(PLX_ROOT . $this-›plxMotor-›aConf['racine_articles'] . $v);
			if(!empty($art)) {
					$artsList[] = $art;
			}
	}

	#maj du tableau des données des articles filtrés
	$this-›plxMotor-›plxRecord_arts = new plxRecord($artsList);
?›
‹!-- affichage du ou des articles selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	while($this-›plxMotor-›plxRecord_arts-›loop()) {
?›
	‹article›
		‹h2›
				‹?php $this-›artTitle(); ?›
		‹/h2›
				‹?php $this-›artThumbnail(); ?›
		‹div›
				‹?php $this-›artChapo(); ?›
		‹/div›
	‹/article›
‹?php
	}
?›
‹/div›
‹!-- fin block affichage article

‹!-- Affichage de la pagination --›
    ‹nav  class="pagination text-center"›
‹?php
	############################
	# Affichage de la pagination
	############################
	$this-›pagination();
?›
    ‹/nav›‹!-- fin block affichage pagination--›

Vous pouvez donc configurer la catégorie à filtrer et le nombre d'article par page

L'affichage des articles se fait dans la boucle, vous pouvez aussi choisir les données des articles à afficher ainsi que la structure HTML de façon à ce qu'elle reflète celle de votre thème.

Table des matieres

Afficher un commentaire au hasard dans un article

Au lieu d'afficher tous les commentaires d'un article, voici un bout de code à utiliser pour n'afficher qu'un seul article pris au hasard.

Éditez le fichier commentaires.php présent dans le dossier de votre thème (exemple: /themes/defaut/commentaires.php)

en dessous de la ligne

‹?php if($plxShow-›plxMotor-›plxRecord_coms): ?›

copiez le code suivant

‹?php
	$comments = $plxShow-›plxMotor-›plxRecord_coms;
	$comment[0] = $comments-›result[rand(0, $comments-›size -1)];
	$plxShow-›plxMotor-›plxRecord_coms = new plxRecord($comment);
?›

Table des matieres

Connaître le statut d'un plugin coté visiteur

Bout de code donné récemment sur le forum de http://pluxml.org pour tester l'activation d'un plugin coté visiteur.

‹?php
if(isset($plxMotor-›plxPlugins-›aPlugins['nom_du_plugin']))
	echo "plugin actif";
else
	echo "plugin inexistant ou inactif";
?›

Remplacer "nom_du_plugin" par le nom du plugin à tester (ex: plxMyContact)

Quand un plugin est activé, il apparaît dans le tableau $plxMotor-›plxPlugins-›aPlugins
Il suffit alors de tester si l'index de tableau existe.

PS: Pour le même test coté administration, remplacer $plxMotor par $plxAdmin

Table des matieres

Positionner l'image d'accroche à gauche ou à droite du chapô

L'image d'accroche est une nouvelle fonctionnalité de PluXml 5.5 qui permet d'illustrer un article avec une image. L'ajout de l'image se fait facilement grâce aux champs prévus au niveau de l'écran de rédaction d'un article.

Une fois la mise en forme de l'affichage mise en place au niveau du thème, la présentation sera identique pour chaque article. Ce qui facilite la publication pour avoir une présentation homogène à chaque article.

Nous allons voir comment positionner cette image d'accroche à droite ou à gauche du chapô, simplement à partir de quelques lignes de code css à rajouter dans le fichier theme.css de son thème

Le code css donné ci-dessous est à rajouter à la fin du fichier theme.css qui se trouve pour le thème par défaut dans le dossier: themes/defaut/css

Image d'accroche à gauche du chapô

/* image d'accroche à gauche du chapo */
.article img.art_thumbnail {
    display: inline-block;
    float: left;
    padding: 5px 10px 10px 0;
}

Image d'accroche à droite du chapô

/* image d'accroche à droite du chapo */
.article img.art_thumbnail {
    display: inline-block;
    float: right;
    padding: 5px 0 10px 10px;
}

Table des matieres

Afficher une mention pendant 7 jours pour les nouveaux commentaires

Dans un précédent article, je vous avais montré comment afficher une mention pendant 7 jours pour les nouveaux articles. Sur le même principe je vous propose de voir maintenant comment afficher une mention pendant 7 jours pour les nouveaux commentaires.

L'idée est donc identique: afficher une icone "NEW" à coté des commentaires datés de moins de 7 jours. Pour mettre en place la modification, éditez le fichier commentaires.php de votre thème, et en dessous de la ligne:

		‹div id="‹?php $plxShow-›comId(); ?›" class="comment"›

ajoutez le code suivant:

			‹?php
			$ndays = 7;
			if(floor((strtotime(date('YmdHi')) - strtotime($plxShow-›plxMotor-›plxRecord_coms-›f('date'))) / (60*60*24)) ‹ $ndays) : ?›
				‹p›‹img src="‹?php $plxShow-›template() ?›/img/new.png" alt="" title="" /›‹/p›
			‹?php endif; ?›

Si vous souhaitez augmenter ou réduire la période de 7 jours, changez la valeur 7 dans la ligne suivante:

	$ndays = 7;

Vous pouvez récupérer l'icone "NEW" ci-dessous et la copier dans le dossier img de votre thème. Par exemple dans: /theme/defaut/img/

Table des matieres

Plugins: afficher les boutons dans la barre d'action

Si vous développez des plugins pour PluXml, voici comment afficher les boutons dans la barre d'action sur les écrans d'administration ou de configuration des plugins.

La méthode est très simple. Il suffit d'englober les boutons dans une balise ‹p› qui a comme classe css in-action-bar

‹p class="in-action-bar"›
	‹?php echo plxToken::getTokenPostMethod() ?›
	‹input type="submit" name="submit" value="Enregistrer" /›
‹/p›

La classe css in-action-bar est automatiquement reconnue par PluXml car elle fait partie intégrante des feuilles de style utilisées par PluXml.

Exemple complet d'une page de configuration d'un plugin pour bien situer le contexte

‹?php if(!defined('PLX_ROOT')) exit; ?›
‹?php

# Control du token du formulaire
plxToken::validateFormToken($_POST);

if(!empty($_POST)) {
	$plxPlugin-›setParam('param1', $_POST['param1'], 'string');
	$plxPlugin-›setParam('param2', $_POST['param2'], 'cdata');
	$plxPlugin-›saveParams();
	header('Location: parametres_plugin.php?p=plxMyTest');
	exit;
}
?›

‹form class="inline-form" action="parametres_plugin.php?p=plxMyTest" method="post" id="form_plxMyTest"›
	‹fieldset›
		‹p›
			‹label for="id_param1"›Paramètre 1 :‹/label›
			‹?php plxUtils::printInput('param1',$plxPlugin-›getParam('param1'),'text','20-20') ?›
		‹/p›
		‹p›
			‹label for="id_param2"›Paramètre 2 :‹/label›
			‹?php plxUtils::printInput('param2',$plxPlugin-›getParam('param2'),'text','20-20') ?›
		‹/p›

		‹p class="in-action-bar"›
			‹?php echo plxToken::getTokenPostMethod() ?›
			‹input type="submit" name="submit" value="Enregistrer" /›
		‹/p›
	‹/fieldset›
‹/form›

Table des matieres

Inclure une page statique à partir de son titre ou de son url

Depuis la version 5.4 de PluXml, il est possible d'afficher le contenu d'une page statique à partir de son titre ou de son url.

Rappel de l'utilisation de la fonction staticInclude() permettant d'afficher une page statique à partir de son identifiant mais aussi maintenant comment l'utiliser à partir de son titre ou de son url.

Pour ceux qui connaisse la fonction staticInclude(), vous savez déjà qu'il est possible d'afficher le contenu d'une page statique un peu n'importe où sur son site. Il suffit de passer en paramètre de cette fonction le numéro d'identification de la page, numéro à récupérer dans la colonne Identifiant page dans la gestion des pages statiques de l'administration.

Exemple 1: à partir du numéro d'identification sur 3 chiffres

‹?php $plxShow-›staticInclude('001') ?›

Exemple 2: sans les zéros significatifs (en tapant la valeur '1', PluXml sait qu'il s'agit de la page '001')

‹?php $plxShow-›staticInclude('1') ?›

Depuis la version 5.4 de PluXml, il est également possible d'afficher le contenu d'une page statique, toujours avec la fonction staticInclude(), mais à partir de son titre ou de son url.

Exemple 3: à partir du titre de la page

‹?php $plxShow-›staticInclude('Titre de la page') ?›

Le titre de la page est bien sur ce que vous avez saisi dans la colonne Titre lors de la création de la page.

Exemple 4 : à partir de l'url de la page

‹?php $plxShow-›staticInclude('titre-de-la-page') ?›

L'url est déduite à partir du titre de la page, mais il est possible d'avoir un titre qui ne correspond à l'url, ou inversement, car ces deux informations sont éditables dans la gestion des pages statiques. Les champs Titre et Url sont des zones de saisie libre.

Les lignes de codes données ci-dessus peuvent être utilisées dans les fichiers .php de votre thème, à l'endroit où vous souhaitez inclure et afficher le contenu d'une page statique.

Table des matieres

Ajoutez une lettrine aux articles en css

Grâce à la magie du css, nous allons modifier la taille de la première lettre du texte des articles pour créer une lettrine.

Pour se faire, éditez le fichier css de votre thème et ajoutez à la fin du fichier le code suivant:

article section:first-letter {
	float: left;
	margin: 10px 5px 0 0;
	padding: 0 10px 0 0;
	line-height: 52px;
	font-size: 78px;
	color: #00BBFF;
}

Ce code est valable pour le thème par défaut de PluXml 5.3.1.

Il est donc facilement adaptable en fonction de votre thème. Vous pourrez notamment jouer sur les valeurs des paramètres line-height et font-size pour changer la taille de la lettrine, et du paramètre color pour modifier la couleur du caractère mis en évidence.

Table des matieres

Afficher une mention pendant 7 jours pour les nouveaux articles

Voici quelques lignes de code à ajouter dans votre thème pour afficher à coté du titre des articles une icône NEW informant qu'il s'agit d'un nouvel article récemment publié.

L'idée est de comparer la date de publication des articles avec la date du jour. Si le nombre de jours trouvé est inférieur à 7, nous décidons qu'il s'agit d'un nouvel article et dans ce cas, on affiche devant le titre de l'article une petite icône "NEW". Dans mon exemple j'utilise une icône de 32 x 32 pixels comme celle-ci.

Copiez cette image dans le dossier img de votre thème. Par exemple dans: /theme/defaut/img/

Éditez le fichier home.php de votre thème (j'utilise ici le thème par défaut de PluXml 5.3.1)

Remplacez les lignes suivantes:

‹h1›
	‹?php $plxShow-›artTitle('link'); ?›
‹/h1›

par

‹h1›
	‹?php
	$ndays = 7;
	if(floor((strtotime(date('YmdHi')) - strtotime($plxShow-›plxMotor-›plxRecord_arts-›f('date'))) / (60*60*24)) ‹ $ndays) : ?›
		‹img src="‹?php $plxShow-›template() ?›/img/new.png" alt="" title="" /›
	‹?php endif; ?›

	‹?php $plxShow-›artTitle('link'); ?›
‹/h1›

Si vous souhaitez augmenter ou réduire la période de 7 jours, changez la valeur 7 dans la ligne suivante:

	$ndays = 7;

L'icône NEW n'est affichée ici que sur la page d'accueil du site. Vous aurez également à modifier si vous le souhaitez les autres fichiers du thème qui affiche les titres des articles.

Table des matieres

Afficher la description des catégories que sur la première page

La description d'une catégories est affichée dans le thème par défaut grâce à l'instruction suivante:

‹?php $plxShow-›catDescription(' : #cat_description'); ?›

Cette description est visible lorsque l'on consulte les articles par catégorie, quelque soit le numéro de page en cours.

Pour restreindre l'affichage de la description uniquement à la première page de la catégorie, éditez le fichier categorie.php stocké dans le dossier de votre thème et utilisez à la place le code suivant.

‹?php
	if($plxShow-›plxMotor-›page==1) {
		$plxShow-›catDescription(' : #cat_description');
	}
?›

Ainsi lorsque vous paginez vers la page 2 et les pages suivantes, la description de la catégorie visitée ne sera pas affichée.

Table des matieres

Récupérer les adresses emails des commentateurs

Voici un exemple très simple de code pour récupérer le nom et l'adresse email des personnes qui laissent des commentaires sur votre site.
Pour tester cet exemple, faites un simple copier-coller du code suivant dans le contenu d'une page statique, en passant par votre administration, menu Pages statiques puis lien Éditer. Cliquez ensuite sur le lien Voir pour afficher les résultats.

‹?php
$plxMotor = plxMotor::getInstance();
$root = PLX_ROOT.$plxMotor-›aConf['racine_commentaires'];
$plxGlob = plxGlob::getInstance($root, false);
if($files = $plxGlob-›query("/(.*)\.xml$/")) {
	$array = array();
    foreach($files as $idx =› $file) {
        $com = $plxMotor-›parseCommentaire($root.$file);
		if(!in_array($com['mail'], $array)) {
			$array[$com['mail']] = $com['author'].' - '.$com['mail'];
		}
    }
}
echo "‹ul›‹li›".implode("‹/li›‹li›", $array)."‹/li›‹/ul›";
?›

Table des matieres

Tester l'existence d'un plugin à partir d'un plugin

Pour tester l'existence d'un plugin, ajoutez le code suivant dans la classe de votre plugin:

public static function isPluginExists($plugname) {

	if(defined('PLX_ADMIN'))
		$plxObj = plxAdmin::getInstance();
	else
		$plxObj = plxMotor::getInstance();

	return isset($plxObj-›plxPlugins-›aPlugins[$plugname]);
}

A partir de votre plugin vous pouvez maintenant tester l'existence d'un autre plugin en utilisant ce type de code:

if(plxMyPlugin::isPluginExists('plxPlugin_a_Tester') {
	// si le plugin existe
} else {
	// si le plugin n'existe pas
}

Ici plxMyPlugin est le nom de la classe de votre plugin et plxPlugin_a_Tester est le nom de la classe du plugin à tester.

Table des matieres

Inclure un fichier php stocké dans le dossier de son thème

Avez-vous besoin pour votre thème d'utiliser une fonction ou des bouts de code php que vous avez programmé ? Vous vous demander peut-être alors comment appeler un fichier php personnel à partir de mon thème et quelle syntaxe utiliser. La réponse est simple et tient en une ligne de code...

Afin de bien structuré le dossier de votre thème, je vous propose de créer dedans un dossier appelé par exemple php, dans lequel vous enregistrerez le fichier contenant vos lignes de code php.

Éditez le fichier header.php et après la première ligne, collez le code suivant:

‹?php include(PLX_ROOT.$plxMotor-›aConf['racine_themes'].$plxMotor-›style.'/php/monfichier.php') ?›

Quelques explications

PLX_ROOT fait référence à la racine du site

$plxMotor-›aConf['racine_themes'] fait référence au dossier themes paramètré dans les options avancées de l'administration

$plxMotor-›style fait référence au nom du dossier de votre thème

php est le nom du dossier dans lequel est stocké le fichier avec nos lignes de code

monfichier.php est le nom du fichier php contenant notre code php personnel (à changer en fonction de votre choix)

Grâce à cette ligne de code, quelque soit le nom du dossier thème, le chemin vers le fichier monfichier.php restera valide.

Table des matieres

Ajouter un lien dans son thème vers une page statique à partir de son numéro

Voici le bout de code php pour ajouter et coder en dur dans son thème pour PluXml, un lien vers une page statique à partir de son numéro d'identifiant. Le numéro d’une page statique est sur 3 caractères et est par exemple de la forme 001.

‹?php
$staticId = '001';
if(isset($plxMotor-›aStats[$staticId])) {
	$url = $plxMotor-›urlRewrite('?static'.$staticId.'/'.$plxMotor-›aStats[$staticId]['url']);
	$title = plxUtils::strCheck($plxMotor-›aStats[$staticId]['name']);
	echo '‹a href="'.$url.'" title="'.$title.'"›'.$title.'‹/a›';
}
?›

Modifier la valeur de la variable $staticId avec le numéro de la page statique souhaitée (ici 001)

Pour rappel le numéro d'une page statique est à récupérer à partir de l'administration dans la gestion des pages statiques, colonne Identifiant

Vous pouvez faire un copier-coller de ce code et l'ajouter dans votre thème, par exemple dans le fichier sidebar.php

Table des matieres

Compter le nombre de pages statiques

Voici un petit bout de code que l'on m'a demandé récemment pour compter le nombre de pages statiques dans son PluXml.

Dans le fichier header.php de son thème après la ligne:

‹?php if (!defined('PLX_ROOT')) exit; ?›

ajoutez le code suivant:

‹?php
function nbStatics() {
    global $plxMotor;
    $count=0;
    if($plxMotor-›aStats) {
        foreach($plxMotor-›aStats as $k=›$v) {
            if($v['active']) $count++;
        }
    }
    return $count;
}
?›

La fonction nbStatics() compte et renvoie le nombre de pages statiques qui sont actives.
Pour afficher ce nombre, ajoutez simplement la ligne suivante dans un des fichiers du thème à l'endroit où vous voulez:

Nombre de pages statiques: ‹?php echo nbStatics(); ?›

Web

Table des matieres

Ajouter un compteur de visite

Le site whos.amung.us propose un service gratuit qui permet de savoir combien de visiteurs sont présents sur votre site, où ils sont localisés et quand vous avez eu le plus de personnes en ligne. Il n’y a pas besoin d’inscription, juste quelques lignes de code à copier sur votre site: l’intégration dans PluXml se fait très rapidement: mode d’emploi...

La première chose à faire est d’aller sur cette page pour récupérer le code du widget qui vous intéresse. Plusieurs modèles de compteur sont disponibles: un modèle classique, un en couleur, un petit, un sous forme d’onglet et un dernier sous forme de carte. Choisissez le votre, cliquez sur le code fourni pour le copier automatiquement dans le presse-papier.

Pour ajouter rapidement le code dans PluXml, accédez à la zone d’administration de votre site. Allez dans le menu Paramètres › Options d’affichage et cliquez sur le lien Éditer les fichiers du thème defaut. (à la place de défaut c’est le nom de votre thème actuel qui doit être afficher)

Dans le déroulant Choix du fichier à éditer, sélectionner le fichier /footer.php et cliquez sur le bouton Charger. Le contenu du fichier est affiché. Faites un coller à l’endroit où vous souhaitez afficher le compteur. Je vous propose le fichier du footer mais rien ne vous empêche de le coller dans le fichier de la sidebar (/sidebar.php). Cliquez sur le bouton Sauvegarder le fichier. C’est terminé.

Pour consulter les statistiques, cliquez simplement sur votre compteur: vous serez redirigé vers la page de stats sur le site de whos.amung.us.

Petite cerise sur le gâteau, deux extensions sont disponibles, une pour Chrome et une autre pour Firefox, pour afficher dans la barre du navigateur le nombre de visiteurs présents sur votre site.

Table des matieres

Où placer le code de suivi de Google Analytics sur son site ?

Il est souvent recommandé de placé le chargement de code javascript à la fin d’une page html avant la balise ‹/body›, ceci pour ne pas pénaliser le temps de charge du site. C’est en partie vrai. En revanche Google recommande de placer son code de suivi d'un site web de Google Analytics avant la balise ‹/head›, comme expliqué sur cette page, parce que le code est exécuté de manière asynchrone, c'est à dire en arrière plan. De cette façon le temps de chargement de la page n'est pas impacté.

‹script type="text/javascript"›

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

‹/script›

Remplacer UA-XXXXX-Y par votre code personnel.

Le placement de ce code au bon endroit est d'autant plus nécessaire si vous souhaitez utiliser les outils pour webmasters de google (car sinon impossible).

Ps: Une mise à jour en version 1.2 de mon plugin MyGoogleAnalytics pour PluXml est disponible dès à présent pour prendre en compte cette règle ici.

Actualité

Table des matieres

PluXml 5.8.11 et la version 5.9.0 en dev

PluXml continue a évolué

La version stable est passée de la 5.8.9 à la 5.8.11, en corrigeant plusieurs petits bugs ou typos

Elle se conforme aux versions de PHP 8.X, évitant ainsi tout les messages désagréables de pratiques de codages devenus obsolètes et bientôt inopérants.

La mise à jour se fait de façon classique sans modifier la structure de vos fichiers de configurations ou des articles.

Vous pouvez suivre les évolutions de PluXml avec les archives des différentes versions . Les archives avec le suffixe -rcX , indiquent une version en développement à tester , à ne pas utiliser pour un site en ligne

Et à propos de la 5.9.0-rcX, qu'en est-il ?

La version 5.9.0, le futur

Cette version fonctionnelle , toujours en développement, à déjà beaucoup modifié et amélioré le cœur de PluXml en factorisant et améliorant un très grand nombre de ses fonctions internes.

L'une des nouveautés est aussi une avancée remarquable dans l’internationalisation (i18n ) du CMS, les url classique de PluXml comme : articleX, categorieX, ...reflètent maintenant la langue configurée pour le site, en traduisant les mot clés des URLs.

Le cas des plugins dans la 5.9.0

Une compatibilité partielle est conservée, principalement pour les plugins "dit officiels".

D'autre part:

La réécriture d'une grosse partie du code de PluXml peut avoir des effets de bords sur certains plugins qui sont encore compatible avec la dernière version stable de PluXml.

De nombreux Plugins ne fonctionnent pas ou partiellement avec PHP8.x , cela ne dépend pas de PluXml.

Enfin, le forum de PluXml reste le meilleur endroit pour obtenir de l'aide sur l'installation et l'usage d'un plugin, quelle que soit la version de Pluxml utilisée

Cas des thèmes

Dans l'ensemble, les thèmes continueront de fonctionner tel quel, certaines nouvelles fonctionnalités ou templates affichables ne seront pas disponibles.

Pour réadapter un thèmes et y ajouter les nouveaux templates , une serie de tutoriels sur pluxthemes.com vous montrerons comment ajouté un template dans votre thèmes.

Table des matieres

Pluxopolis se dote d'une NewsLetter

Un tout nouveau plugin fonctionnel vient de rejoindre les fonctionnalités que l'on peut ajouter à notre CMS favoris.C'est lui qui vient d'être activé sur pluxopolis.

Le plugin myNewsLetter

Ce plugin à encore besoin de murir au travers de tests "utilisateurs", tant en tant qu'abonné qu'en tant qu''administrateur de façon à améliorer son interface de configuration et l'aspect des news envoyées.

Qu'a t-il de particulier?

Il ne dépend pas d'un service tiers mais requiert que la fonction mail() soit fonctionnelle sur votre hébergement

Les adresses mails sont stockées cryptées et ne sont compatibles qu'avec le plugin et le site sur lequel il a été activé.

Les envois peuvent être automatisés sans que le webmestre s'en souci. Dans ce cas , configurez bien votre newsletter avant de prendre cette option, car les news partiront sans préavis.

Les news sont générées automatiquement à l'aide d'un système de template pour construire "les nouvelles". Configurables elles sont aussi éditables. Construites sur des tableaux HTML pour une compatibilité maximale avec les messageries. C'est l'éditeur TinyMce6 (version CDN gratuite) qui a été choisi pour l’édition après en avoir testé plusieurs.

Critiques et retours de bogues

À priori dédié aux surbookés, il n'est surement pas dénué de défauts, c'est au utilisateurs de les débusqués, si il y en a.

Dites nous tout! - Les commentaires seront fermés d'ici quelques mois. Mais il y a déjà un sujet qui est ouvert sur le forum où vous pourrez partager vos critiques et demandes d'aides : MyNewsLetter, sujet sur le forum officiel de PluXml.

Vous le retrouverez sur github pour voir sa description complète, son code source et télécharger sa dernière version. ou dans les ressources pour pluxml sur le Dépôt de plugins multi-versions pour Pluxml.

Bon été 2023 à tous

Table des matieres

Pluxopolis reste en ligne.

Ce site initialement créer et mise en ligne par Stéphane Ferrari en 2013, a été durant quelques années, alimenté, devellopé et enfin préservé et gardè en ligne par Jack31 (de son pseudo sur le forum de PluXml)

Le contenu du site, montre bien la résilience et la cohérence de PluXml dans son évolution, c'est pourquoi je reprend le flambeau pour un temps afin de gardé ce site en ligne ainsi que son contenu gratuit, sans aucune autre prétention.

Et sans promesses que je ne saurais tenir, j'ose dire que je tenterai, néanmoins, de ne pas modifier l'idée originale et d'ajouter au fil du temps quelques astuces utiles aux utilisateurs de PluXml, autant à l'attention des nouveaux que des plus anciens et aguerris.

Pluxopolis n'est pas le seul site proposant des ressources pour mon CMS favoris, d'autres le font et l'ont fait. Certaines de ses ressources peuvent être retrouvées dans les archives du WEB malgré le fait que le site est disparu ou que son nom de domaine à était repris par quelqu'un d'autre, c'est la vie d'un site, finir aux oubliettes ou changer de propriétaire ou pire , être parquer et mis aux enchéres. Je tenterais donc aussi de remettre en ligne quelques un de ces articles (dans ce cas , un lien vers l'archive de la page du site disparu sera ajouté à l'article).

Si le forum de PluXml est actif ainsi que les évolutions de versions de PluXml, il y est souvent difficile d'y retrouver un sujet précis, même sur des bugs ou problématiques redondantes.

PluXopolis propose déjà une petite base de connaissances que vous pouvez interroger via son formulaire de recherche.

Si vous trouvez des pages aux contenus obsolètes, n'hésitez pas à le faire savoir via le formulaire de contact ou les commentaires si ceux ci sont activés

Table des matieres

Choisir des thèmes ou apprendre à les mettre à jour

Tous les amis de Pluxml savent que les versions de ce CMS montent plus vite que les mises à jours des plugins et des thèmes existants ce qui peut être galère pour les débutants qui découvrent notre sympathique gestionnaire de sites.

Mais l'un d'entre-nous a enfin eu l'idée de mettre en ligne une sélection de thèmes (templates) mis à jour pour la dernière version PluXml 5.8.9 mais surtout d'écrire des tutoriels pour apprendre à ses visiteurs de le faire eux-même. :)

Son site, https://pluxthemes.com est à visiter absolument et comme ça, si vous voulez mettre rapidement en ligne un site propulsé par Pluxml, il ne vous faudra que quelques minutes pour choisir le template qui vous va bien et/ou apprendre les bases de la création et mise à jour des thèmes. Ce n'est pas si difficile que cela. ;)

De plus, le gars est plein d'humour et ses textes se lisent avec délectation.

gcyrillus-nomade, c'est le nom avec lequel il signe sur les forums, bien qu'il fasse en privé le modeste, est doué pour pas mal de choses et, sur cet espace depuis si longtemps, est bénévolement à l'origine que beaucoup de matériels que nous utilisons tous les jours pour la création et construction de nos sites.

Il connaît tout de Pluxml.

Quand vous aurez l'occasion de communiquer avec lui, dites-lui "Bonjour" de ma part. ;)

https://pluxthemes.com

Table des matieres

Changement de propriétaire

C'est ce qu'on lit d'habitude sur la banderole sur les vitrine de magasins qui changent d'équipe de gestion et notre site a le devoir de vous signaler cet événement.

Pas que le blog soit une boutique ou que Stéphane Ferrari ancien chef de projet PluXml soit fatigué de notre CMS préféré ou en ait marre, mais notre ami, de part ses engagements professionnels et un déménagement dans le sud de la France, a passé la main à justement une nouvelle équipe et c'est votre serviteur, Jack Paloque-Berges (Jack31 sur les forums), qui prend la relève en ce qui concerne Pluxopolis.

Le contenu et la vocation ne changeront pas.

Le titre "Devenir un pro de PluXml, mais pas seulement..." reste d'actualité et le "pas seulement" prends la forme d'une nouvelle section sobrement nommée "Centre de ressources et de téléchargements pour PluXml" et, si il n'y a pour le moment pas d'autres projet de développement de l'ensemble, je compte sur des désirs et envies des visiteurs pour me faire des propositions. De la collaboration quoi ! ;)

En attendant, habitués ou pas de ce site, je vous souhaite encore et toujours beaucoup de bonheur avec PluXml et Pluxopolis.

Jack Paloque-Berges

Table des matieres

Sortie ce jour de PluXml 5-7

La version 5.7 apporte également son lot de correctifs. Je vous invite à parcourir le changelog pour prendre connaissance de l'ensemble des modifications.

Le site de démonstration a été mis à jour, pour ceux qui veulent découvrir le nouveau thème ou tester le drag and drop, par exemple.

Agrémentée d'un nouveau thème utilisant PluCSS 1.3, la version 5.7 de PluXml apporte quelques nouveautés, tel que la possibilité de gérer l'ordre des catégories et des pages statiques par drag and drop. L'ordre de chargement des plugins est également concerné par cette fonctionnalité.

Par ailleurs, PluXml est désormais capable de charger des plugins en fonction d'un contexte prédéfini : uniquement sur la partie publique du site, uniquement dans l'administration, ou dans les deux cas. Cela nécessite néanmoins une action des développeurs de plugins pour profiter de cette amélioration.

La documentation a été complétée pour apporter plus d'informations sur ces nouveautés.

L'équipe de PluXml adresse un remerciement tout particulier aux contributeurs de cette version 5.7 (bazooka07, WorldBot, sudwebdesign) et à l'ensemble de la communauté qui anime le forum.

Nous vous souhaitons une bonne installation et d'excellentes fêtes de fin d'année.

P3ter

Pluxopolis est toujours en cours de migration.
Il pourrait encore avoir des dysfonctionnements pendant quelques jours.

Merci pour votre patience. :)

Table des matieres

Faut-il fusionner les dossiers images et documents dans PluXml?

Cette réflexion revient souvent dans mes recherches d’amélioration de PluXml. Elle traine depuis longtemps dans ma tête, car pourquoi utiliser deux dossiers différents pour stocker les fichiers à diffuser sur un site, que ce soient des images, des vidéos ou de la musique. Le système de sous-dossiers permet de hiérarchiser une arborescence et de classer correctement les fichiers en n’ayant qu’un seul premier niveau pour accéder à l’ensemble des fichiers.

Les habitués savent que je défends l’idée de la simplicité que ce soit au niveau de l’ergonomie des écrans pour faciliter l’utilisation de PluXml mais aussi au niveau technique pour avoir un code de programmation propre et facilement compréhensible.

Fusionner les dossiers Images et Documents serait donc dans un premier temps une amélioration technique qui simplifierait la programmation du gestionnaire de médias de PluXml : plus besoin de gérer deux boutons Images et Documents pour basculer d’un dossier à un autre. Le code serait allégé, le contenu de l’écran également.

D’un point de vue utilisateur, on peut se demander si l’utilisation de ces deux boutons est suffisamment intuitive pour un novice ou pratique voir utile pour un habitué. Combien d’entre vous utilisez le dossier Documents ? Si je n’ai aucun doute pour le dossier Images, l’utilisation du dossier Documents est moins évidente, voir surement inexistante.

Alors fusionner les dossiers images et documents, peut-être, mais quel nom donner au nouveau répertoire ? Quelques idées pour le nom du dossier de stockage des fichiers :

Documents

Medias

Fichiers (ou Files)

Avez-vous d’autres suggestions ?

Je ferme volontairement les commentaires de cet article pour vous inviter à me faire part de vos remarques et de vos avis sur le forum de PluXml, afin de regrouper les discussions dans un seul endroit. Rendez-vous donc ici pour continuer à parler de ce sujet.

Table des matieres

Plugin CKEditor 4.4.6: ce que vous devez savoir avant de mettre à jour

Cet article s'adresse surtout aux personnes qui utilisent déjà le plugin ckeditor pour PluXml mais dans une version antérieure et qui souhaitent le mettre à jour.

Cette nouvelle version du plugin utilise la dernière version de ckeditor (branche 4.x) disponible en téléchargement sur le site officiel.

Avant de mettre à jour le plugin, voici ce que vous devez savoir...

Contrairement à la version précédente du plugin, j'ai choisi de ne faire aucune personnalisation technique dans les sources de ckeditor ou dans ses propres plugins, afin de faciliter les futures mises à jour.

Si vous faites la mise à jour du plugin ckeditor pour PluXml, voici ce que vous allez perdre:

la protection des adresses emails dans les articles et les pages statiques

la coloration syntaxique

l'effet de zoom sur les images grâce à lightbox plus

le choix d'un thème pour l'apparence de l'éditeur

Protection des adresses emails

J'ai choisi de supprimer cette fonctionnalité car si vous décidez de changer ou d'utiliser un autre éditeur que ckeditor, vos adresses emails ne seront plus protégées.

C'est pourquoi en remplacement j'ai créé spécifiquement le plugin MyProtectEmails qui fonctionne de façon autonome.

La coloration syntaxique

Si vous avez besoin d'une coloration syntaxique parce que vous publiez du code dans vos articles, faites un tour sur le forum de PluXml. Vous trouverez des plugins dédiés. De la même façon, si vous changer d'éditeur, cette fonctionnalité sera toujours disponible sur votre site.

L'effet de zoom sur les images grâce à lightbox plus

Les raisons de la suppression de lightbox sont identiques. Il existe des plugins dédiés pour cet effet sur les images: utilisez les pour ne plus être dépendant de ckeditor.

Le choix d'un thème pour l'apparence de l'éditeur

Parce que peu d'intérêt et pour faciliter les mises à jour du plugin, cette option est simplement supprimée.

Conclusion

Si vous êtes un nouvel utilisateur et que vous envisagez d'installer pour la première fois ckeditor, aucun souci. Rendez-vous sur la page des plugins de Pluxopolis pour télécharger le plugin.

Si vous utilisez une version précédente et que vous décidez malgré les changements dans le plugin de l'utiliser, voici comment faire:

à partir de la zone d'administration de votre site, allez dans Paramètres › Plugins › Plugins actifs

cochez la ligne du plugin ckeditor

dans la liste déroulante "Pour la sélection...", cliquez sur "Supprimer" et valider par le bouton "Ok"

NB: En cas de problème vous pouvez supprimer manuellement le plugin en supprimant de votre site le dossier: /plugins/ckeditor

Allez ensuite sur la page des plugins de Pluxopolis pour télécharger et faire une installation manuelle du plugin (voir Comment installer un plugin créé par Pluxopolis). Vous pouvez également passer par le plugin MyPluginDownloader si ce plugin est installé sur votre site.

Configuration du plugin ckeditor

Dernière étape importante après avoir installé le plugin ckeditor: allez sur la page d'administration du plugin pour régler ses paramètres de fonctionnement, nottament le chemin de stockage des fichiers que vous enverrez sur votre site en passant par le gestionnaire de fichier intégré à ckeditor.

Cette nouvelle version embarque:

CKEditor 4.4.6 http://ckeditor.com/

Roxyfileman 1.4.0 http://www.roxyfileman.com/

Justify Plugin 4.4.6 http://ckeditor.com/addon/justify (justify)

Show Blocks 4.4.6 http://ckeditor.com/addon/showblocks (showblocks)

oEmbed Plugin 1.1.7 http://ckeditor.com/addon/oembed (oembed)

Widget Plugin 4.4.6 http://ckeditor.com/addon/widget (widget)

Line Utilities 4.4.6 http://ckeditor.com/addon/lineutils (lineutils)

Table des matieres

Page de plugins sur Pluxopolis

Depuis que Google a décidé début 2014 de ne plus permettre de mettre à jour la zone de téléchargement sur nos sites Google Code, j'ai complètement basculer tous les codes source de mes plugins pour PluXml sur github. Un mal pour un bien on peut dire car github offre de nombreuses fonctionnalités et beaucoup plus de souplesse dans la gestion des dépôts git que Google Code, devenu complètement dépassé et obsolète face à la concurrence.

J'en ai donc profiter pour créer une nouvelle page sur Pluxopolis pour lister la totalité de mes plugins et vous faciliter ainsi leur téléchargement.

Ça se passe donc ici, sur la nouvelle page des Plugins.

Table des matieres

Mes plugins pour PluXml sur github

J'ai récemment passé tous les sources des plugins pour PluXml que je développe et maintiens sur la plateforme github. C'est certainement la meilleure solution pour partager et permettre à chacun de participer ou suivre leur développement.

Vous pouvez utiliser le bug tracker de github pour signaler les problèmes rencontrés ou faire des demandes d'évolutions. Cela vous permettra d'avoir un meilleur retour, et de mon coté je pourrais mieux suivre les différentes tâches à réaliser pour répondre à vos besoins.

Retrouvez donc tous les dépots git de mes plugins pour PluXml à l'adresse suivante:

https://github.com/Pluxopolis

N'hésitez pas également à vous rendre sur le forum de PluXml.
La communauté est très présente et active et répondra à toutes vos questions.
C'est aussi une mine d'informations sur PluXml.

Programmation

Table des matieres

faire d'un script un plugin

La plupart des plugins n'ajoutent qu'une fonctionnalité ponctuellement utile.

D'autres, intègrent de véritables applications.

Leur point communs?

Pour qu'il soient pleinement fonctionnels ils doivent être greffés aux fonctions natives, ou ajoutés à PluXml.

La créations d'un plugin est souvent chronophage et particulièrement lorsqu'il s'agit d’implémenter un simple script .

Chacun est tenter de modifier à un ou quelques endroits le code de PluXml pour y glisser rapidement cette nouvelle fonctionnalité.

Mais il s’avère que c'est une mauvaise idée. Les versions de PHP qui évoluent en permanence, nécessiteront très souvent une remise à niveau du script , et Les mises à jour de PluXml élimineront toutes les modifications effectuées au sein du code contrairement à un plugin, qui n'aura pas forcément besoin d'une mise à niveau, ni pour les mêmes raisons que PluXml.

le pourquoi d'un plugin

L'installation d'un plugin est de beaucoup, plus perenne, que l'inclusion manuel d'un script., il n' y a pas à en douter

Le plugin ne demande pas à l'utilisateur d'avoir des compétences de développeur ni une expertise sur le code de PluXml. Tout au plus si c'est la première fois, la capacité d'activer un plugin pour ceux gérant leur CMS en autonomie complète...

Si vous avez installer vous même PluXml, l'installation et l'activation d'un plugin est tout aussi simple !.

Reprenons un script en exemple:

Voyons comment integrer le script commentaires dans une page statique en un plugin avec le confort d'une page de configuration.

Cette article est pour démontrer !, qu’une fois le plugin réalisé, l'utilisateur n'aura pas à savoir coder pour ajouter cette fonction à toute les pages statiquestelle ou telle page statique ni pour régler les options d'affichages.

Préparons le dossier de notre projet de plugin.

Pour cela , ils nous faut un nouveau dossier dans le répertoire plugins de PluXml. Nommons ce dossier : MonPlugin.

Dans ce dossier ajoutons deux fichiers vides, l'un nommé MonPlugin.php (même nom que le dossier, c'est obligatoire.) et infos.xml.

Remplissons tout de suite le fichier infos.xml qui décrit votre plugin et l'identifie dans l'administration avec le code suivant:

‹?xml version="1.0" encoding="UTF-8"?›
	‹document›
	‹title›‹![CDATA[mon plugin]]›‹/title›
	‹author›‹![CDATA[G.Cyrille]]›‹/author›
	‹version›1‹/version›
	‹date›01/01/1980‹/date›
	‹site›https://pluxopolis.net‹/site›
	‹description›‹![CDATA[Ajoute aux pages statiques le module commentaires de PluXml.]]›‹/description›
	‹scope›‹/scope›
	‹/document›

Enregistrons et passons à la suite.

le Hook central

Il n'y a qu'un seul script à intégrer et nous pouvons facilement identifier le Hook qui va injecter ce script au bon endroit.

Cet endroit est juste après le contenu de la page, recherchons la fonction qui extrait ce contenu .Nous la trouvons dans le fichier du theme static.php et c'est : $plxShow-›staticContent();.

Regardons maintenant cette fonction dans le fichier core/lib/class.plx.show.php si elle dispose d'un Hook :

   /**
     * Méthode qui inclut le code source de la page statique
     *
     * @scope    static
     * @author    Florent MONTHEL, Stephane F
     **/
    public function staticContent()
    {

        if (eval($this-›plxMotor-›plxPlugins-›callHook("plxShowStaticContentBegin"))) return;

        # On va verifier que la page a inclure est lisible
        if ($this-›plxMotor-›aStats[$this-›plxMotor-›cible]['readable'] == 1) {
            # On genere le nom du fichier a inclure
            $file = PLX_ROOT . $this-›plxMotor-›aConf['racine_statiques'] . $this-›plxMotor-›cible;
            $file .= '.' . $this-›plxMotor-›aStats[$this-›plxMotor-›cible]['url'] . '.php';
            # Inclusion du fichier
            ob_start();
            require $file;
            $output = ob_get_clean();
            eval($this-›plxMotor-›plxPlugins-›callHook('plxShowStaticContent'));
            echo $output;
        } else {
            echo '

' . L_STATICCONTENT_INPROCESS . '

';
        }

    }

Cette fonction dispose de deux entrées ou appels identifiable apr cet syntaxe: eval(/* appel du hook par son nom*/).

Ici, c'est le deuxième qui nous intéresse eval($this-›plxMotor-›plxPlugins-›callHook('plxShowStaticContent'));. C'est à partir du hook plxShowStaticContent que l'on pourra injecter le script dans la page statique.

Note, un listing de tous les hooks disponibles est ici : liste des hooks.

l'assemblage

chaque plugin se construit sur une structure de base identique à laquelle on ajoute les hooks et autres fonctionnalités optionnelles.

Voici le code minimal d'un plugin :

‹?php  if(!defined('PLX_ROOT')) exit;
class monPlugin extends plxPlugin {

    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
}

Nous avons le script et le hook d'entrée, il ne reste qu'a assembler les deux et les ajouter à la base , et toutes nos pages statiques pourront bénéficier d'un module de commentaires.

Declarons le hook et ajoutons la fonction du hook

‹?php  if(!defined('PLX_ROOT')) exit;
class monPlugin extends plxPlugin {

    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
    $this-›addHook('plxShowStaticContent', 'plxShowStaticContent');
    }

	# methode qui modifie la fonction $plxShow-›staticContent())
    public function plxShowStaticContent() {
		# insertion des commentaires et formulaire
		echo '‹?php';
		?›
               // ici le code à injecter et à interpréter dans la fonction staticContent()
		‹?php
		echo'?›';
    }
}

Pour injecter et ajouter ce code dans la page statique, nous allons suivre la méthode utiliser dans la fonction qui fait déjà quelque chose de similaire en injectant le contenu de la page statique, il suffit de reproduire cette méthode

            # Inclusion du fichier
            ob_start();
            require $file;
            $output = ob_get_clean();
            eval($this-›plxMotor-›plxPlugins-›callHook('plxShowStaticContent'));
            echo $output;

L'injection de notre script va se produire juste avant echo $output;, nous devons donc inclure le script dans echo $output;.

Pour simplifier la lecture du code et facilement mettre à jour notre script, nous sauvegardons le script dans un fichier externe, c'est lui que nous allons inclure.

Ce qui donne en copiant le fonctionnement de la fonction staticContent().

‹?php  if(!defined('PLX_ROOT')) exit;
class MonPlugin extends plxPlugin {

    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
    $this-›addHook('plxShowStaticContent', 'plxShowStaticContent');
    }

	# methode qui modifie la fonction $plxShow-›staticContent())
    public function plxShowStaticContent() {
		# insertion des commentaires et formulaire
		echo '‹?php';
		?›
		ob_start();
		include( PLX_PLUGINS.'MonPlugin/include.commentaire.php');
		$output .= ob_get_clean();
		‹?php
		echo'?›';

    }
}

Il suffit maintenant de créer un troisième fichier vide , appeler include.commentaire.php et de coller à l'intérieur le script commentaires dans une page statique. enregistrer ce fichier dans le répertoire de votre nouveau plugin.

Il ne reste plus qu'a activé le plugin pour voir toutes vos pages statiques dotées d'un module de commentaires.

C'est pas si compliqué!

PluXml à tout prévu pour laisser à chacun la possibilité de modifier son fonctionnement en l’agrémentant de diverses fonctionnalités sans avoir à toucher au cœur même de PluXml.

Nous venons juste de voir l'injection d'un seul script, mais l'on peut faire beaucoup plus.

Code disponible sur github @ https://github.com/gcyrillus/MonPlugin.

Table des matieres

Paginer le contenu d'une page statique

Parfois nos pages statiques peuvent nécessiter de voir leur contenu découper en plusieurs pages pour en faciliter la lecture.

Pour ce faire, il faut distribuer dans un tableau, chacun de ces morceaux afin de les trier et générer la pagination adéquate .

Prérequis: un minimum de familiarité avec la syntaxe PHP pour insérer les contenus dans le code.

Le code à mettre en œuvre est relativement simple et court.

Ici, la difficulté pour les plus grand débutants, sera d'insérer les contenus sans casser ce script. Rassurez-vous, le code est commenté pour vous indiquer l'écueil à éviter et comment l'éviter ... si vous lisez les commentaires.

La pagination s'affiche dans la langue configurée, l'affichage des liens "précédent/suivant" peuvent-être ponctués par un lien vers chaque page individuellement en passant la valeur false à true de $intermediaire .

ce qui vous donne ce type d'affichage selon la valeur de $intermediaire : visuel barre de pagination

Voici ce code à copier/coller depuis l'administration de PluXml dans votre page statique. , avec un exemple de contenu (9 morceaux).

‹style›:where(.page-item.page-link.active) { text-decoration:underline;font-weight:bold; padding:0.3em 2em;}.pagination.text-center.center.bordered{border-radius: 5px;width:max-content;  margin:auto;  border:solid 1px;display:flex;align-items: center;list-style:none;gap:0.5em}‹/style›‹?php
# $this is $plxShow
	#########################################
	#configuration
	#########################################
	# nombre de bloc à afficher par page
	$bypage = 1;

	$intermediaire = false; //mettre true au lieu de false pour afficher les liens de chaque page
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	# extraction de l'url
	$url = 'static'.$this-›staticId().'/'.$this-›plxMotor-›aStats[$this-›plxMotor-›cible]['url'];

	# generation du lien
	$link = $this-›plxMotor-›urlRewrite($url."/?page");

	# extraction du numéro de page dans l'URL
	$currentPage = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($currentPage - 1) * $bypage;

	#################################################
	# stockage des blocs de contenus dans un tableau
	# tableau defini dans array(). chaque bloc stocké
	# entre deux apostrophe '
	# separé par une virgule ,
	# si un bloc contient une apostrophe '
	# celle-ci doit-être préceder d'un \
	# depuis l'administration de PluXml,
	# Il faut doubler ce signe en \
	# exemple: l\'exemple. C\'est obligatoire.
	#################################################

$blocks = array(
'‹div› A - un div dans la boucle‹/div›',
'‹div› B - un div dans la boucle‹/div›',
'‹div› C - un div dans la boucle‹/div›',
'‹div› D - un div dans la boucle‹/div›',
'‹div› E - un div dans la boucle‹/div›',
'‹div› F - un div dans la boucle‹/div›',
'‹div› G - un div dans la boucle‹/div›',
'‹div› H - un div dans la boucle‹/div›',
'‹div› I - un div dans la boucle, c\'est le dernier‹/div›'
)
;

// Calcul du 1er article de la page
$premier = ($currentPage * $bypage) - $bypage;

// On calcule le nombre de pages total
$nbr = count($blocks);
$pages = ceil( $nbr / $bypage);

$blocks = array_slice($blocks, $premier, $bypage);
?›
‹!-- affichage des blocs selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	foreach ($blocks as $key) {

 echo $key;
	}
?›
‹/div›
‹!-- fin affichage des blocs --›

‹!-- Affichage de la pagination --›
‹?php
	############################
	# Affichage de la pagination
	############################
?›
‹nav›
	‹ul class="pagination text-center center bordered"›
		‹!-- Lien vers la page précédente (si on ne se trouve pas sur la 1ère page) --›
		‹?= ($currentPage › 1)  ? "‹li class=\"page-item\" ›‹a href=\"".$link . ($currentPage - 1) ."\" class=\"page-link\"›".L_PAGINATION_PREVIOUS."‹/a›‹/li›" : "" ?›

		‹?php if($intermediaire == true)  {
		for($page = 1; $page ‹= $pages; $page++) {
		  # Lien vers chacune des pages (activé si on se trouve sur la page correspondante
		  echo '‹li class="page-item ';
		  if($currentPage == $page)  echo 'active';
		  echo "\"›‹a href=\"".$link.$page ."\" class=\"page-link\"›".$page."‹/a›‹/li›";
			}
		}
		else {
		 echo "‹li class=\"page-item page-link  active \"›
				".$currentPage." / ". $nbr."
			‹/li›";

		}	?›
		  ‹!-- Lien vers la page suivante (si on ne se trouve pas sur la dernière page) --›
		 ‹?= ($currentPage ‹ $pages) ? " ‹li class=\"page-item\"›‹a href=\"".$link.($currentPage + 1 )."\" class=\"page-link\"›".L_PAGINATION_NEXT."‹/a›‹/li›" : "" ?›

	‹/ul›
‹/nav›

Table des matieres

Utiliser la fonction pagination() dans une page statique.

Dans nos pages: d'accueil, catégorie, mots clés, archives, ... il y a une fonction de pagination qui permet de dispatcher l'ensemble des articles correspondant sur une ou plusieurs pages aux besoins.

Cet article vous propose de voir comment intégrer cette fonction dans une page statique en extrayant les articles d'une catégorie et en choisissant le nombre à afficher par pages.

Mais pour quel usage, car PluXml le fait déjà , non ?

Pluxml permet de masquer à l'affichage les liens vers une ou plusieurs catégories, vous pouvez donc cacher une catégorie des menus et la présenter au travers d'une page statique en reconfigurant l'affichage à votre guise.

Pour cela il nous faut déclarer quelques variables pour ensuite filtrer et boucler sur les articles à afficher.

Pour faire concis, voici le code de base à utiliser avec quelques commentaires pour vous aider à suivre la logique du script.

‹?php
# $this is $plxShow
	#########################################
	#configuration : categorie(s) et nb/page
	#########################################
	# nombre d'article à afficher par page
	$bypage = 6;
	# choix de la categorie
	$catId = '001';
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	#mode de tri
	$tri = $this-›plxMotor-›aCats[$catId]['tri'];

	# filtrage article par catégorie(s)
	$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$catId.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

	# extraction du numéro de page dans l'URL
	$page = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($page - 1) * $bypage;

	# var publi
	$publi = 'before';

	#clone du tableau des articles
	$plxGlob_arts = clone $this-›plxMotor-›plxGlob_arts;

	# filtrage du tableau cloné
	$aFiles =  $plxGlob_arts-›query($motif, 'art', $tri, $start, $bypage, $publi);

	# extraction/maj variables
	$this-›plxMotor-›motif = $motif;
	$this-›plxMotor-›bypage = $bypage;
	$this-›plxMotor-›page = $page;

	# On boucle sur les articles filtrés
	$artsList = [];
	foreach($aFiles as $v){
			$art = $this-›plxMotor-›parseArticle(PLX_ROOT . $this-›plxMotor-›aConf['racine_articles'] . $v);
			if(!empty($art)) {
					$artsList[] = $art;
			}
	}

	#maj du tableau des données des articles filtrés
	$this-›plxMotor-›plxRecord_arts = new plxRecord($artsList);
?›
‹!-- affichage du ou des articles selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	while($this-›plxMotor-›plxRecord_arts-›loop()) {
?›
	‹article›
		‹h2›
				‹?php $this-›artTitle(); ?›
		‹/h2›
				‹?php $this-›artThumbnail(); ?›
		‹div›
				‹?php $this-›artChapo(); ?›
		‹/div›
	‹/article›
‹?php
	}
?›
‹/div›
‹!-- fin block affichage article

‹!-- Affichage de la pagination --›
    ‹nav  class="pagination text-center"›
‹?php
	############################
	# Affichage de la pagination
	############################
	$this-›pagination();
?›
    ‹/nav›‹!-- fin block affichage pagination--›

Vous pouvez donc configurer la catégorie à filtrer et le nombre d'article par page

L'affichage des articles se fait dans la boucle, vous pouvez aussi choisir les données des articles à afficher ainsi que la structure HTML de façon à ce qu'elle reflète celle de votre thème.

Table des matieres

Mes plugins pour PluXml sur github

J'ai récemment passé tous les sources des plugins pour PluXml que je développe et maintiens sur la plateforme github. C'est certainement la meilleure solution pour partager et permettre à chacun de participer ou suivre leur développement.

Vous pouvez utiliser le bug tracker de github pour signaler les problèmes rencontrés ou faire des demandes d'évolutions. Cela vous permettra d'avoir un meilleur retour, et de mon coté je pourrais mieux suivre les différentes tâches à réaliser pour répondre à vos besoins.

Retrouvez donc tous les dépots git de mes plugins pour PluXml à l'adresse suivante:

https://github.com/Pluxopolis

N'hésitez pas également à vous rendre sur le forum de PluXml.
La communauté est très présente et active et répondra à toutes vos questions.
C'est aussi une mine d'informations sur PluXml.

Table des matieres

Problème de formulaires avec max_input_vars (PHP 5.3.9+)

Depuis la version de PHP 5.3.9 une nouvelle directive dans le fichier php.ini limite le nombre de champs de saisie traité après la soumission d'un formulaire. Cette directive s'appelle max_input_vars. Par défaut seuls les 1000 champs sont traités, les suivants sont tout simplement ignorés. Elle affecte les variables $_GET, $_POST et $_COOKIE.

Concrètement cela veut dire que si vous avez un grand formulaire qui contient plus de 1000 champs (champ texte, checkbox, hidden, etc...), lorsque vous allez traiter les variables $_POST après la soumission du formulaire, seuls les 1000 premières variables $_POST seront accessibles, les autres ne seront pas présentes dans le tableau $_POST.

Voilà donc une restriction, qui pour des raisons de sécurité est justifée afin d'éviter des attaques par déni de service, mais qui sera vite un gros problème si vous avez à traiter des gros formulaires.

Il y a trois solutions pour passer outre cette restriction.

Solution 1
Si vous avez accès au fichier php.ini sur votre serveur, éditez le et recherchez le paramètre max_input_vars. Changez sa valeur 1000 par une plus grande en fonction de vos besoins, pour avoir par exemple:

max_input_vars = 3000

Solution 2
Si vous n'avez pas accès au php.ini, il reste la solution du fichier .htaccess.
A la racine de votre site éditez ou créez un fichier .htaccess dans lequel vous mettrez sur la 1ère ligne l'instruction suivante:

php_value max_input_vars 3000

Solution 3
Dernière solution: utiliser l'instruction init_set dans un fichier php pour modifier la valeur du paramètre max_input_vars de cette façon:

ini_set('max_input_vars', 3000);

Documentation

Table des matieres

Utiliser la fonction pagination() dans une page statique.

Dans nos pages: d'accueil, catégorie, mots clés, archives, ... il y a une fonction de pagination qui permet de dispatcher l'ensemble des articles correspondant sur une ou plusieurs pages aux besoins.

Cet article vous propose de voir comment intégrer cette fonction dans une page statique en extrayant les articles d'une catégorie et en choisissant le nombre à afficher par pages.

Mais pour quel usage, car PluXml le fait déjà , non ?

Pluxml permet de masquer à l'affichage les liens vers une ou plusieurs catégories, vous pouvez donc cacher une catégorie des menus et la présenter au travers d'une page statique en reconfigurant l'affichage à votre guise.

Pour cela il nous faut déclarer quelques variables pour ensuite filtrer et boucler sur les articles à afficher.

Pour faire concis, voici le code de base à utiliser avec quelques commentaires pour vous aider à suivre la logique du script.

‹?php
# $this is $plxShow
	#########################################
	#configuration : categorie(s) et nb/page
	#########################################
	# nombre d'article à afficher par page
	$bypage = 6;
	# choix de la categorie
	$catId = '001';
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	#mode de tri
	$tri = $this-›plxMotor-›aCats[$catId]['tri'];

	# filtrage article par catégorie(s)
	$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$catId.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

	# extraction du numéro de page dans l'URL
	$page = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($page - 1) * $bypage;

	# var publi
	$publi = 'before';

	#clone du tableau des articles
	$plxGlob_arts = clone $this-›plxMotor-›plxGlob_arts;

	# filtrage du tableau cloné
	$aFiles =  $plxGlob_arts-›query($motif, 'art', $tri, $start, $bypage, $publi);

	# extraction/maj variables
	$this-›plxMotor-›motif = $motif;
	$this-›plxMotor-›bypage = $bypage;
	$this-›plxMotor-›page = $page;

	# On boucle sur les articles filtrés
	$artsList = [];
	foreach($aFiles as $v){
			$art = $this-›plxMotor-›parseArticle(PLX_ROOT . $this-›plxMotor-›aConf['racine_articles'] . $v);
			if(!empty($art)) {
					$artsList[] = $art;
			}
	}

	#maj du tableau des données des articles filtrés
	$this-›plxMotor-›plxRecord_arts = new plxRecord($artsList);
?›
‹!-- affichage du ou des articles selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	while($this-›plxMotor-›plxRecord_arts-›loop()) {
?›
	‹article›
		‹h2›
				‹?php $this-›artTitle(); ?›
		‹/h2›
				‹?php $this-›artThumbnail(); ?›
		‹div›
				‹?php $this-›artChapo(); ?›
		‹/div›
	‹/article›
‹?php
	}
?›
‹/div›
‹!-- fin block affichage article

‹!-- Affichage de la pagination --›
    ‹nav  class="pagination text-center"›
‹?php
	############################
	# Affichage de la pagination
	############################
	$this-›pagination();
?›
    ‹/nav›‹!-- fin block affichage pagination--›

Vous pouvez donc configurer la catégorie à filtrer et le nombre d'article par page

L'affichage des articles se fait dans la boucle, vous pouvez aussi choisir les données des articles à afficher ainsi que la structure HTML de façon à ce qu'elle reflète celle de votre thème.

Table des matieres

Choisir des thèmes ou apprendre à les mettre à jour

Tous les amis de Pluxml savent que les versions de ce CMS montent plus vite que les mises à jours des plugins et des thèmes existants ce qui peut être galère pour les débutants qui découvrent notre sympathique gestionnaire de sites.

Mais l'un d'entre-nous a enfin eu l'idée de mettre en ligne une sélection de thèmes (templates) mis à jour pour la dernière version PluXml 5.8.9 mais surtout d'écrire des tutoriels pour apprendre à ses visiteurs de le faire eux-même. :)

Son site, https://pluxthemes.com est à visiter absolument et comme ça, si vous voulez mettre rapidement en ligne un site propulsé par Pluxml, il ne vous faudra que quelques minutes pour choisir le template qui vous va bien et/ou apprendre les bases de la création et mise à jour des thèmes. Ce n'est pas si difficile que cela. ;)

De plus, le gars est plein d'humour et ses textes se lisent avec délectation.

gcyrillus-nomade, c'est le nom avec lequel il signe sur les forums, bien qu'il fasse en privé le modeste, est doué pour pas mal de choses et, sur cet espace depuis si longtemps, est bénévolement à l'origine que beaucoup de matériels que nous utilisons tous les jours pour la création et construction de nos sites.

Il connaît tout de Pluxml.

Quand vous aurez l'occasion de communiquer avec lui, dites-lui "Bonjour" de ma part. ;)

https://pluxthemes.com

Table des matieres

Un centre de ressources pour PluXml

Pluxopolis vient de mettre en ligne un centre de ressources et de téléchargements pour PluXml.

Plugins, thèmes, scripts utiles et inutiles utilisables pour n'importe quel site internet, lien vers la documentation officielle, adresses vers des dépôts de plugins/thèmes des utilisateurs les plus investis dans le dévelopement de notre CMS préféré, vous trouverez votre bonheur.

https://ressources.pluxopolis.net

Table des matieres

Gestionnaire de thème de PluXml

Depuis la version 5.5, un gestionnaire de thème est disponible dans PluXml à partir du menu Paramètres › Thèmes

Les thèmes disponibles sont visibles sous forme de liste avec une image de prévisualisation et différentes informations (auteur, n° de version, etc...). On peut donc choisir et activer le thème à utiliser coté visiteur. Le thème activé est toujours le premier de la liste.

Pour les développeurs, voici les consignes à respecter pour l'image de prévisualisation et comment renseigner le fichier infos.xml qui contient les informations sur le thème.

Tout d'abord l'image de prévisualisation est une image jpg, png ou gif, de préférence de taille 200x200 pixels. Elle est à copier à la racine du dossier du thème sous le nom preview.png, preview.jpg ou preview.gif en fonction de son format et de l'extension du fichier.

Concernant les informations, elles sont à mettre dans un fichier infos.xml, lui aussi à copier à la racine du dossier du thème.
Voilà la structure du fichier à respecter:

‹?xml version="1.0" encoding="UTF-8"?›
‹document›
	‹title›‹![CDATA[defaut]]›‹/title›
	‹author›‹![CDATA[PluXml]]›‹/author›
	‹version›5.5‹/version›
	‹date›09/11/2015‹/date›
	‹site›http://www.pluxml.org‹/site›
	‹description›‹![CDATA[Thème par défaut de PluXml 5.5]]›‹/description›
‹/document›

Les balises suivantes sont à renseigner:

title: titre du thème

author: nom de l'auteur du thème

version: numéro de version du thème

date: date de sortie du thème

site: site de l'auteur du thème

description: texte descriptif sur le thème

Exemple de fichier vièrge à compléter:

‹?xml version="1.0" encoding="UTF-8"?›
‹document›
	‹title›‹![CDATA[]]›‹/title›
	‹author›‹![CDATA[]]›‹/author›
	‹version›‹/version›
	‹date›‹/date›
	‹site›‹/site›
	‹description›‹![CDATA[]]›‹/description›
‹/document›

En respectant ces consignes, le thème développé sera correctement listé dans le gestionnaire

Table des matieres

Inclure une page statique à partir de son titre ou de son url

Depuis la version 5.4 de PluXml, il est possible d'afficher le contenu d'une page statique à partir de son titre ou de son url.

Rappel de l'utilisation de la fonction staticInclude() permettant d'afficher une page statique à partir de son identifiant mais aussi maintenant comment l'utiliser à partir de son titre ou de son url.

Pour ceux qui connaisse la fonction staticInclude(), vous savez déjà qu'il est possible d'afficher le contenu d'une page statique un peu n'importe où sur son site. Il suffit de passer en paramètre de cette fonction le numéro d'identification de la page, numéro à récupérer dans la colonne Identifiant page dans la gestion des pages statiques de l'administration.

Exemple 1: à partir du numéro d'identification sur 3 chiffres

‹?php $plxShow-›staticInclude('001') ?›

Exemple 2: sans les zéros significatifs (en tapant la valeur '1', PluXml sait qu'il s'agit de la page '001')

‹?php $plxShow-›staticInclude('1') ?›

Depuis la version 5.4 de PluXml, il est également possible d'afficher le contenu d'une page statique, toujours avec la fonction staticInclude(), mais à partir de son titre ou de son url.

Exemple 3: à partir du titre de la page

‹?php $plxShow-›staticInclude('Titre de la page') ?›

Le titre de la page est bien sur ce que vous avez saisi dans la colonne Titre lors de la création de la page.

Exemple 4 : à partir de l'url de la page

‹?php $plxShow-›staticInclude('titre-de-la-page') ?›

L'url est déduite à partir du titre de la page, mais il est possible d'avoir un titre qui ne correspond à l'url, ou inversement, car ces deux informations sont éditables dans la gestion des pages statiques. Les champs Titre et Url sont des zones de saisie libre.

Les lignes de codes données ci-dessus peuvent être utilisées dans les fichiers .php de votre thème, à l'endroit où vous souhaitez inclure et afficher le contenu d'une page statique.

Table des matieres

CKEditor: comment changer la langue du correcteur orthographique

La manipulation pour changer la langue à utiliser dans le correcteur d'orthographe intégré de CKEditor est simple et rapide:
Cliquez sur l'icone ABC puis sélectionner le menu Langues

Dans l'onglet Langues, sélectionner la langue à utiliser

Table des matieres

Comment rajouter des addons à l'éditeur CKEditor pour PluXml

L'éditeur de texte CKEditor possède de nombreux addons qui peuvent être téléchargés à partir de cette page: Addons pour CKEditor

Voici comment installer un addon dans le plugin pour PluXml.

téléchargez l'addon à installer

décompressez et copier les fichiers dans le dossier de PluXml: /plugins/ckeditor/ckeditor/plugins

à partir de la zone d'administration de PluXml, allez dans Paramètres › Plugins › Plugins actifs

sur la ligne du plugin CKEditor, cliquez sur le lien Configuration

rajoutez dans la zone extraPlugins, la valeur du paramètre extraPlugins servant à activer l'utilisation de l'addon. Cette valeur est définie par le concepteur et peut généralement être connue sur la page de téléchargement de l'addon.

Vous pouvez ajouter plusieurs valeurs en les séparant par des virgules.
Exemple:

PluCSS

Table des matieres

Thème Navan pour PluXml 5.4+

Thème Navan réalisé avec PluCSS

Démonstration
Téléchargement

Table des matieres

Astuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)

Cette astuce a été publiée sur le forum de PluXml par David Revoy. Parce qu'elle est très facile à mettre en place et peut être très utile pour les concepteurs de thème, j'ai trouvé dommage qu'elle reste noyée dans tous les sujets du forum.

Pour rappel, PluCSS est un framework css développé par l'équipe de PluXml qui gère le responsive design, c'est à dire que l'affichage s'adapte en fonction de la taille de l'écran (ordinateur, tablette, smartphone). Suivant donc la taille de l'écran, PluCSS utilise différentes balises reconnaissables par des préfixes sml (small),med (medium), lrg (large) afin d'adapter l'affichage en fonction de la résolution.

Exemple:

Déclarations dans le fichier plucss.css

.sml-text-center {
	text-align: center;
}

@media (min-width: 768px) {
	.med-text-left {
		text-align: left;
	}
}

Déclarations dans le fichier header.php

‹header class="header sml-text-center med-text-left" role="banner"›
	‹h1 class="no-margin"›mainTitle('link'); ?›‹/h1›
	‹h2 class="h5 no-margin"›subTitle(); ?›‹/h2›
‹/header›

De cette façon simplement en utilisant sml-text-center et med-text-left comme ci-dessus, l'affichage sera centré sur un petit écran, mais justifié à gauche sur un affichage moyen (et large par défaut).

L'astuce proposée consiste à afficher en bas à droite du navigateur le mode d'affichage courant avec le texte SML, MED ou LRG. Pour sa mise en place, éditez par exemple le fichier sidebar.php de votre thème et copier-coller le code suivant, de préférence en bas du fichier.

NB: si vous utilisez le thème par défaut collez le code avant la balise ‹/aside›

‹div ›
	‹div class="sml-show med-hide lrg-hide"› SML ‹/div›
	‹div class="sml-hide med-show lrg-hide"› MED ‹/div›
	‹div class="sml-hide med-hide lrg-show"› LRG ‹/div›
‹/div›

Accédez à la page d'accueil de votre site. En redimensionnant la fenêtre de votre navigateur, le mode d'affichage utilisé sera affiché sur fond jaune en bas à droite.

Mode LRG:

Mode MED:

Mode SML:

Toute la documentation de PluCSS est disponible à cette adresse: http://plucss.pluxml.org/

Merci à David pour cette astuce. Je vous invite à visiter son site pour admirer son travail de dessinateur et d'illustrateur.
http://www.davidrevoy.com/

Thème

Table des matieres

Connaître le mode d'affichage de PluXml

Pour connaitre le mode d'affichage de Pluml:

‹?php echo $plxShow-›mode(); ?›

Cela n'a d’intérêt que lorsque vous souhaitez afficher ou appeler un script seulement sur un certain type de pages et, ou a des fin de débogages.

Quels sont ces modes?

home

article

static

categorie

tags

archives

erreur

Vous pouvez filtré ces modes, types de pages pour y afficher ou non un contenu supplémentaire

Par exemple, affiché une boite uniquement sur la page d'accueil:

‹?php
 if ($plxShow-›mode() =='home') { ?›
      ‹div class="boiteHome"›
           ‹p›Bienvenue sur mon site PluXml!‹/p›
      ‹/div›
‹?php }?›

Cela peut-être aussi pour embarquer un plugin seulement sur une page spécifique

Exemple: Affichons le formulaire de recherche dans la sidebar uniquement pour la page d’erreur.

‹?php
 if ($plxShow-›mode() =='erreur') { ?›
‹div class="sidebox"›
        ‹h3› Rechercher ‹/h3›
        ‹?php eval($plxShow-›callHook('MySearchForm')) ?›
‹/div›
‹?php }?›

Insérer ce code dans le fichier sidebar.php . le formulaire s'affichera seulement si c'est une page d'erreur

Vous pouvez donc selon le type de page ajouter automatiquement des contenus spécifiques, insérer un plugin, chargé un script, une feuille de style... à partir de l'un des fichiers communs de votre thème sans toucher au coeur de PluXml ou créer un plugin.

Table des matieres

Les données structurées

Qu'est ce que c'est?

Les données structurées sont des données organisées et stockées dans un format spécifique qui leur permet d'être facilement consultées, modifiées et analysées à l'aide d'outils informatiques.

Les données structurées sont organisées de manière à ce que les machines, y compris les moteurs de recherche, puissent facilement comprendre et extraire les informations qu'elles contiennent. Elles sont souvent présentées sous la forme de balises et de métadonnées qui décrivent le contenu d'une page Web. Les moteurs de recherche utilisent ces balises et ces métadonnées pour mieux comprendre le contenu des pages et les afficher plus efficacement dans les résultats de recherche.

Peut-on les intégrées a PluXml ?

Elles le sont déjà en parties si vous remplissez touts les champs d’édition de vos catégories, pages statiques et articles

Ce sont les champs meta (description et keywords) , title et alt pour vos images, entre autres.

Le format JSON-LD (JavaScript Object Notation for Linked Data) est l'un des formats de données structurées les plus populaires et les plus largement utilisés pour les pages Web. De simple script dans vos thèmes peuvent les générées pour vous

Le format JSON-LD

Ce format JSON-LD permet de décrire le contenu d'une page Web de manière claire et précise en utilisant des balises spéciales appelées "contextes" pour indiquer la signification des données. Les données structurées JSON-LD sont également compatibles avec les directives de Google pour les données structurées, ce qui en fait un choix judicieux pour les propriétaires de sites Web souhaitant optimiser leur référencement.

Comment les intégrées à PluXml

Elles peuvent être injecté dans vos pages par le biais des fichiers de votre thème de la même maniére que les titres et contenus de vos pages sont affichés.

De simples scripts se permettront alors d'extraire ces données de PluXml et de les formatées dans le format JSON-LD.

Quelles types de données structurées puis-je injecter dans mon thème?

Le nom de la page, l'image d'accroche, le nom de l'auteur, la hiérarchie de la page avec le fil d’Ariane, un moteur de recherche interne, etc.

Les scripts déjà disponibles

votre site

Ces données servent à presenter votre site, son type de contenu et et eventuellement l'associé à vos outils de réseaux sociaux

Voici le script à mettre dans le fichier header.php de votre thème.

‹script type="application/ld+json"›{
	"@context": "http://schema.org",
	"@type": "WebSite",
	"name": "‹?php $plxShow-›mainTitle(); ?›",
	"url": "‹?php echo $plxShow-›plxMotor-›racine; ?›",
	/*"sameAs": ["https://facebook.com/page", "https://plus.google.com/site", "https://twitter.com/name"],*/
	‹?php if(isset($plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']) && $plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']-›getParam('method') == 'get' && $plxShow-›plxMotor-›aConf['urlrewriting'])  {	?›
"potentialAction": {
			"@type": "SearchAction",
			"target": "‹?php echo $plxShow-›plxMotor-›racine .$plxShow-›plxMotor-›plxPlugins-›aPlugins['plxMySearch']-›getParam('url').'?searchfield={searchfield}' ; ?›",
			"query-input": "required name=searchfield"
	}
‹?php } ?›
}‹/script›

L'association à vos réseaux sociaux ou autres site se trouve sur la ligne sameAs. Pour en faire usage, il faut la dé-commenter (retirer les /* et */ entourant cette ligne et y inserer vos liens en place de ceux en exemple.

Si vous avez installer le plugin de moteur de recherche et que celui-ci est configuré avec la méthode get, il sera alors aussi affiché dans vos métadonnées.

données articles

Voici le code qui va extraire les données principales de vos articles.

‹script type="application/ld+json"›
{
    "@context": "https://schema.org",
    "@type": "Article",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "‹?php echo $plxShow-›plxMotor-›plxRecord_arts-›f('url'); ?›"
    },
    "headline": "‹?php $plxShow-›artTitle(); ?›",
    ‹?php if (trim($plxShow-›plxMotor-›plxRecord_arts-›f('thumbnail'))): ?›
    "image": "‹?php echo $plxShow-›plxMotor-›urlRewrite(trim($plxShow-›plxMotor-›plxRecord_arts-›f('thumbnail'))); ?›",
    ‹?php endif; ?›
    "datePublished": "‹?php $plxShow-›artDate('#num_year(4)-#num_month-#num_dayT#hour:#minute:00+#time'); ?›",
    "dateModified": "‹?php  echo plxDate::formatDate($plxShow-›plxMotor-›plxRecord_arts-›f('date_update'), '#num_year(4)-#num_month-#num_dayT#hour:#minute:00+#time') ?›",
    "author": {
        "@type": "Person",
        "name": "‹?php $plxShow-›artAuthor() ?›"
    }
    ‹?php if (trim($plxShow-›plxMotor-›plxRecord_arts-›f('tags'))): ?›
    ,"keywords":"‹?php $plxShow-›artTags('#tag_name ') ?›"
    ‹?php endif; ?›
}
‹/script›

Il est à insérer dans les fichiers suivant de votre thème (et tout ceux ceux dont le nom commence avec le même mot):

article.php

home.php

categorie.php

tags.php

archives.php

Ce script est à insérer dans la boucle listant vos articles .

Ariane : catégorie

Le fil d'ariane sera spécifique à chaque type de page, celui des catégories dans le fichier categorie.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php $plxShow-›catName(); ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ariane : mots clés

pour les pages des mots clés, voici le script à insérer dans le fichier tags.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php $plxShow-›tagName(); ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ariane :archives

pour les pages des archives, voici le script à insérer dans le fichier archives.php

‹script type="application/ld+json"›
	{
		"@context": "https://schema.org",
		"@type": "BreadcrumbList",
		"itemListElement": [{
		"@type": "ListItem",
		"position": 1,
		"name": "‹?php $plxShow-›lang('HOME'); ?›",
		"item": "‹?php $plxShow-›racine() ?›"
		},{
		"@type": "ListItem",
		"position": 2 ,
		"name": "‹?php echo plxDate::formatDate($plxShow-›plxMotor-›cible, $plxShow-›lang('ARCHIVES').' #month #num_year(4)') ?›",
		"item": "‹?php $plxShow-›racine() ?›‹?php echo $_SERVER['REQUEST_URI']; ?›"
		}
		]
	}
‹/script›

Ces scripts sont des bases et peuvent-être complétés et améliorés pour correspondre au mieux aux specifités et contenus de votre site: un blog, un site de recette, un site sur l'immobilier, un site proposant du son ou de la vidéo, les avis d'internaute, les evenements à venir, des lieux, etc.

Vous trouverez des exemples à jsonld.com/ pour différents types de contenus .

Cependant, il est important de noter que le format JSON-LD n'est pas le seul format de données structurées disponible. D'autres formats tels que Microdata et RDFa peuvent également être utilisés pour structurer les données d'une page Web.

Le choix du format de données structurées dépend des besoins spécifiques du site Web et des préférences du propriétaire du site. Il est également important de noter que l'utilisation de données structurées ne garantit pas une meilleure visibilité dans les résultats de recherche, mais peut aider les moteurs de recherche à mieux comprendre le contenu de la page et à l'afficher de manière plus pertinente dans les résultats de recherche.

Table des matieres

Utiliser la fonction pagination() dans une page statique.

Dans nos pages: d'accueil, catégorie, mots clés, archives, ... il y a une fonction de pagination qui permet de dispatcher l'ensemble des articles correspondant sur une ou plusieurs pages aux besoins.

Cet article vous propose de voir comment intégrer cette fonction dans une page statique en extrayant les articles d'une catégorie et en choisissant le nombre à afficher par pages.

Mais pour quel usage, car PluXml le fait déjà , non ?

Pluxml permet de masquer à l'affichage les liens vers une ou plusieurs catégories, vous pouvez donc cacher une catégorie des menus et la présenter au travers d'une page statique en reconfigurant l'affichage à votre guise.

Pour cela il nous faut déclarer quelques variables pour ensuite filtrer et boucler sur les articles à afficher.

Pour faire concis, voici le code de base à utiliser avec quelques commentaires pour vous aider à suivre la logique du script.

‹?php
# $this is $plxShow
	#########################################
	#configuration : categorie(s) et nb/page
	#########################################
	# nombre d'article à afficher par page
	$bypage = 6;
	# choix de la categorie
	$catId = '001';
	#########################################
	# FIN configuration
	#########################################

	#############################
	# extraction et maj variables
	#############################

	#mode de tri
	$tri = $this-›plxMotor-›aCats[$catId]['tri'];

	# filtrage article par catégorie(s)
	$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$catId.')(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';

	# extraction du numéro de page dans l'URL
	$page = preg_match('#\bpage(\d*)#',$_SERVER['REQUEST_URI'], $capture) ? intval($capture[1]) : 1;

	# indice de début, premier article à afficher
	$start = ($page - 1) * $bypage;

	# var publi
	$publi = 'before';

	#clone du tableau des articles
	$plxGlob_arts = clone $this-›plxMotor-›plxGlob_arts;

	# filtrage du tableau cloné
	$aFiles =  $plxGlob_arts-›query($motif, 'art', $tri, $start, $bypage, $publi);

	# extraction/maj variables
	$this-›plxMotor-›motif = $motif;
	$this-›plxMotor-›bypage = $bypage;
	$this-›plxMotor-›page = $page;

	# On boucle sur les articles filtrés
	$artsList = [];
	foreach($aFiles as $v){
			$art = $this-›plxMotor-›parseArticle(PLX_ROOT . $this-›plxMotor-›aConf['racine_articles'] . $v);
			if(!empty($art)) {
					$artsList[] = $art;
			}
	}

	#maj du tableau des données des articles filtrés
	$this-›plxMotor-›plxRecord_arts = new plxRecord($artsList);
?›
‹!-- affichage du ou des articles selon le nombre à afficher par pages dans la variable $bypage --›
‹div class="my_articles"›
‹?php
	# boucle pour l'affichage
	while($this-›plxMotor-›plxRecord_arts-›loop()) {
?›
	‹article›
		‹h2›
				‹?php $this-›artTitle(); ?›
		‹/h2›
				‹?php $this-›artThumbnail(); ?›
		‹div›
				‹?php $this-›artChapo(); ?›
		‹/div›
	‹/article›
‹?php
	}
?›
‹/div›
‹!-- fin block affichage article

‹!-- Affichage de la pagination --›
    ‹nav  class="pagination text-center"›
‹?php
	############################
	# Affichage de la pagination
	############################
	$this-›pagination();
?›
    ‹/nav›‹!-- fin block affichage pagination--›

Vous pouvez donc configurer la catégorie à filtrer et le nombre d'article par page

L'affichage des articles se fait dans la boucle, vous pouvez aussi choisir les données des articles à afficher ainsi que la structure HTML de façon à ce qu'elle reflète celle de votre thème.

Table des matieres

Choisir des thèmes ou apprendre à les mettre à jour

Tous les amis de Pluxml savent que les versions de ce CMS montent plus vite que les mises à jours des plugins et des thèmes existants ce qui peut être galère pour les débutants qui découvrent notre sympathique gestionnaire de sites.

Mais l'un d'entre-nous a enfin eu l'idée de mettre en ligne une sélection de thèmes (templates) mis à jour pour la dernière version PluXml 5.8.9 mais surtout d'écrire des tutoriels pour apprendre à ses visiteurs de le faire eux-même. :)

Son site, https://pluxthemes.com est à visiter absolument et comme ça, si vous voulez mettre rapidement en ligne un site propulsé par Pluxml, il ne vous faudra que quelques minutes pour choisir le template qui vous va bien et/ou apprendre les bases de la création et mise à jour des thèmes. Ce n'est pas si difficile que cela. ;)

De plus, le gars est plein d'humour et ses textes se lisent avec délectation.

gcyrillus-nomade, c'est le nom avec lequel il signe sur les forums, bien qu'il fasse en privé le modeste, est doué pour pas mal de choses et, sur cet espace depuis si longtemps, est bénévolement à l'origine que beaucoup de matériels que nous utilisons tous les jours pour la création et construction de nos sites.

Il connaît tout de Pluxml.

Quand vous aurez l'occasion de communiquer avec lui, dites-lui "Bonjour" de ma part. ;)

https://pluxthemes.com

Table des matieres

Thème par défaut: installer une bannière sous le logo de PluXml

Nous allons voir comment installer une image en guise de bannière dans le thème par défaut de PluXml 5.6, de manière à remplacer :

par :

Pour rappel, le thème par défaut est dans le dossier: /themes/defaut/

Commençons par copier notre banière banner.jpg, dans le dossier /themes/defaut/img/

J'ai pris une image au format jpg de 640x240. Veillez tout de même à ne pas prendre une image trop lourde. N'hésitez pas à utiliser des services comme https://tinyjpg.com/ pour optimiser le poids de vos images que vous mettez en ligne sur votre site, ceci pour gagner en vitesse d'affichage et en bande passante: pensez à vos visiteurs !

Éditez le fichier /themes/defaut/css/theme.css

Localiser le code suivant:

.header {
	background-color: #1a6699;
	color: #fff;
	padding-bottom: 6rem;
	padding-top: 6rem;
	text-align: center;
}

et remplacer la ligne

background-color: #1a6699;

par

background: url(../img/banner.jpg) top left repeat-x;

Pour afficher une bannière centrée sans qu'elle se répète horizontalement, utilisez à la place le code suivant:

background: url(../img/banner.jpg) top center no-repeat;

Nous remplaçons tout simplement la couleur de fond de l'entête du site par notre image

url : correspond au lien relatif de l'image par rapport au fichier css édité

top left : permet de positionner l'image en haut à gauche de la balise ‹div› identifiée par la classe css .header

repeat-x : permet de répéter l'image sur toute la largeur pour qu'elle occupe horizontalement tout l'écran

Si vous souhaitez masquer le titre du site et sa description, rajoutez à la fin du fichier theme.css

.header h1,
.header h2 {
	display: none;
}

Il est préférable de masquer plutôt que de supprimer le titre du site, pour laisser l'information disponible et accessible aux moteurs de recherche. Dans ce cas là vous pouvez toujours rajouter le titre du site directement sur la bannière en utilisant un logiciel de retouche d'image.

crédit photo: pixabay CC0 Public Domain

Table des matieres

Une barre des menus fixe

Pour remplacer la barre actuelle des menus dans le thème par défaut de PluXml 5.6 et la rendre fixe, éditez le fichier themes/defaut/css/theme.css et remplacer les lignes suivantes:

.nav {
	background-color: #fff;
	height: 4rem;
	text-align: left;
	margin-top: 1rem;
}

par

.nav {
	background-color: #fbfbfb;
	height: 4rem;
	text-align: center;
	padding-top: 0.5rem;
	position: fixed;
	width: 100%;
	z-index: 1;
	border-bottom: 1px #eee solid;
}

La barre sera ainsi fixe en haut de l'écran lors de l'utilistion du scroll vertical à la souris et les menus seront centrés.

Table des matieres

Thème Navan pour PluXml 5.4+

Thème Navan réalisé avec PluCSS

Démonstration
Téléchargement

Liens

Table des matieres

Choisir des thèmes ou apprendre à les mettre à jour

Tous les amis de Pluxml savent que les versions de ce CMS montent plus vite que les mises à jours des plugins et des thèmes existants ce qui peut être galère pour les débutants qui découvrent notre sympathique gestionnaire de sites.

Mais l'un d'entre-nous a enfin eu l'idée de mettre en ligne une sélection de thèmes (templates) mis à jour pour la dernière version PluXml 5.8.9 mais surtout d'écrire des tutoriels pour apprendre à ses visiteurs de le faire eux-même. :)

Son site, https://pluxthemes.com est à visiter absolument et comme ça, si vous voulez mettre rapidement en ligne un site propulsé par Pluxml, il ne vous faudra que quelques minutes pour choisir le template qui vous va bien et/ou apprendre les bases de la création et mise à jour des thèmes. Ce n'est pas si difficile que cela. ;)

De plus, le gars est plein d'humour et ses textes se lisent avec délectation.

gcyrillus-nomade, c'est le nom avec lequel il signe sur les forums, bien qu'il fasse en privé le modeste, est doué pour pas mal de choses et, sur cet espace depuis si longtemps, est bénévolement à l'origine que beaucoup de matériels que nous utilisons tous les jours pour la création et construction de nos sites.

Il connaît tout de Pluxml.

Quand vous aurez l'occasion de communiquer avec lui, dites-lui "Bonjour" de ma part. ;)

https://pluxthemes.com

Plugin

Table des matieres

faire d'un script un plugin

La plupart des plugins n'ajoutent qu'une fonctionnalité ponctuellement utile.

D'autres, intègrent de véritables applications.

Leur point communs?

Pour qu'il soient pleinement fonctionnels ils doivent être greffés aux fonctions natives, ou ajoutés à PluXml.

La créations d'un plugin est souvent chronophage et particulièrement lorsqu'il s'agit d’implémenter un simple script .

Chacun est tenter de modifier à un ou quelques endroits le code de PluXml pour y glisser rapidement cette nouvelle fonctionnalité.

Mais il s’avère que c'est une mauvaise idée. Les versions de PHP qui évoluent en permanence, nécessiteront très souvent une remise à niveau du script , et Les mises à jour de PluXml élimineront toutes les modifications effectuées au sein du code contrairement à un plugin, qui n'aura pas forcément besoin d'une mise à niveau, ni pour les mêmes raisons que PluXml.

le pourquoi d'un plugin

L'installation d'un plugin est de beaucoup, plus perenne, que l'inclusion manuel d'un script., il n' y a pas à en douter

Le plugin ne demande pas à l'utilisateur d'avoir des compétences de développeur ni une expertise sur le code de PluXml. Tout au plus si c'est la première fois, la capacité d'activer un plugin pour ceux gérant leur CMS en autonomie complète...

Si vous avez installer vous même PluXml, l'installation et l'activation d'un plugin est tout aussi simple !.

Reprenons un script en exemple:

Voyons comment integrer le script commentaires dans une page statique en un plugin avec le confort d'une page de configuration.

Cette article est pour démontrer !, qu’une fois le plugin réalisé, l'utilisateur n'aura pas à savoir coder pour ajouter cette fonction à toute les pages statiquestelle ou telle page statique ni pour régler les options d'affichages.

Préparons le dossier de notre projet de plugin.

Pour cela , ils nous faut un nouveau dossier dans le répertoire plugins de PluXml. Nommons ce dossier : MonPlugin.

Dans ce dossier ajoutons deux fichiers vides, l'un nommé MonPlugin.php (même nom que le dossier, c'est obligatoire.) et infos.xml.

Remplissons tout de suite le fichier infos.xml qui décrit votre plugin et l'identifie dans l'administration avec le code suivant:

‹?xml version="1.0" encoding="UTF-8"?›
	‹document›
	‹title›‹![CDATA[mon plugin]]›‹/title›
	‹author›‹![CDATA[G.Cyrille]]›‹/author›
	‹version›1‹/version›
	‹date›01/01/1980‹/date›
	‹site›https://pluxopolis.net‹/site›
	‹description›‹![CDATA[Ajoute aux pages statiques le module commentaires de PluXml.]]›‹/description›
	‹scope›‹/scope›
	‹/document›

Enregistrons et passons à la suite.

le Hook central

Il n'y a qu'un seul script à intégrer et nous pouvons facilement identifier le Hook qui va injecter ce script au bon endroit.

Cet endroit est juste après le contenu de la page, recherchons la fonction qui extrait ce contenu .Nous la trouvons dans le fichier du theme static.php et c'est : $plxShow-›staticContent();.

Regardons maintenant cette fonction dans le fichier core/lib/class.plx.show.php si elle dispose d'un Hook :

   /**
     * Méthode qui inclut le code source de la page statique
     *
     * @scope    static
     * @author    Florent MONTHEL, Stephane F
     **/
    public function staticContent()
    {

        if (eval($this-›plxMotor-›plxPlugins-›callHook("plxShowStaticContentBegin"))) return;

        # On va verifier que la page a inclure est lisible
        if ($this-›plxMotor-›aStats[$this-›plxMotor-›cible]['readable'] == 1) {
            # On genere le nom du fichier a inclure
            $file = PLX_ROOT . $this-›plxMotor-›aConf['racine_statiques'] . $this-›plxMotor-›cible;
            $file .= '.' . $this-›plxMotor-›aStats[$this-›plxMotor-›cible]['url'] . '.php';
            # Inclusion du fichier
            ob_start();
            require $file;
            $output = ob_get_clean();
            eval($this-›plxMotor-›plxPlugins-›callHook('plxShowStaticContent'));
            echo $output;
        } else {
            echo '

' . L_STATICCONTENT_INPROCESS . '

';
        }

    }

Cette fonction dispose de deux entrées ou appels identifiable apr cet syntaxe: eval(/* appel du hook par son nom*/).

Ici, c'est le deuxième qui nous intéresse eval($this-›plxMotor-›plxPlugins-›callHook('plxShowStaticContent'));. C'est à partir du hook plxShowStaticContent que l'on pourra injecter le script dans la page statique.

Note, un listing de tous les hooks disponibles est ici : liste des hooks.

l'assemblage

chaque plugin se construit sur une structure de base identique à laquelle on ajoute les hooks et autres fonctionnalités optionnelles.

Voici le code minimal d'un plugin :

‹?php  if(!defined('PLX_ROOT')) exit;
class monPlugin extends plxPlugin {

    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
}

Nous avons le script et le hook d'entrée, il ne reste qu'a assembler les deux et les ajouter à la base , et toutes nos pages statiques pourront bénéficier d'un module de commentaires.

Declarons le hook et ajoutons la fonction du hook

‹?php  if(!defined('PLX_ROOT')) exit;
class monPlugin extends plxPlugin {

    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
    $this-›addHook('plxShowStaticContent', 'plxShowStaticContent');
    }

	# methode qui modifie la fonction $plxShow-›staticContent())
    public function plxShowStaticContent() {
		# insertion des commentaires et formulaire
		echo '‹?php';
		?›
               // ici le code à injecter et à interpréter dans la fonction staticContent()
		‹?php
		echo'?›';
    }
}

Pour injecter et ajouter ce code dans la page statique, nous allons suivre la méthode utiliser dans la fonction qui fait déjà quelque chose de similaire en injectant le contenu de la page statique, il suffit de reproduire cette méthode

            # Inclusion du fichier
            ob_start();
            require $file;
            $output = ob_get_clean();
            eval($this-›plxMotor-›plxPlugins-›callHook('plxShowStaticContent'));
            echo $output;

L'injection de notre script va se produire juste avant echo $output;, nous devons donc inclure le script dans echo $output;.

Pour simplifier la lecture du code et facilement mettre à jour notre script, nous sauvegardons le script dans un fichier externe, c'est lui que nous allons inclure.

Ce qui donne en copiant le fonctionnement de la fonction staticContent().

‹?php  if(!defined('PLX_ROOT')) exit;
class MonPlugin extends plxPlugin {

    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
    $this-›addHook('plxShowStaticContent', 'plxShowStaticContent');
    }

	# methode qui modifie la fonction $plxShow-›staticContent())
    public function plxShowStaticContent() {
		# insertion des commentaires et formulaire
		echo '‹?php';
		?›
		ob_start();
		include( PLX_PLUGINS.'MonPlugin/include.commentaire.php');
		$output .= ob_get_clean();
		‹?php
		echo'?›';

    }
}

Il suffit maintenant de créer un troisième fichier vide , appeler include.commentaire.php et de coller à l'intérieur le script commentaires dans une page statique. enregistrer ce fichier dans le répertoire de votre nouveau plugin.

Il ne reste plus qu'a activé le plugin pour voir toutes vos pages statiques dotées d'un module de commentaires.

C'est pas si compliqué!

PluXml à tout prévu pour laisser à chacun la possibilité de modifier son fonctionnement en l’agrémentant de diverses fonctionnalités sans avoir à toucher au cœur même de PluXml.

Nous venons juste de voir l'injection d'un seul script, mais l'on peut faire beaucoup plus.

Code disponible sur github @ https://github.com/gcyrillus/MonPlugin.

Table des matieres

développement d'un plugin

Prérequis

Le développement d'un plugin n'est pas chose aisée lorsque l'on ne connait pas bien le fonctionnement de PluXml. Cela peut-être mission impossible si, PHP et vous, êtes de parfais inconnus pour l'un et l'autre.

Un minimum de connaissance en PHP est un prérequis , mais aussi la capacité de déboguer sont propre code. L''idéal est aussi d'avoir quelques compétences en JavaScript , HTML et CSS pour gérer l'ensemble des fonctionnalités du plugin pour son intégration dans votre PluXml et votre thème.

Avec ces prérequis, vous pouvez prendre connaissance de la documentation et de ses quelques exemples fournis. En décortiquant l'un des nombreux plugins disponibles la documentation n'en sera que plus facile à lire et à comprendre.

Je suis prêt, action!

La construction d'un plugin commence par choisir un nom, nom qui servira de répertoire, de nom au fichier php de class et au nom de class de ce Plugin .
Le fichier infos.xml, carte d'identité de votre plugin, est aussi obligatoire .

Ce qui donne comme premier dossier et fichiers de votre projet :

monPlugin

monPlugin.php

infos.xml

C'est bien, c'est le minimum requis pour un plugin.

Ensuite?

en parcourant la documentation , vous allez au fur et à mesure ajouter les codes de base nécessaires à ces deux fichiers et rapidement obtenir le squelette d'un plugin reconnu par PluXml et qui sera installable, mais qui ne fera pas grand chose à ce stade.

Cette partie n'est pas la plus joyeuse et lorsque vous aurez développé quelques plugins, vous reprendrez surement l'un deux pour en garder toutes les bases dont vous avez besoin au lieu de les recoder en gagnant du temps pour aller à l'essentiel.

Peut-on faire plus facile, rapide?

-- Oui, certainement.

Pluxopolis vous propose un générateur de plugin en ligne avec plusieurs options paramétrables pour passer cette première étape, essentielle mais chronophage, avec seulement les fonctionnalités et hooks dont vous aurez besoin. Plus besoin de cloner et de nettoyer un autre projet de plugin pour en démarrer un nouveau.

C'est ici : Le Chaudron à plugin.

Cette marmite à plugin est elle même un plugin que vous pouvez installer chez vous si vous préférez, son archive se trouve sur : Github plugin - theCrok - de son nom.

Cela n’élimine pas les prérequis, il vous restera à coder vos nouvelles fonctionnalités et de l'aide pourra vous être donnée dans le forum de PluXml pour finaliser votre pépite.

Bon dev à tous.

Ce plugin n'est pas le premier outil qui veut vous aider dans les premiers pas du developpement d'un plugin.
Il existe:

ce script en ligne : Plugin Starter

Cette base de plugin :Plugin.zip

et celle-ci test.zip

Entre autre outils , vous avez aussi, kzTranslate.zip pour traduire votre fichier de langue en une ou plusieurs autre langues. Attention, ce plugin ne traduit que du texte brut. Si vous insérer des balises HTML , comme je le fais moi-même fréquemment, le plugin ne finalisera pas la traduction.

Table des matieres

essais SEO

Des questions sur le SEO, ou comment optimiser son site pour les "moteurs de recherches" reviennent régulièrement sur le forum de PluXml

Malgré les qualités indéniables de PluXml, le peut de contributeur et d'expert en différent domaine ne permette pas à PluXml d'évoluer aussi rapidement qu'on le souhaite dans les différents domaines d'expertises afin d'en tirer les meilleur partis, même si l'essentiel existe et est en place dans PluXml

Au delà des bonnes pratiques et des quelques métadonnées que PluXml permet de renseigner , des plugins et scripts existent pour ajouter et améliorer le référencement de votre site.

On peut retrouver des plugins sur le centre de ressources et des scripts et astuces sur le forum de PluXml. Certains sont trop spécifiques pour se suffirent, d'autres sont en parti devenus obsolète avec le changement des bonnes pratiques ou la disparition de certains réseaux sociaux.

En creusant un peu l'on découvre que le sujet est très complexe et qu'il n'est pas nécessaire ou possible de mettre en place toutes les recommandations. Cela dépendra du contenu(sujet de votre Site mais aussi de chaque pages individuellement), de votre public, de vos compétences mais aussi de votre budget si vous souhaitez confier cette tache à un professionnel.

Le plugin, tente de regrouper quelques moyens qui faciliteront le référencement et le partage de votre site. Ce plugin est compatible avec les plugin plxMyMultiLingue, plxMyBetterUrls et plxMySearch .

L'installation du plugin est standard et sa configuration ne présente pas de difficulté particulières. Il s'agit d'activé ou non la génération des métadonnées et des URL canoniques. toutes indépendamment.

Il est aussi possible de voir et d'éditer les fichiers robots.txt et humans.txt. Les fichiers ads.txt et .htaccess ne sont pas concerné dans cette première version.

Les options de configurations sont:

Ajout de l'URL canonique de la page

option d'exclusion de certaines catégories ou page statiques du sitemp de PluXml.

Ajout des données structurées pour des résultats enrichis

Ajout des balises META OpenGraph

Ajout des balises META 'Twitter Card'

l'edition des fichiers robots.txt et humans.txt

Déclarer le plugin plxMySearch comme un moteur de recherche pour le navigateur (création du fichier opensearch.xml)

Le plugin est téléchargeable depuis github : extra_SEO.

Table des matieres

Pluxopolis se dote d'une NewsLetter

Un tout nouveau plugin fonctionnel vient de rejoindre les fonctionnalités que l'on peut ajouter à notre CMS favoris.C'est lui qui vient d'être activé sur pluxopolis.

Le plugin myNewsLetter

Ce plugin à encore besoin de murir au travers de tests "utilisateurs", tant en tant qu'abonné qu'en tant qu''administrateur de façon à améliorer son interface de configuration et l'aspect des news envoyées.

Qu'a t-il de particulier?

Il ne dépend pas d'un service tiers mais requiert que la fonction mail() soit fonctionnelle sur votre hébergement

Les adresses mails sont stockées cryptées et ne sont compatibles qu'avec le plugin et le site sur lequel il a été activé.

Les envois peuvent être automatisés sans que le webmestre s'en souci. Dans ce cas , configurez bien votre newsletter avant de prendre cette option, car les news partiront sans préavis.

Les news sont générées automatiquement à l'aide d'un système de template pour construire "les nouvelles". Configurables elles sont aussi éditables. Construites sur des tableaux HTML pour une compatibilité maximale avec les messageries. C'est l'éditeur TinyMce6 (version CDN gratuite) qui a été choisi pour l’édition après en avoir testé plusieurs.

Critiques et retours de bogues

À priori dédié aux surbookés, il n'est surement pas dénué de défauts, c'est au utilisateurs de les débusqués, si il y en a.

Dites nous tout! - Les commentaires seront fermés d'ici quelques mois. Mais il y a déjà un sujet qui est ouvert sur le forum où vous pourrez partager vos critiques et demandes d'aides : MyNewsLetter, sujet sur le forum officiel de PluXml.

Vous le retrouverez sur github pour voir sa description complète, son code source et télécharger sa dernière version. ou dans les ressources pour pluxml sur le Dépôt de plugins multi-versions pour Pluxml.

Bon été 2023 à tous

Table des matieres

Plugin CKEditor pour PluXml: ajoutez un compteur de mot

Pour rappel CKEditor est un éditeur de texte disponible sous forme de plugin pour PluXml facilitant la rédaction des articles. Le plugin est disponible sur la page dédiée des Plugins de pluxopolis.net.

CKEditor dispose lui aussi d'un système de plugin interne permettant de rajouter des nouvelles fonctionnalités. Nous allons voir comment rajouter un compteur de mot pour la version 4.5.3 du plugin CKEditor pour PluXml.

Le nombre de mots est affiché en bas à droite de l'éditeur

D'autres plugins dans le centre de ressources et téléchargements Pluxopolis

Table des matieres

Plugin plxMyProtectEmails

plxMyProtectEmails permet de protéger l'affichage des adresses emails dans les articles et les pages statiques de PluXml en utilisant un système d'encodage javascript.

Ainsi une simple adresse email du genre

webmaster@monsite.com

sera remplacée par

‹script›eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%77%65%62%6d%61%73%74%65%72%40%6d%6f%6e%73%69%74%65%2e%63%6f%6d%22%3e%77%65%62%6d%61%73%74%65%72%40%6d%6f%6e%73%69%74%65%2e%63%6f%6d%3c%2f%61%3e%27%29'))‹/script›

Visuellement rien ne changera pour vos visiteurs (ils verront toujours l'adresse email en clair), mais en revanche si vous éditez le contenu de la page, vous constaterez que c'est bien la partie encodée qui est utilisée dans le code source.

Cet encodage évitera que les robots spammeurs viennent récupérer les adresses emails. Même si on peut penser que cette solution n'est pas fiable à 100%, cela restera un bon premier niveau de protection.

Le plugin est disponible dans la partie Plugins du site ou il peut être téléchargé directement à partir du plugin MyPluginDownloader s'il est installé sur votre site.

Installez et activez le plugin.
Aucune configuration n'est requise.

Index des Mots clés

a

administrationAjouter une aide aux thèmes de PluXml 5.5+Plugins: afficher les boutons dans la barre d'actionDes thèmes pour personnaliser la zone d'administration

apacheFaire une redirection http://www vers http:// avec PluXmlRésoudre le problème de réécriture d'url de PluXml sous Apache 1.3.x

articleAjoutez une lettrine aux articles en cssAfficher les commentaires en ordre décroissantAfficher une mention pendant 7 jours pour les nouveaux articlesAfficher les articles sur 2 colonnesDonner du style à la liste des catégories des articlesMettre en avant les commentaires rédigés à partir de l'administrationRecommander des articlesModifier l'affichage du chapo en mode articleexclure les liens de l'article affiché

astuceUne barre des menus fixePositionner l'image d'accroche à gauche ou à droite du chapôPlugin CKEditor pour PluXml: ajoutez un compteur de motAfficher une mention pendant 7 jours pour les nouveaux commentairesGestionnaire de médias: afficher par défaut "Pas de miniature"Plugins: afficher les boutons dans la barre d'actionAfficher une mention pendant 7 jours pour les nouveaux articlesAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)Inclure un fichier php stocké dans le dossier de son thèmeAjouter un lien dans son thème vers une page statique à partir de son numéroComment afficher la date d'un article au format J mois AAAAAfficher la liste de tous les tags dans une page statiqueAfficher le menu d'une catégorie dans la barre des menus des pages statiquesCompter le nombre de pages statiquesConnaître le mode d'affichage de PluXmlAjouter un compteur de visite

audienceAjouter un compteur de visiteOù placer le code de suivi de Google Analytics sur son site ?Pluxopolis se dote d'une NewsLetter

b

bannièresDes bannières pour promouvoir le projet

bénévoleChoisir des thèmes ou apprendre à les mettre à jour

c

catégorieAfficher la description des catégories que sur la première pageDonner du style à la liste des catégories des articlesAfficher le menu d'une catégorie dans la barre des menus des pages statiques

catégoriesAfficher les catégories sous forme de menus déroulants

ckeditorPlugin CKEditor pour PluXml: ajoutez un compteur de motCKEditor: comment changer la langue du correcteur orthographiqueComment rajouter des addons à l'éditeur CKEditor pour PluXmlPlugin CKEditor 4.4.6: ce que vous devez savoir avant de mettre à jour

cmsChangement de propriétaire

collaborationPluxopolis reste en ligne.Changement de propriétaire

commentairesCommentaires dans une page statiqueMise en place de l'indentation des commentaires dans un ancien thèmeAfficher une mention pendant 7 jours pour les nouveaux commentairesAfficher les commentaires en ordre décroissantRécupérer les adresses emails des commentateursMettre en avant les commentaires rédigés à partir de l'administrationValidation des commentaires en jQueryCréer une pagination pour les commentairesexclure les liens de l'article affiché

créationChoisir des thèmes ou apprendre à les mettre à jour

cssThème par défaut: installer une bannière sous le logo de PluXmlUne barre des menus fixeAfficher les catégories sous forme de menus déroulantsRemplacer le lien "Lire la suite" par une imagePages statiques sous forme de menus déroulant en pur cssPositionner l'image d'accroche à gauche ou à droite du chapôMise en place de l'indentation des commentaires dans un ancien thèmeAfficher une icône devant les liens des flux rssThème Navan pour PluXml 5.4+Plugins: afficher les boutons dans la barre d'actionDes thèmes pour personnaliser la zone d'administrationAjoutez une lettrine aux articles en cssAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)Afficher les articles sur 2 colonnesÀ quoi sert l'instruction templateCssAjouter une icône aux menus des pages statiquesCréer un page d'erreur 404 personaliséeDonner du style à la liste des catégories des articlesMettre en avant les commentaires rédigés à partir de l'administrationComment afficher la date d'un article au format J mois AAAADonnez du style à vos titresRajouter des couleurs dans son nuage de tags

d

datesComment afficher la date d'un article au format J mois AAAAFormater l'affichage des dates

documentationListe des constantes dans PluXmlComment rajouter des addons à l'éditeur CKEditor pour PluXmlUn centre de ressources pour PluXmlPlugin plxMyProtectEmails

e

emailRécupérer les adresses emails des commentateursPluxopolis se dote d'une NewsLetterPlugin plxMyProtectEmails

equipeChangement de propriétaire

erreurCréer un page d'erreur 404 personalisée

evenementPluxopolis reste en ligne.Changement de propriétaire

evolutionPluXml 5.8.11 et la version 5.9.0 en devPluxopolis reste en ligne.

g

gcyrillus-nomadePaginer le contenu d'une page statiqueChoisir des thèmes ou apprendre à les mettre à jour

generateurdéveloppement d'un plugin

gestionnaire de médiasRenommer un fichier dans PluXml à partir du gestionnaire de médias

gitPage de plugins sur PluxopolisMes plugins pour PluXml sur github

githubPage de plugins sur PluxopolisMes plugins pour PluXml sur github

google analyticsOù placer le code de suivi de Google Analytics sur son site ?

h

htaccessFaire une redirection http://www vers http:// avec PluXmlRésoudre le problème de réécriture d'url de PluXml sous Apache 1.3.x

j

jack31Changement de propriétaire

jqueryRéaliser des menus déroulants à partir des menus des pages statiquesValidation des commentaires en jQueryCréer une pagination pour les commentairesBonne pratique pour déclarer jQuery dans un plugin

json-ldLes données structurées

m

menuUne barre des menus fixeAfficher les catégories sous forme de menus déroulantsPages statiques sous forme de menus déroulant en pur cssAfficher une icône devant les liens des flux rssModifier le titre du menu "Blog"Ajouter un lien dans son thème vers une page statique à partir de son numéroAfficher la liste des pages statiques dans la sidebarDéplacer le menu Blog

mise à jourChoisir des thèmes ou apprendre à les mettre à jour

n

navigationUne barre des menus fixeFaire une redirection http://www vers http:// avec PluXmlModifier le titre du menu "Blog"Ajouter une icône aux menus des pages statiquesRéaliser des menus déroulants à partir des menus des pages statiquesDéplacer le menu BlogChanger le titre du menu AccueilCréer une pagination pour les commentaires

o

outilsdéveloppement d'un plugin

p

page statiqueCommentaires dans une page statiquePaginer le contenu d'une page statiqueUtiliser la fonction pagination() dans une page statique.Pages statiques sous forme de menus déroulant en pur cssInclure une page statique à partir de son titre ou de son urlModifier le titre du menu "Blog"Ajouter une icône aux menus des pages statiquesAjouter un lien dans son thème vers une page statique à partir de son numéroAfficher la liste des pages statiques dans la sidebarAfficher la liste de tous les tags dans une page statiqueRéaliser des menus déroulants à partir des menus des pages statiquesDéplacer le menu BlogAfficher le menu d'une catégorie dans la barre des menus des pages statiquesAfficher une sidebar différente pour chaque page statiqueAjouter un contenu dans la sidebar en fonction d'une page statiqueAfficher le contenu d'une page statique dans la sidebarCompter le nombre de pages statiques

paginationCommentaires dans une page statiquePagination via JavaScriptUtiliser la fonction pagination() dans une page statique.

phpexclure les liens de l'article affichéURL canonical et PluXmlConnaître le mode d'affichage de PluXmlProblème de formulaires avec max_input_vars (PHP 5.3.9+)

plucssUne barre des menus fixeThème Navan pour PluXml 5.4+Des thèmes pour personnaliser la zone d'administrationAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)

plugindéveloppement d'un plugin

pluginsPluXml 5.8.11 et la version 5.9.0 en devessais SEOChoisir des thèmes ou apprendre à les mettre à jourPlugin CKEditor pour PluXml: ajoutez un compteur de motPlugins: afficher les boutons dans la barre d'actionComment rajouter des addons à l'éditeur CKEditor pour PluXmlTester l'existence d'un plugin à partir d'un pluginBonne pratique pour déclarer jQuery dans un pluginun nouvel écran de gestion des plugins ?Pluxopolis se dote d'une NewsLetterPlugin CKEditor 4.4.6: ce que vous devez savoir avant de mettre à jourPage de plugins sur Pluxopolisfaire d'un script un pluginUn centre de ressources pour PluXmlPlugin plxMyProtectEmails

pluxmlPluXml 5.8.11 et la version 5.9.0 en devessais SEOCommentaires dans une page statiquePaginer le contenu d'une page statiqueUtiliser la fonction pagination() dans une page statique.Choisir des thèmes ou apprendre à les mettre à jourThème par défaut: installer une bannière sous le logo de PluXmlUne barre des menus fixeAfficher les catégories sous forme de menus déroulantsConnaître le statut d'un plugin coté visiteurRemplacer le lien "Lire la suite" par une imagePages statiques sous forme de menus déroulant en pur cssPositionner l'image d'accroche à gauche ou à droite du chapôGestionnaire de thème de PluXmlMise en place de l'indentation des commentaires dans un ancien thèmeAfficher une mention pendant 7 jours pour les nouveaux commentairesGestionnaire de médias: afficher par défaut "Pas de miniature"Thème Navan pour PluXml 5.4+Afficher une mention pendant 7 jours pour les nouveaux articlesAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)Afficher les articles sur 2 colonnesListe des constantes dans PluXmlCKEditor: comment changer la langue du correcteur orthographiqueAfficher la description des catégories que sur la première pageRécupérer les adresses emails des commentateursÀ quoi sert l'instruction templateCssAjouter une icône aux menus des pages statiquesCréer un page d'erreur 404 personaliséeDonner du style à la liste des catégories des articlesRésoudre le problème de réécriture d'url de PluXml sous Apache 1.3.xInclure un fichier php stocké dans le dossier de son thèmeAjouter un lien dans son thème vers une page statique à partir de son numéroAfficher la liste des pages statiques dans la sidebarAfficher votre profil à la fin des articlesRecommander des articlesFormater l'affichage des datesAfficher la liste de tous les tags dans une page statiqueRéaliser des menus déroulants à partir des menus des pages statiquesDéplacer le menu BlogComment trier le nuage de tagsDonnez du style à vos titresAfficher une sidebar différente pour chaque page statiqueModifier l'affichage du chapo en mode articleChanger le titre du menu AccueilCréer une pagination pour les commentairesBonne pratique pour déclarer jQuery dans un pluginAjouter un contenu dans la sidebar en fonction d'une page statiqueAfficher le contenu d'une page statique dans la sidebarAjoutez une signature dans vos flux rssun nouvel écran de gestion des plugins ?Structure des fichiers xml des articlesComprendre le nom des fichiers xml des articlesRajouter des couleurs dans son nuage de tagsMettre en place un éditoDes bannières pour promouvoir le projetContrôler l'affichage du chapo et du contenu des articlesPersonnaliser le menu d'administration d'un pluginPersonnaliser l'affichage du lien "Lire la suite"Compter le nombre de pages statiquesOù placer le code de suivi de Google Analytics sur son site ?Pluxopolis se dote d'une NewsLetterChangement de propriétairePlugin CKEditor 4.4.6: ce que vous devez savoir avant de mettre à jourMes plugins pour PluXml sur githubUn centre de ressources pour PluXml

pluxopolisChangement de propriétaire

profilAfficher votre profil à la fin des articles

programmationListe des constantes dans PluXmlRecommander des articlesValidation des commentaires en jQueryCréer une pagination pour les commentairesBonne pratique pour déclarer jQuery dans un pluginCompter le nombre de pages statiquesMes plugins pour PluXml sur githubfaire d'un script un plugin

r

référencementessais SEOLes données structuréesFaire une redirection http://www vers http:// avec PluXmlURL canonical et PluXml

ressourcesChangement de propriétaireUn centre de ressources pour PluXml

rssAfficher une icône devant les liens des flux rssAjoutez une signature dans vos flux rss

s

scriptsLes données structuréesPagination via JavaScriptPaginer le contenu d'une page statiqueexclure les liens de l'article affichéURL canonical et PluXmlUn centre de ressources pour PluXml

sécuritéPlugin plxMyProtectEmails

sidebarAfficher une icône devant les liens des flux rssAjouter un lien dans son thème vers une page statique à partir de son numéroAfficher la liste des pages statiques dans la sidebarDéplacer le menu BlogComment trier le nuage de tagsAfficher une sidebar différente pour chaque page statiqueAjouter un contenu dans la sidebar en fonction d'une page statiqueAfficher le contenu d'une page statique dans la sidebarRajouter des couleurs dans son nuage de tags

snippetConnaître le statut d'un plugin coté visiteurRemplacer le lien "Lire la suite" par une imageInclure une page statique à partir de son titre ou de son urlAjoutez une lettrine aux articles en cssAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)Afficher la description des catégories que sur la première pageRécupérer les adresses emails des commentateursTester l'existence d'un plugin à partir d'un pluginInclure un fichier php stocké dans le dossier de son thèmeAjouter un lien dans son thème vers une page statique à partir de son numéroCompter le nombre de pages statiques

stéphaneChangement de propriétaire

t

tagsAfficher la liste de tous les tags dans une page statiqueComment trier le nuage de tags

téléchargementsChangement de propriétaireUn centre de ressources pour PluXml

templateThème par défaut: installer une bannière sous le logo de PluXmlUne barre des menus fixeAfficher les catégories sous forme de menus déroulantsPages statiques sous forme de menus déroulant en pur cssAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)À quoi sert l'instruction templateCss

templatesChoisir des thèmes ou apprendre à les mettre à jourexclure les liens de l'article affiché

thèmeThème par défaut: installer une bannière sous le logo de PluXmlUne barre des menus fixeRemplacer le lien "Lire la suite" par une imageAjouter une aide aux thèmes de PluXml 5.5+Positionner l'image d'accroche à gauche ou à droite du chapôGestionnaire de thème de PluXmlMise en place de l'indentation des commentaires dans un ancien thèmeAfficher une icône devant les liens des flux rssThème Navan pour PluXml 5.4+Inclure une page statique à partir de son titre ou de son urlDes thèmes pour personnaliser la zone d'administrationAjoutez une lettrine aux articles en cssAfficher les commentaires en ordre décroissantAstuce PluCSS: connaitre le mode d'affichage (sml, med, lrg)Afficher les articles sur 2 colonnesÉdition en ligne des fichiers du thème de votre PluXmlModifier le titre du menu "Blog"À quoi sert l'instruction templateCssAjouter une icône aux menus des pages statiquesCréer un page d'erreur 404 personaliséeDonner du style à la liste des catégories des articlesInclure un fichier php stocké dans le dossier de son thèmeAjouter un lien dans son thème vers une page statique à partir de son numéroMettre en avant les commentaires rédigés à partir de l'administrationComment afficher la date d'un article au format J mois AAAAAfficher la liste des pages statiques dans la sidebarAfficher votre profil à la fin des articlesRecommander des articlesFormater l'affichage des datesRéaliser des menus déroulants à partir des menus des pages statiquesDonnez du style à vos titresAfficher une sidebar différente pour chaque page statiqueModifier l'affichage du chapo en mode articleChanger le titre du menu AccueilAjouter un contenu dans la sidebar en fonction d'une page statiqueAfficher le contenu d'une page statique dans la sidebarRajouter des couleurs dans son nuage de tagsContrôler l'affichage du chapo et du contenu des articlesPersonnaliser l'affichage du lien "Lire la suite"

thèmesPluXml 5.8.11 et la version 5.9.0 en devChoisir des thèmes ou apprendre à les mettre à jourUn centre de ressources pour PluXml

tutoLes données structuréesPagination via JavaScriptRenommer un fichier dans PluXml à partir du gestionnaire de médiasAfficher les catégories sous forme de menus déroulantsPages statiques sous forme de menus déroulant en pur cssAfficher les articles sur 2 colonnesCKEditor: comment changer la langue du correcteur orthographiqueAfficher la description des catégories que sur la première pageÉdition en ligne des fichiers du thème de votre PluXmlModifier le titre du menu "Blog"Recommander des articlesDéplacer le menu BlogComment trier le nuage de tagsDonnez du style à vos titresModifier l'affichage du chapo en mode articleValidation des commentaires en jQueryCréer une pagination pour les commentairesAjouter un contenu dans la sidebar en fonction d'une page statiqueAfficher le contenu d'une page statique dans la sidebarAjoutez une signature dans vos flux rssStructure des fichiers xml des articlesComprendre le nom des fichiers xml des articlesRajouter des couleurs dans son nuage de tagsMettre en place un éditoContrôler l'affichage du chapo et du contenu des articlesPersonnaliser le menu d'administration d'un pluginPersonnaliser l'affichage du lien "Lire la suite"

tutorielsChoisir des thèmes ou apprendre à les mettre à jourfaire d'un script un plugin

u

url rewriteFaire une redirection http://www vers http:// avec PluXmlRésoudre le problème de réécriture d'url de PluXml sous Apache 1.3.xURL canonical et PluXml

v

validationValidation des commentaires en jQuery

w

webfontDonnez du style à vos titres

x

xmlGestionnaire de thème de PluXmlStructure des fichiers xml des articles

ressources

Sur cette page sont listés les sites qui proposent des plugins, thèmes ou scripts qui peuvent nous être utiles.

Si vous gérez vous-même un repository et voulez le voir apparaître dans cette liste, merci de me contacter ou de le proposer dans les commentaires ci-dessous.

pluxthemes.com thémes et tutoriels.

Bazooka07 kazimentou.fr (une vraie mine d'or)

http://sudwebdesign.free.fr (un excellent travail)

Sujets "Plugins" dans les forums PluXml

Sujets "Thèmes" et créations en général dans les forums PluXml

//www.secretsitebox.fr

//dpfpic.com

https://blog.gegeweb.org

//warriordudimanche.net

//thepoulpe.net

//my.pluxml.free.fr

github.com/gcyrillus

https://ressources.pluxml.org/plugins (32)

wiki.pluxml.org/docs/miscellaneous/plugins.html

https://ressources.pluxopolis.net/banque-plugins/ (des centaines ...)

les plugins de jerryWham (21) que l'on aussi retrouver dans un moteur de recherche en faisant le tri sur son github : https://github.com/jerrywham pluxml

https://ressources.pluxopolis.net/pluginsjpb

https://ressources.pluxopolis.net/pluginsbronco

https://ressources.pluxopolis.net/pluginsspx

https://ressources.pluxopolis.net/stephane

https://ressources.pluxopolis.net/Hamtaro

https://www.kazimentou.fr/repo/index.php (51)

github gcyrillus

repo petitpouyot

...

+ ceux que vous voudrez bien partager