[SPXSHORTCODES] environnement pour shortcodes

13»

Réponses

  • Hello,

    Merci pour le feedback et la petite correction (je matrise l'anglais il y a pas de soucis).

    Je vais surement faire un plugin qui va rassembler un ensemble de shortcodes indispensables. J'en ai deja créé pas mal et la centralisation me parait importante.

    a+

    jéjé
  • Je vais surement faire un plugin qui va rassembler un ensemble de shortcodes indispensables. J'en ai deja créé pas mal et la centralisation me parait importante.

    Excellente idée !
    Je vais peut-être enfin me mettre aux shortcodes, car si le principe me semble excellent, il me manque des exemples d'utilisation pour en apprécier vraiment l'utilité...
  • Effectivement, ce serait pratique d'avoir un ensemble de shortcodes réunis.

    Ce qui serait vraiment très utile aussi, ce serait d'avoir sur le site de PluXml une sous-section dédiée aux shortcodes, pour recenser tous ceux qui existent.
    Est-ce que ça pourrait être mis en place dans le Wiki ?
  • ppmtppmt Member
    je plussoie l'idee de centraliser tous les shortcodes!
  • je-evrardje-evrard Member
    juin 2016 modifié
    On est tous d'accord un plugin dédié (et un petit emplacement dans le forum en plus ça serait top !) héhé ! :)
  • PierrePierre Member
    Je vais peut-être vous surprendre mais je trouve que les plugins auraient leur place dans la rubrique Ressources au même titre qu'on traite les thèmes. En réutilisant le même système, Stéphane pourrait garder le contrôle des entrées indésirées et l'auteur d'un plugin pourrait y mettre une description, même une image pour identifier.

    Dans l'exemple présent, une page dédiée à SpxShortcodes aurait l'option d'inclure un fichier d'aide vers un glossaire des codes disponibles, bien tenus à jour. Aujourd'hui, on les relègue au Wiki, c'est pas mal mais moins visible. Ça fait un peu hack et moins véritable outil d'amélioration pour répondre à un besoin.

    Ce genre de classement est très pratique pour Drupal, Wordpress, etc. On donne aux plugins une place bien en vue pour s'afficher, on indique si le produit est en développement ou mature, la date de la dernière mise à jour, etc. On peut même rêver un peu et penser y inclure des mots clés pour recherche dans les plugins.

    Si tout est maintenu par l'auteur dudit plugin, Stéphane n'aurait alors qu'à autoriser l'ouverture et les mises à jour, ça ne devrait pas prendre plus de temps que d'autoriser un thème.
  • Bonne remarque, Pierre, car bien que je n'aille pas souvent chercher les plugins sur le site (je les télécharge quand ils apparaissent sur le forum), quand je vais en chercher un, je clique toujours sur "Ressources", avant de me dire : Zut, c'est vrai, ils sont dans "Wiki" !
  • PierrePierre Member
    Et pour les habitués, ça finit par devenir naturel de fouiller partout, on oublie vite nos premiers jours et on fait avec. Mais pour un nouveau qui "magasine" son prochain CMS et qui tombe sur le site de PluXml, plus il verra un site mature avec une bibliothèque florissante de plugins, plus ça pourra montrer la maturité et la promesse de remplir les besoins les plus fous.
  • je-evrardje-evrard Member
    juin 2016 modifié
    Hello,

    Puisque vous êtes tous sympas, je vais vous montrer comment faire simplement un breadcrumb en shortcode : c'est très simple (ce shortcode sera lui aussi dans le futur plugin qui intégrera des shorcodes indispensables ;=) ). Vous n'auriez pas été sympas, je le montrais quand même nanana.


    Déclaration du shorcode dans config.php du thème avec deux fonctions :
    [== Indéfini ==]
    function plx_formatLink($href, $name, $link=false, $title='', $class='') {
    	if($link) {
    		$title = $title=='' ? $name : $title;
    		$class = $class=='' ? '' : ' class="'.$class.'"';
    		return '<a href="'.$href.'" title="'.plxUtils::strCheck($title).'"'.$class.'>'.plxUtils::strCheck($name).'</a>';
    	} else
    		return '<span class="here" style="font-weight:bold">'.$name.'</span>';
    }
    
    function plx_breadcrumb_func( $atts ) {
    	
    	extract( shortcode_atts( array(
        // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
        'L_HERE'			=> 'Vous êtes ici : ',
    	'L_HOMEPAGE'		=> 'accueil',
    	'L_STATIC'			=> 'page',
    	'L_ARTICLE'			=> 'article',
    	'L_ARCHIVES'		=> 'archives',
    	'L_TAG'				=> 'mot clé',
    	'L_CATEGORY'		=> 'catégorie',
    	'L_PAGE'			=> 'page',
    	'L_ERROR'			=> 'erreur',
    	'L_BLOG'			=> 'blog',
    	'separator' => '<span class="sep">&nbsp;&#187;&nbsp;</span>'
    	
    	), $atts ) );
    	
    	global $plxShow;
    	$plxShow = plxShow::getInstance();
    	# pages
    	preg_match("/\/?page([0-9]+)$/",$plxShow->plxMotor->get,$pages);
    	# home
    	if($plxShow->plxMotor->get=="blog") {
    		$url = "?blog";
    		$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $L_BLOG, true, $L_BLOG.$plxShow->plxMotor->aConf["title"], "first");
    	} else {
    		$url = "?";
    		$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $L_HOMEPAGE, true, $L_HOMEPAGE.$plxShow->plxMotor->aConf["title"], "first");
    	}
    	# traitement des différents modes
    	switch($plxShow->mode()) {
    		case "categorie":
    			$breadcrumb[] = $L_CATEGORY;
    			$id = $plxShow->plxMotor->cible;
    			$name = $plxShow->plxMotor->aCats[$id]["name"];
    			$url = "?categorie".intval($id)."/".$plxShow->plxMotor->aCats[$id]["url"];
    			$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name, isset($pages[1]));
    			break;
    		case "static":
    			$id = $plxShow->plxMotor->cible;
    			if($id!=$plxShow->plxMotor->aConf["homestatic"]) {
    				$breadcrumb[] = $L_STATIC;
    				$group = $plxShow->plxMotor->aStats[$id]["group"];
    				if(!empty($group)) $breadcrumb[] = $group;
    				$name = $plxShow->plxMotor->aStats[$id]["name"];
    				$url = "?static".intval($id)."/".$plxShow->plxMotor->aStats[$id]["url"];
    				$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name);
    			}
    			break;
    		case "tags":
    			$breadcrumb[] = $L_TAG;
    			$id = $plxShow->plxMotor->cible;
    			$name = $plxShow->plxMotor->cibleName;
    			$url = "?tag/".$id;
    			$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name, isset($pages[1]), "'.$this->getLang('L_TAG').' ".$id);
    			break;
    		case "archives":
    			$breadcrumb[] = $L_ARCHIVES;
    			preg_match("/^(\d{4})(\d{2})?(\d{2})?/",$plxShow->plxMotor->cible, $capture);
    			# year
    			if(!empty($capture[1])) {
    				$url = "?archives/".$capture[1];
    				$p = isset($capture[2]) OR isset($pages[1]);
    				$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $capture[1], $p, $L_ARCHIVES.$capture[1]);
    			}
    			# month
    			if(!empty($capture[2])) {
    				$name = plxDate::getCalendar("month", $capture[2]);
    				$url .= "/".$capture[2];
    				$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name, isset($pages[1]));
    			}
    			break;
    		case "article":
    			$breadcrumb[] = $L_ARTICLE;
    			$id = $plxShow->plxMotor->plxRecord_arts->f("numero");
    			$name = $plxShow->plxMotor->plxRecord_arts->f("title");
    			$url = "?article".intval($id)."/".$plxShow->plxMotor->plxRecord_arts->f("url");
    			$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name);
    			break;
    		case "erreur":
    			$breadcrumb[] = $L_ERROR;
    			break;
    		default:
    			if(isset($plxShow->plxMotor->aStats[$plxShow->plxMotor->cible])) {
    				$breadcrumb[] = $L_STATIC;
    				$breadcrumb[] = plx_formatLink("", $plxShow->plxMotor->aStats[$plxShow->plxMotor->cible]["name"]);
    			}
    	}
    
    	# n° de page
    	if(isset($pages[1])) {
    		$url .= "/page".$pages[1];
    		$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $L_PAGE.$pages[1]);
    	}
    
    	$sout=  $L_HERE;
    	$sout.= implode($separator, $breadcrumb);
    	return $sout;
    }
    add_shortcode( 'breadcrumb', 'plx_breadcrumb_func' );
    

    Pour l'affichage et bien sur à placer n'importe ou dans les pages du thème (header en général) :
    [== Indéfini ==]
    [breadcrumb]
    

    Des options sont dispos pour changer les textes et le séparateur : A vous de jouer les petits gars

    Jéjé

    Pierre : des choses se mettent en place doucement mais surement (le futur gestionnaire de dépot est un gros gros morceau élaboré sur le temps libre, pas facile a concilier et il est fini a 90%, on en reparle prochainement promis). Sinon, ne pas oublier spxplugindownloader qui reprend tous les plugins officiels, plus une partie des plugins non officiels en un clic pour mise a jour ou installation.
  • PierrePierre Member
    Bonnes nouvelles, tant mieux si nos experts peuvent trouver du temps pour améliorer encore le processus.

    Je pense toujours aux nouveaux venus qui ne passent que quelques minutes pour renifler un peu. Plus on verra de bonnes nouvelles, plus on voudra en savoir plus. Un bon groupe de plugins prouve que le produit attire les développeurs, c'est un signe très positif.
  • je-evrardje-evrard Member
    juin 2016 modifié
    Hello,

    Un petit shortcode pour afficher les archives tout simplement avec deux fonctions :
    [== Indéfini ==]
    function plx_display_archive($v,$format) {
    	$out ='';
    	foreach($v as $art) {
    		$row = str_replace('#art_date', plxDate::formatDate($art['date'],'#num_day/#num_month/#num_year(4)'), $format);
    		$row = str_replace('#art_link', '<a href="'.$art['url'].'">'.plxUtils::strCheck($art['title']).'</a>', $row);
    		$row = str_replace('#art_author', plxUtils::strCheck($art['author']), $row);
    		$out .= '<li>'.$row.'</li>';
    	}
    	return $out;
    }
    
    function plx_archive_func( $atts ) {
    	extract( shortcode_atts( array(
        // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
        'excludeCats'			=> '', # use id|id...
    	'sort'		=> 'desc', # critère de tri par date (desc, asc)
    	'sortby'			=> 'by_title', # type d'affichage (by_year, by_category, by_author, by_title)
    	'format'			=> '#art_date : #art_link par #art_author',
    	'noarticle'		=> 'Désolé mais il n\'y a pas d\'article.',
    	'class'				=> 'allarchive',
    	
    	), $atts ) );
    	
    	$aexcludeCats = explode ("|",$excludeCats); # tableau des categories exclues de l'affichage
    	
    	$plxMotor = plxMotor::getInstance();
    	
    	#art_date : #art_link par #art_author	
    		$array=array();
    		$plxGlob_arts = clone $plxMotor->plxGlob_arts;
    		if($files = $plxGlob_arts->query('/^[0-9]{4}.[home|'.$plxMotor->activeCats.',]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art',$sort,0,false,'before')) {
    			foreach($files as $filename) {
    				if(preg_match('/[0-9]{4}.((?:[0-9]|home|,)*(?:'.$plxMotor->activeCats.'|home)(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/',$filename,$capture)){
    					$catIds=explode(',',$capture[1]);
    					foreach($catIds as $catId) {
    						if(!in_array($catId, $aexcludeCats)) {
    							$tmp = $plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$filename);
    
    							if($catId=='000')
    								$catName = L_UNCLASSIFIED;
    							elseif($catId=='home')
    								$catName = L_HOMEPAGE;
    							else
    								$catName = $plxMotor->aCats[$catId]['name'];
    
    							$art = array(
    								'id'		=> $tmp['numero'],
    								'category'	=> $catName,
    								'url' 		=> $plxMotor->urlRewrite('?article'.intval($tmp['numero']).'/'.$tmp['url']),
    								'title' 	=> $tmp['title'],
    								'year'		=> substr($tmp['date'], 0,4),
    								'date'		=> $tmp['date'],
    								'author'	=> $plxMotor->aUsers[$tmp['author']]['name'],
    							);
    							$array[] = $art;
    						}
    					}
    				}
    			}
    		}
    		if($array) {
    			# tri multi-dimentionnel
    			foreach ($array as $key => $row) {
    				switch ($sortby) {
    					case 'by_year':
    						$a1[$key] = $row['year'];
    						break;
    					case 'by_category':
    						$a1[$key] = $row['category'];
    						break;
    					case 'by_author':
    						$a1[$key] = $row['author'];
    						break;
    					case 'by_title':
    						$a1[$key] = $row['title'];
    						break;
    				}
    				$a2[$key] = $row['date'];
    			}
    
    			array_multisort($a1, ($sortby=='by_year'?SORT_DESC:SORT_ASC), $a2, ($sort=='asc'?SORT_ASC:SORT_DESC), $array);
    
    			# préparation pour l'affichage
    			foreach ($array as $key => $row) {
    				switch ($sortby) {
    					case 'by_year':
    						$aArts[$row['year']][$row['id']] = $row;
    						break;
    					case 'by_category':
    						$aArts[$row['category']][$row['id']] = $row;
    						break;
    					case 'by_author':
    						$aArts[$row['author']][$row['id']] = $row;
    						break;
    					case 'by_title':
    						$aArts[$row['title']][$row['id']] = $row;
    						break;
    				}
    			}
    		}
    		
    		if($aArts) {
    			$out= '<div id="'.$url.'">';
    			if($sortby=='by_title') {
    				$out.= '<ul class="'.$class.'" >';
    				foreach($aArts as $k => $v) {
    					$out.=plx_display_archive($v,$format);
    				}
    				$out.= '</ul>';
    			} else {
    				foreach($aArts as $k => $v) {
    					$out.= '<p class="p_archive">'.plxUtils::strCheck($k).'</p>';
    					$out.= '<ul>';
    					$out.=plx_display_archive($v,$format);
    					$out.= '</ul>';
    				}
    			}
    			$out.= '</div>';
    		} else {
    			$out.= '<p>'.$noarticle.'</p>';
    		}
    		
    		return $out;
    
    	}
    	
    add_shortcode( 'archive', 'plx_archive_func' );
    

    Pour l'affichage et bien sur à placer n'importe ou plutôt dans une page statique :
    [== Indéfini ==]
    [archive]
    

    Des options sont dispos pour configurer les archives.
    [== Indéfini ==]
    [archive excludeCats='001|002' sort='asc' sortby='by_author' format='#art_date : #art_link par #art_author'  noarticle='No article sorry'  class='archive' ]
    
  • je-evrardje-evrard Member
    juin 2016 modifié
    Comment rajouter un commentaire facebook dans une page simplement

    Voici le code :
    [== Indéfini ==]
    function facebook_comment_func($atts, $content = null) {
    	# https://developers.facebook.com/docs/plugins/comments/
    	
    	extract( shortcode_atts( array(
        // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
        'width'			=> '100%', # width of the plugin
    	'numposts'		=> '10', # nb posts
    	'colorscheme'	=> 'light'
    	
    	), $atts ) );
    	
    	$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    	$s='';
    		$s.= '
    		
    		<div id="fb-root"></div>
    				<script>(function(d, s, id) {
    				  var js, fjs = d.getElementsByTagName(s)[0];
    				  if (d.getElementById(id)) return;
    				  js = d.createElement(s); js.id = id;
    				  js.src = "//connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v2.0";
    				  fjs.parentNode.insertBefore(js, fjs);
    				}(document, "script", "facebook-jssdk"));</script>
    
    
    
    				<div class="fb-comments" data-href="'.$actual_link.'" data-width="'.$width.'" data-numposts="'.$numposts.'" data-colorscheme="'.$colorscheme.'"></div>
    		';
    
    	
    	return $s;
    		
    }
    add_shortcode('facebook_comment', 'facebook_comment_func');
    

    Pour afficher :
    [== Indéfini ==]
    [facebook_comment]
    
  • je-evrardje-evrard Member
    juin 2016 modifié
    Pour rajouter de la pub adsense sur son site.

    Voici le code :
    [== Indéfini ==]
    function google_adsense_func($atts, $content = null) {
    	extract( shortcode_atts( array(
       
        'client'		=> '', 
    	'slot'		=> '', 
    	'format'	=> 'auto'
    	
    	), $atts ) );	
    		
    		$s='';
    		$s.= '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- Annonce -->
    <ins class="adsbygoogle"
         style="display:block"
         data-ad-client="'.$client.'"
         data-ad-slot="'.$slot.'"
         data-ad-format="'.$format.'"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>';
    
    
    	return $s;
    		
    }
    add_shortcode('google_adsense', 'google_adsense_func');	
    

    Pour afficher :
    [== Indéfini ==]
    [google_adsense client='ca-pub-xxx' slot='xxx' ]
    

    Je vais en faire un plugin rapidement de toutes ces fonctions, on pourra en discuter.
  • Merci Jéjé pour tous ces shortcodes.
    Un plugin serait intéressant, pour les regrouper, mais ça ne remplacera pas une page dans le Wiki pour recenser les shortcodes existants.
    Je pense que les deux seraient bien utiles.
  • Salut,

    J'ai installé SPXShortCodes sur un PluXml 5.6 et si je l'active, plus aucune page ne s'affiche !

    Pas de message d'erreur, rien : juste page blanche !

    Si je désactive le pluggin, le site revient !

    Je suppose qu'il y a quelque chose qui ne lui plait pas ... mais je suis incapable de dire quoi !
  • Si tu as visualwizard il ne faut pas linstaller..
  • ah, c'est ça : effectivement, c'est sur le site sur lequel j'ai ViualWizard !

    Je n'avais pas vu que SPXShortCodes n'est pas compatible avec ViusalWizard : c'est indiqué quelque part ?
  • Avec visualwizard tu as les memes fonctions que spxshortcotes.

    C'est indiqué ici
  • août 2017 modifié
    OK.

    Je ne veux pas être pénible mais :
    Pas besoin d'installer spxshortcodes,
    Ce n'est pas pareil que ViusalWizard n'est pas compatible avec SPXShortCodes ! ;)
  • @ComputingFroggy

    Bien vu j'ai corrigé. Ce n'est pas être pénible, ca va plutôt dans le bon sens(clair et précis). Merci.

    ++

    jéjé
  • salut,

    je suis en train de tester ton plugin. je pense l'utiliser pour éviter de réécrire la mise en forme de certaines pages.
    avec l'utilisation de w3css https://www.w3schools.com/w3css/default.asp ça risque de m'être utile.
    la prise en main n'est pas évidente. je pense qu'il serait bien d'avoir plus d'aide et d'exemples (sur un site ou directement dans l'aide du plugin).
    il y a quelques exemples dans la discussion, ça serait sympa de les regrouper.
  • Je ne suis pas sûr d'avoir compris, niqnutn, mais si c'est pour avoir un exemple simple de création d'un shortcode dans un plugin, tu peux trouver un exemple dans le plugin de test, que j'ai mis à jour il y a peu en y ajoutant un shortcode.

    Comme son nom l'indique, ce plugin sert soit à faire des tests, soit à servir d'exemple pour la création d'un plugin et de son shortcode associé.

    D'autre part, je t'appuie dans ta demande pour le regroupement des shortcodes existants, quelque part dans le wiki. Ce serait vraiment utile, car on perd plein de méthodes intéressantes, qui sont cachées et éparpillées dans les pages spxshortcodes du forum.
  • Francis a écrit:

    D'autre part, je t'appuie dans ta demande pour le regroupement des shortcodes existants, quelque part dans le wiki. Ce serait vraiment utile, car on perd plein de méthodes intéressantes, qui sont cachées et éparpillées dans les pages spxshortcodes du forum.

    100% d'accord avec ça, les shortcodes méritent pour moi un forum dédié (carrément). On pourrait discuter de telle ou telle fonction. A voir avec Stéphane.
  • niqnutnniqnutn Member
    janvier 2018 modifié
    Salut,

    Je rencontre un petit avec spxshortcodes.
    spxshortcodes - Version 1.3 (28/10/2013) (je n'ai pas trouvé de versions plus récentes)

    j'ai créé une galerie
    [== PHP ==]
    [galerie directory="data/medias/partage/" urlPage="index.php?static3/test"][/galerie]
    

    dans config.php
    [== Indéfini ==]
    function galerie_shortcode ($atts , $content = null ) {
    	$atts = shortcode_atts(
    		array(
    			'directory' => 'data/medias/partage/', 
    			'urlPage' => 'a', 
    		),
    		$atts,
    		'galerie'
    	);
    ...
    
    Je ne récupère pas "index.php?static3/test" mais "a".

    J'ai bien galéré mais si j'enlève les majuscules ( urlPage >> urlpage ) la fonction fonctionne correctement et je récupère "index.php?static3/test"
    Est-ce que je fais erreur ou c'est lié au plugin ou bien au shortcode ?
  • je-evrardje-evrard Member
    janvier 2018 modifié
    Bonjour,

    Pour extraire des variables venant des shortcodes il faut faire ça :
    [== Indéfini ==]
    function galerie_shortcode ($atts , $content = null ) {
    	global $plxShow;
    	// variable par default
    	extract(shortcode_atts(array(
    		'directory' => '',
     		'url' => '',
    		
     	), $atts));
    
    	// la tu récupère $directory et $url pour traitement
    	// exemple d'envoie vers un hook et un objet $o
    
    	$o= array();
    	$o["directory"]=$directory;
    	$o["url"]=$url;
    	
    	// que tu peux envoyer au hook que tu veux ex: 
    
    	return $plxShow->callHook('xxxx',$o);
    
    
    
    }
    
    add_shortcode('galerie', 'galerie_shortcode');
    
    

    pour l'usage :
    [== Indéfini ==]
    [galerie_shortcode directory="toto" url"myurl" ]
    

    Pour l'exemple précédent il faut que le plugin est cette fonction pour que ça fonctionne :
    [== Indéfini ==]
    public function __construct($default_lang) {
        $this->addHook('xxxx', 'xxxx');
    }
    
    public function xxxx($o) {
    		....
        return ce que tu veux ;
    }
    

    Mais le plus simple est peut-ête de savoir ce que veux tu faire exactement et avec quel plugin ?

    ++ jéjé
  • merci pour ta réponse.
    je ne sais pas ce que tu entends par plugin mais je veux juste utiliser spxshortcodes et me faire une fonction perso pour afficher des galeries (ça répond à la question?).
    du coup, pas besoin de passer par un hook ou quelque chose de compliqué.

    je cherche déjà à récupérer les valeurs du shortcode pour les afficher.
  • comme ça alors

    [== Indéfini ==]
    function galerie_shortcode ($atts , $content = null ) {
    	global $plxShow;
    	// variable par default
    	extract(shortcode_atts(array(
    		'directory' => '',
     		'url' => '',
    		
     	), $atts));
    
    	// la tu récupère $directory et $url pour traitement
    	
    
    
    }
    
    add_shortcode('galerie', 'galerie_shortcode');
    
  • trentaneltrentanel Member
    février 2018 modifié
    Déplacé dans la rubrique shortcodes.
    http://forum.pluxml.org/viewtopic.php?id=6216
Connectez-vous ou Inscrivez-vous pour répondre.