begin process at 2010 03 19 12:56:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Xml

 > [PHP5] LIMÉA XSLT TEMPLATE ENGINE

[PHP5] LIMÉA XSLT TEMPLATE ENGINE


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Xml Classé sous :xslt, xml, template, xhtml, standard Niveau :Initié Date de création :25/07/2006 Date de mise à jour :26/07/2006 19:09:48 Vu / téléchargé :5 376 / 272

Auteur : lumesh

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

LXTE est un script mettant en relation un modèle de style XSLT avec un fichier de données XML.
Il s'appui sur le DOM de PHP5.

1) Principe de fonctionnement

Vous commencez votre site, vous concevez la page d'accueil, celle-ci, pour rester original, s'appelera 'index.php'.
Cette page se compose de 2 éléments: un contenu et une 'interface publique'.
Le contenu, statique ou dynamique, est construit par votre code PHP, sa mise en page sera construite par un 'template' ou 'modele'.
Cette classe, documentée, va vous permettre de faire tout ceci très simplement. D'un coté votre page 'index.php' qui construira les données et de l'autre 'index.xhtml' qui sera votre 'modele d'interface'.

2) En détail

LXTE va, par ses fonctionnalités, va vous permettre de construire un fichier XML regroupant les différentes informations qui seront affichées sur votre page. Ce fichier XML, associé à une feuille de style de type XSLT, sera mis en forme puis renvoyé au naviguateur 'transformé'. Le naviguateur recevra du code XHTML1.1 Strict.
LXTE intègre aussi un système de cache pour eviter de devoir reconstruire le fichier de données XML à chaque chargement de votre page 'index.php' par ses visiteurs.

3) Et la suite ..

Dans le zip vous trouverez un exemple concret, une page PHP affichant diverses informations dans votre naviguateur avec en son contenu, un script exposant toutes les fonctionnalités de LXTE.
Si vous avez des questions au sujet de la synthaxe XML, XSLT, CSS, de nombreuses documentations sont accessibles sur le net.
Au sujet du script n'hesitez pas, exprimez vous :)

Source

  • INDEX.PHP - Fichier principal gérant les données à afficher
  • <?php
  • $pageCopyright = '©2006 Christophe LEMOINE';
  • $pageTitle = 'Exmple concret - Une liste d\'articles du 2eme au 7eme';
  • $pageKeywords = 'xml,xslt,xsl,super,titre';
  • $pageDescription = 'Une liste d\'articles du 2eme au 7eme';
  • require_once ('class/class.template.php');
  • $xslPath = './tpl/default';
  • $xmlFileName = basename ($_SERVER['PHP_SELF'], '.php');
  • $t = new TemplateXSLT (
  • $xmlFileName, // nom de cette page PHP
  • './', // chemin d'accès au fichier XML
  • $xslPath, // chemin d'accès au modèle XSLT (.xsl)
  • false, // true = forcer à recréer le cache, false = gestion utomatique
  • 3600 // delai en secondes entre chaque recréation du cache
  • );
  • if (!$t->cached) // si le cache n'est pas utilisé alors on le recréé
  • {
  • $t->Open (); // préparation du document
  • $t->appendElement ('tplpath', ($xslPath.(substr ($xslPath, strlen ($xslPath), 1) == '/' ? '' : '/')));
  • $t->appendElement ('url', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  • $t->appendElement ('generator', 'Liméa XSLT Template Engine');
  • $t->appendElement ('copyright', $pageCopyright);
  • $t->appendElement ('title', $pageTitle);
  • $t->appendElement ('keywords', $pageKeywords);
  • $t->appendElement ('description', $pageDescription);
  • $t->appendComment ('Construction de la liste des articles');
  • $t->loadPluginFunction ('appendArticles', null);
  • $t->Close (); // ne jamais oublier! enregistre les modifictions apportées
  • }
  • $t->ShowXHTML (); // retourne le modèle XSL sous forme d'une page XHTML
  • ?>
  • STYLE_INDEX.XSL - Le modèle XSL de la page à afficher
  • <?xml version="1.0" encoding="UTF-8"?>
  • <xsl:stylesheet
  • version="1.0"
  • xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  • <xsl:output
  • encoding="{_OUTPUT_ENCODING_}"
  • indent="yes"
  • method="xml"
  • doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  • doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
  • <xsl:template match="/">
  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <head>
  • <meta http-equiv="content-type" content="text/xml, charset={_OUTPUT_ENCODING_}"/>
  • <title><xsl:value-of select="page/title"/></title>
  • <meta name="keywords" content="{page/keywords}"/>
  • <meta name="description" content="{page/description}"/>
  • <meta name="author" lang="fr" content="Christophe LEMOINE"/>
  • <meta name="reply-to" content="lemoine.christophe@yahoo.fr (Christophe LEMOINE)"/>
  • <meta name="identifier-url" content="{page/url}"/>
  • <meta name="copyright" content="{page/copyright}"/>
  • <meta name="generator" content="{page/generator}"/>
  • <meta name="date" content="{page/infos/created}"/>
  • <meta name="robots" content="all"/>
  • <meta name="revisit-after" content="7"/>
  • <link href="{page/tplpath}style.css" rel="stylesheet" type="text/css"/>
  • </head>
  • <body>
  • <h2><xsl:value-of select="page/title"/></h2>
  • <p>Le fichier XML comporte 10 articles mais pourtant votre template XSLT en affiche que 6, du 2 au 7 compris!</p>
  • <xsl:for-each select="page/articles/article">
  • <xsl:variable name="num">
  • <xsl:number level="any" from="/page/articles"/>
  • </xsl:variable>
  • <xsl:if test="$num &gt; 1 and $num &lt; 8">
  • <p class="article">
  • <div class="maxi">
  • <xsl:value-of select="title"/>
  • </div>
  • <div class="mini">
  • écrit par <b><xsl:value-of select="author"/></b>
  • le <b><xsl:value-of select="date"/></b>,
  • lu <b><xsl:value-of select="numread"/></b> fois
  • </div>
  • <div class="desc">
  • <xsl:value-of select="description"/><br />
  • </div>
  • </p>
  • </xsl:if>
  • </xsl:for-each>
  • </body>
  • </html>
  • </xsl:template>
  • </xsl:stylesheet>
  • XSLT_PLUGIN.INC - Le fichier contenant la fonction perso pour afficher une liste d'articles
  • <?php
  • class xslt_plugin
  • {
  • function __construct ()
  • {}
  • function __destruct ()
  • {}
  • function appendArticles ($xmlObj, $param)
  • {
  • $artlist = array (
  • array ('titre 1', 'description 1', '26/07/2006', 'auteur 1', 5),
  • array ('titre 2', 'description 2', '26/07/2006', 'auteur 2', 1),
  • array ('titre 3', 'description 3', '26/07/2006', 'auteur 3', 16),
  • array ('titre 4', 'description 4', '26/07/2006', 'auteur 4', 9),
  • array ('titre 5', 'description 5', '26/07/2006', 'auteur 5', 4),
  • array ('titre 6', 'description 6', '26/07/2006', 'auteur 6', 0),
  • array ('titre 7', 'description 7', '26/07/2006', 'auteur 7', 2),
  • array ('titre 8', 'description 8', '26/07/2006', 'auteur 8', 1),
  • array ('titre 9', 'description 9', '26/07/2006', 'auteur 9', 52),
  • array ('titre 10', 'description 10', '26/07/2006', 'auteur 10', 7),
  • );
  • $nodes = $xmlObj->getElementsByTagName ('page');
  • foreach ($nodes as $node)
  • {
  • $articles = $xmlObj->createElement (utf8_encode ('articles'));
  • foreach ($artlist as $a)
  • {
  • $artone = $xmlObj->createElement (utf8_encode ('article'));
  • $a_titre = $xmlObj->createElement (utf8_encode ('title'), utf8_encode ($a[0]));
  • $artone->appendChild ($a_titre);
  • $a_description = $xmlObj->createElement (utf8_encode ('description'), utf8_encode ($a[1]));
  • $artone->appendChild ($a_description);
  • $a_date = $xmlObj->createElement (utf8_encode ('date'), utf8_encode ($a[2]));
  • $artone->appendChild ($a_date);
  • $a_author = $xmlObj->createElement (utf8_encode ('author'), utf8_encode ($a[3]));
  • $artone->appendChild ($a_author);
  • $a_numread = $xmlObj->createElement (utf8_encode ('numread'), utf8_encode ($a[4]));
  • $artone->appendChild ($a_numread);
  • $articles->appendChild ($artone);
  • }
  • $node->appendChild ($articles);
  • }
  • }
  • }
  • ?>
INDEX.PHP - Fichier principal gérant les données à afficher

<?php

    $pageCopyright = '©2006 Christophe LEMOINE';
    $pageTitle = 'Exmple concret - Une liste d\'articles du 2eme au 7eme';
    $pageKeywords = 'xml,xslt,xsl,super,titre';
	$pageDescription = 'Une liste d\'articles du 2eme au 7eme';

	require_once ('class/class.template.php');

	$xslPath = './tpl/default';
	$xmlFileName = basename ($_SERVER['PHP_SELF'], '.php');
	$t = new TemplateXSLT (
				$xmlFileName, // nom de cette page PHP
				'./', // chemin d'accès au fichier XML
				$xslPath, // chemin d'accès au modèle XSLT (.xsl)
				false, // true = forcer à recréer le cache, false = gestion utomatique
				3600 // delai en secondes entre chaque recréation du cache
				);
	if (!$t->cached) // si le cache n'est pas utilisé alors on le recréé
	{
		$t->Open (); // préparation du document
		$t->appendElement ('tplpath', ($xslPath.(substr ($xslPath, strlen ($xslPath), 1) == '/' ? '' : '/')));
		$t->appendElement ('url', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
		$t->appendElement ('generator', 'Liméa XSLT Template Engine');
		$t->appendElement ('copyright', $pageCopyright);
		$t->appendElement ('title', $pageTitle);
		$t->appendElement ('keywords', $pageKeywords);
		$t->appendElement ('description', $pageDescription);
		$t->appendComment ('Construction de la liste des articles');
		$t->loadPluginFunction ('appendArticles', null);
		$t->Close (); // ne jamais oublier! enregistre les modifictions apportées
	}

	$t->ShowXHTML (); // retourne le modèle XSL sous forme d'une page XHTML

?>

STYLE_INDEX.XSL - Le modèle XSL de la page à afficher

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output
		encoding="{_OUTPUT_ENCODING_}"
		indent="yes"
		method="xml"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml">
			<head>
				<meta http-equiv="content-type" content="text/xml, charset={_OUTPUT_ENCODING_}"/>
				<title><xsl:value-of select="page/title"/></title>
				<meta name="keywords" content="{page/keywords}"/>
				<meta name="description" content="{page/description}"/>
				<meta name="author" lang="fr" content="Christophe LEMOINE"/>
				<meta name="reply-to" content="lemoine.christophe@yahoo.fr (Christophe LEMOINE)"/>
				<meta name="identifier-url" content="{page/url}"/>
				<meta name="copyright" content="{page/copyright}"/>
				<meta name="generator" content="{page/generator}"/>
				<meta name="date" content="{page/infos/created}"/>
				<meta name="robots" content="all"/>
				<meta name="revisit-after" content="7"/>
				<link href="{page/tplpath}style.css" rel="stylesheet" type="text/css"/>
			</head>
			<body>
				<h2><xsl:value-of select="page/title"/></h2>
				<p>Le fichier XML comporte 10 articles mais pourtant votre template XSLT en affiche que 6, du 2 au 7 compris!</p>
				<xsl:for-each select="page/articles/article">
					<xsl:variable name="num">
			        	<xsl:number level="any" from="/page/articles"/>
			        </xsl:variable>
			        <xsl:if test="$num &gt; 1 and $num &lt; 8">
			        	<p class="article">
							<div class="maxi">
								<xsl:value-of select="title"/>
							</div>
							<div class="mini">
								écrit par <b><xsl:value-of select="author"/></b> 
								le <b><xsl:value-of select="date"/></b>, 
								lu <b><xsl:value-of select="numread"/></b> fois
							</div>
							<div class="desc">
								<xsl:value-of select="description"/><br />
							</div>
						</p>
					</xsl:if>
				</xsl:for-each>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

XSLT_PLUGIN.INC - Le fichier contenant la fonction perso pour afficher une liste d'articles

<?php

	class xslt_plugin
	{
	  
		function __construct ()
		{}
	
		function __destruct ()
		{}
		
		function appendArticles ($xmlObj, $param)
		{
		  	$artlist = array (
		  		array ('titre 1', 'description 1', '26/07/2006', 'auteur 1', 5),
		  		array ('titre 2', 'description 2', '26/07/2006', 'auteur 2', 1),
		  		array ('titre 3', 'description 3', '26/07/2006', 'auteur 3', 16),
		  		array ('titre 4', 'description 4', '26/07/2006', 'auteur 4', 9),
		  		array ('titre 5', 'description 5', '26/07/2006', 'auteur 5', 4),
		  		array ('titre 6', 'description 6', '26/07/2006', 'auteur 6', 0),
		  		array ('titre 7', 'description 7', '26/07/2006', 'auteur 7', 2),
		  		array ('titre 8', 'description 8', '26/07/2006', 'auteur 8', 1),
		  		array ('titre 9', 'description 9', '26/07/2006', 'auteur 9', 52),
		  		array ('titre 10', 'description 10', '26/07/2006', 'auteur 10', 7),
			  );
			$nodes = $xmlObj->getElementsByTagName ('page');
			foreach ($nodes as $node)
			{
				$articles = $xmlObj->createElement (utf8_encode ('articles'));
				foreach ($artlist as $a)
				{
					$artone = $xmlObj->createElement (utf8_encode ('article'));
					$a_titre = $xmlObj->createElement (utf8_encode ('title'), utf8_encode ($a[0]));
					$artone->appendChild ($a_titre);
					$a_description = $xmlObj->createElement (utf8_encode ('description'), utf8_encode ($a[1]));
					$artone->appendChild ($a_description);
					$a_date = $xmlObj->createElement (utf8_encode ('date'), utf8_encode ($a[2]));
					$artone->appendChild ($a_date);
					$a_author = $xmlObj->createElement (utf8_encode ('author'), utf8_encode ($a[3]));
					$artone->appendChild ($a_author);
					$a_numread = $xmlObj->createElement (utf8_encode ('numread'), utf8_encode ($a[4]));
					$artone->appendChild ($a_numread);
					$articles->appendChild ($artone);
				}
				$node->appendChild ($articles);
			}
		}
	  
	}

?>

 Conclusion

Liméa XSLT Template Engine est sous licence Creative Commons.
http://creativecommons.org/licenses/by-nc -sa/2.0/fr/

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 juillet 2006 18:02:04 :
Ajout d'un exemple concret.
26 juillet 2006 19:09:48 :
v0.1.1 - Choix possible du système d'encodage (dans la limite supportée par la librairie ICONV)

 Sources du même auteur

Source avec Zip Source avec une capture PHP4 - TREEVIEW POUR LES DOSSIERS
Source avec Zip GERER SES FORMULAIRES
Source avec Zip GÉNÉRATEUR DE FLUX RSS 2.0
Source avec Zip CLASSE POUR LES TEMPLATES TOUTE SIMPLE
CALENDRIER TOUT SIMPLE

 Sources de la même categorie

Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip Source avec une capture XML MAPPING TO CLASS OBJECTS / CHARGEMENT / PARSING / MODIFI... par aKheNathOn
Source avec Zip Source avec une capture VIEWER POUR JALBUM SKIN CHAMELEON LIVRE D'OR par ym_trainz
Source avec Zip Source avec une capture PARSEUR XML par petifa
FICHIER XML => TABLEAU ASSOCIATIF par durealex

 Sources en rapport avec celle ci

Source avec Zip AJOUT D'UN RENDEZ-VOUS DANS UN CALENDRIER EXCHANGE 2003 par SachaWolf
Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip MOTEUR DE TEMPLATE XSL UTILISANT LA CLASSE XSLTPROCESSOR ET ... par codefalse
Source avec Zip [PHP5] XML MENU par malalam
Source avec Zip SITEMAP AU STANDARD NNS 1.0 par gorgonite

Commentaires et avis

Commentaire de malalam le 26/07/2006 11:01:08 administrateur CS

Hello,

c'est pas mal, très bonne idée, bien codée.
Mais ce que je trouve dommage, c'est qu'on se retrouve à créer un template XSL comme un autre XSL. Pour les débutants, ce n'est pas idéal de balancer des value-of select...et cie.
Ton système gagnerait en ergonomie s'il permettait d'utiliser des variables plus habituelles, comme {COMMENT_SECTION} par exemple. Et des balises prédéfinies.
Ensuite, tu fixes l'encodage, ce qui est dommage. Ce devrait être une option de ta classe.
Précise aussi que ta classe nécessite XSLTProcessor, parce que si DOM est souvent chargé sur un serveur PHP5, c'est moins souvent le cas de XSLTProcessor.
Sinon, je n'ai pas compris à quoi servait ton xslt_plugin, mais bon, je n'ai pas vraiment eu le temsp d'approfondir ton code.

Pas mal du tout, donc :-)

Commentaire de lumesh le 26/07/2006 16:22:48

Pour l'encodage, LXTE gere le UTF8, tu lui mets en entré ce que tu veux et il te ressort de l'utf-8. Couplé a une bonne identification de l'encodage par le naviguateur plus aucun probleme ne se pose!

Pour la simplification des value select, c'est une bonne idée. Cela m'embete de toucher au modele XSLT, car à la base il devait etre totalement independant.

Cette independance couplé au fichier xslt_plugin sont la pour permettre a tout un chacun de creer son propre site web. Ce n'est pas un moteur de template pur, LXTE permet de construire un site web en créant des interface qui afficheront les informations de bases et les infos custum.

Exemple, tu fais ton site via LXTE, dans ce site tu vx integrer un systeme d'articles, simple, tu codes ta fonction PHP dans le fichier xslt_plugin, et la gestion de l'a&ffichage (ordre d'apparence, nombre d'article dans une page, etc) tu la frabrique via le modele XSLT !

LXTE fait parti d'un esemble de fonctionnalité qui seront regroupée au sein d'un framework utilisable pour la conception sites (portails, blog, galleries photos, etc !)

LXTE est un peu le core du framework.
Plus tard des fonction predefinie, permetteront d'acceder a telle ou telle fonctionnalité, des constantes permetteront de connaitre telle ou telle informations.

LXTE est un début. Il ne sera pas fait pour un debutant en creation de site web mais pour des developpeurs PHP souhaitant realisé un site dynamique respectant les standards sans toutefois tout devoir creer de A a Z. En clair ceci est la base d'un systeme propre et extremement modulaire!

Commentaire de lumesh le 26/07/2006 16:25:11

Ces prochains jour je construirai un exemple concret en me basant sur la version actuelle de LXTE, soit la 0.1beta1.
Cet exemple sera contenu dans le zip si place il y a sinon sera dans la partie code de cette fiche.

Commentaire de malalam le 26/07/2006 17:09:13 administrateur CS

Hello,

on reprend...je connais plutôt bien le XML et XSL, pars de ce principe :-)
Donc, concernant l'encodage, ma question était : et si j'ai envie de passer en ISO-8859-1 ... ? Par exemple ?

Ensuite, mon idée n'était pas de toucher au XSL (il faut garder ses possibilités immenses), mais de coupler ça au système de templating habituel.

Ok, le xslt_plugin est là pour jouert avec registerPHPFunctions, quoi.

Pour l'idée d'un framework, ok...bien :-) Mais y a de la concurrence. Si tu ne connais pas, vas jeter un oeil à XMLRad.

Commentaire de lumesh le 26/07/2006 18:18:05

pour l'encodage je regarde ca, no pb!
Pour le systeme de templating je me penche sur le principe, mais pour t'avouer, j'ai beaucoup de mal à realiser un parser qui gererai des conditions, des boucles et etc! donc a voir, je conserve ton idee.

XMLRad .. je ne connaissais pas et effectivement, ca mal l'air plutot exelent!

Merci pour tes remarques. Si tu as d'autres idees, reproches n'hesite pas.

Commentaire de racing66 le 05/01/2007 19:24:16

Je trouve cette source très intéressante ! Bravo !

Cependant, j'aurais juste une petite question :

Comment faîtes-vous pour gérer un sytème de gagarit de pages pour l'ensemble d'un site avec ? Pour avoir un structure de base unique.... Par exemple : header, footer, menu, ...

Merci...

RaCing66

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Aidez moi svp (XML-->XSLT---->php ) [ par aziza_net ] bonjour ... voila : je travail sur des etats (les etats d'impression) sous windows avec crystal report... maintenant je dois travailler 1 partie de m php et xslt [ par taita1 ] salut,je voudrais savoir comment faire appel à un fichier xsl à partir de php..car j'ai fais des recherches, voici ce que j'ai trouvé comme exemple:&l aide sur les problemes de xsl [ par jobnet ] j'ai suivi les étapes de configuration du xsl et quelque chose de sablot mais le problèmes est le même 'Call to undefined function xslt_create()voila Lecture à partir d'un lien hypertexte d'une page XML transformée en XSLT [ par grijalvas ] Bonjour, J'ai réalisé une page XML. Je l'ai transformée en informations lisibles par le navigateur en créant la page XSLT(sous-ensemble du langage XS xml et php [ par agbebe ] salut !!!voila, je voudrais savoir que lorsqu'on utilise un fichier xml on a plus besoin de base de données pour stocker les infos ???dans tous les ca Moteur de recherche PHP4 / XML [ par globule ] Bonjour, Je suis à la recherche d'un moteur de recherche compatible PHP4 qui utiliserait les données d'un fichier XML (à la place d'une base de donn Question templates [ par astuces_jeux ] Bonjour,J'ai remarqué que l'utilisation de la class fasttemplate est compliquée. Alors je voulais savoir si on ne pouvait pas faire ça simple : foncti Supprimer une ligne XML [ par alphacrash ] Salut !Voici mon problème, je souhaite supprimer une ligne dans un fichier XML, j'ai ce type de fichier:&lt;?xml version="1.0" encoding="UTF-8"?&gt;&l Comment faire un site web ? [ par codefalse ] Bonjour à tous.Aujourd'hui, une question particulièrement intéressante. Elle peux paraître absurde au premier abord, mais vous allez voir que non.Comm [Apache] RewriteRule : je suis perdu [ par Epoc22 ] Bonjour bonjour, C'est la première fois que je touche au mod_rewrite d'Apache (avec les conditions de reécriture et tout) et là, je pête un câble  Voy


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,936 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales