Manuel:Modèles HTML

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:HTML templates and the translation is 89% complete.

Other languages:
English • ‎español • ‎français • ‎русский • ‎中文 • ‎日本語
Version de MediaWiki : 1.25
Gerrit change 187728

A partir de MediaWiki 1.25 , MediaWiki peut générer du contenu HTML à partir de modèles Mustache sur le serveur et sur le client. Le modèle d'analyse syntaxique côté serveur est implémenté en PHP via la classe TemplateParser , qui agit comme un conteneur de la bibliothèque lightncandy . Les modèles côté client sont pris en charge par les modules ResourceLoader de mediawiki.template* et par la bibliothèque mustache.js .

Ceci est indépendant de l'utilisation des modèles MediaWiki dans le texte wiki (comme le {{MW file}} de cet article). Ici, les modèles construisent le HTML d'une page web, et non pas le contenu wiki qui se trouve à l'intérieur.

Créer des modèles

To use HTML templates in your code, first create a Mustache template file with a .mustache file extension, for example, MyWidget.mustache. Templates should contain as little programming logic as possible so that they are easily readable and provide proper separation of concerns. If your template is part of the core MediaWiki software, put it in core's includes/templates directory. If it is part of an extension, you should create a dedicated templates directory within your extension's directory to hold it. Templates should follow the Mustache-5 specification.

Classe TemplateParser (côté serveur)

Cette classe recherche les fichiers des modèles, les lit, les compile en code PHP, et développe les balises en utilisant les données transmises afin de générer la sortie HTML. MediaWiki compile les modèles selon les besoins, et utilise le cache pour les y stocker s'il est disponible (voir la mise en cache ci-dessous). Ceci évite aux développeurs de compiler les modèles en fichiers PHP pendant le développement ou comme une étape du build, ou au serveur de les écrire dans l'arborescence des fichiers pendant les opérations.

Pour utiliser TemplateParser, créez d'abord une nouvelle instance de la classe :

$templateParser = new TemplateParser();

Si vos modèles Mustache ne sont pas dans includes/templates du coeur, vous devez fournir le chemin de leur emplacement, dans le premier paramètre du constructeur (en relatif, soit par rapport à la racine de MediaWiki, soit par rapport au répertoire du fichier qui les appelle, avec __DIR__) :

$templateParser = new TemplateParser(  __DIR__ . '/templates' );

Ensuite, vous analysez les modèles en HTML en appelant la fonction processTemplate(). Le premier paramètre pour cela est le nom de votre modèle (la partie du nom de fichier avant .mustache). Le second paramètre est un tableau contenant les valeurs utilisées par les balises Mustache de votre modèle. Par exemple,

echo $templateParser->processTemplate(
    'MyWidget',
    array(
        'username' => $user->getName(),
        'message' => 'Hello!'
    )
);

Ceci remplace toutes les instances des balises {{username}} et {{message}} du modèle Mustache "MyWidget" par les valeurs fournies, et retourne le HTML résultant. (le echo imprime simplement le HTML généré dans le contexte de sortie courant).

Comme exemple de modélisation HTML, voir includes/templates/NoLocalSettings.mustache tel qu'utilisé par includes/NoLocalSettings.php.

Mise en cache

TemplateParser essaie de mettre en cache le modèle PHP compilé. Il préfère utiliser CACHE_ACCEL (voir Manual:APC ), et se replie sur CACHE_ANYTHING (un cache d'objet général comme Memcached ou Redis, voir Manual:Caching ).

CACHE_ACCEL nécessite l'extension « apc » avec PHP 5.4 ou plus ancien, et l'extension « apcu » avec PHP 5.5+. HHVM la contient en natif.

Eléments partiels

Le cache est basé sur des clés faites à partir d'un hachage du contenu de fichier, donc si vous modifiez un fichier de modèle, le modèle compilé sera mis à jour (vous devrez éventuellement vider le cache wiki de l'interface utilisateur en utilisant ?action=purge). Néanmoins, cela ne prend pas en compte les modifications des modèles "partiels" que vous incluez avec {{>SubTemplateName}} (bogue T113095). Donc si vous modifiez un partiel, vous devez faire des modifications cosmétiques sur les modèles parents qui l'incluent, ou redamarrer votre cache.

mw.template (côté client)

Pour utiliser un modèle Mustache du côté client, ajoutez le d'abord à votre définition de module ResourceLoader  :

'ext.coolExtension.interface' => array(
	'templates' => array(
		'foo.mustache' => 'templates/foo.mustache',
	),
	'scripts' => array(
		'resources/interface.js',
	),
),

La définition du modèle ci-dessus est faite de deux parties, un chemin de fichier (templates/foo.mustache) et un alias optionnel (foo.mustache). L'alias doit être suffixé avec le nom du langage de modélisation (par exemple '.mustache') si bien qu'il connaît le compilateur à utiliser. ResourceLoader dessert automatiquement les modules Javascript mediawiki.template.xx pris en charge, donc vous n'avez rien à spécifier dans dependencies. Une fois que vous avez ajouté le modèle à votre module, vous pouvez le récupérer par JavaScript en utilisant mw.template.get():

myTemplate = mw.template.get( 'ext.coolExtension.interface', 'foo.mustache' );

Pour générer le modèle et les données sous format HTML, appelez la fonction compilée render() du modèle.

data = {
	username: mw.config.get( 'wgUserName' ),
	message: 'Hello!'
};
$html = myTemplate.render( data );

Eléments partiels

Version de MediaWiki : 1.27
Gerrit change 206490

Les éléments partiels sont aussi pris en charge du côté client. Voir https://mustache.github.io/mustache.5.html#Partials pour plus d'informations.

Voir aussi