Cloner un thème

Ductile

Cloner un thème est facile — pour peu qu’on ait pas d’appréhension à modifier du code PHP —, puisqu’il suffit de dupliquer le dossier du thème original, de changer le nom du dossier et de changer le nom du thème défini dans le fichier _define.php.

Ça peut suffire, mais ça peut ne pas parce qu’il se peut que le thème cloné ait un fichier _prepend.php et/ou un fichier _public.php contenant une ou plusieurs classes et dans ce cas là, Dotclear ne va pas aimer[1].

Dans ce cas là, il faut ouvrir et modifier ces fichiers pour changer le nom des classes définies et leurs usages, ce qui, pour certains thèmes (comme Ductile), peut devenir assez pénible vu la quantité de code.

C’est la raison pour laquelle j’ai introduit une petite modification dans les thèmes de la prochaine version 2.12 de Dotclear : l’usage des espaces de nom de PHP.

Pour faire vite, et d’ailleurs c’est applicable à n’importe quel thème publié, il suffit de définir l’espace de nom en début de fichier ; exemple pour Ductile dans les fichiers _public.php et _prepend.php :

<?php
namespace themes\ductile;

# -- BEGIN LICENSE BLOCK ---------------------------------------
# This file is part of Ductile, a theme for Dotclear
#
# Copyright (c) 2017 - Association Dotclear
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK -----------------------------------------

…

Puis d’utiliser le préfixe  \  pour les appels de fonctions statiques de Dotclear et d’utiliser la constante __NAMESPACE__ là où c’est utile. Exemple pour les appels des fonctions statiques de Dotclear :

l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/main');

…

echo
	dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
	dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js');

devient :

\l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/main');

…

echo
	\dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
	\dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js');

Et pour utiliser le nom de la classe définie dans le fichier :

$core->addBehavior('publicHeadContent',array('tplDuctileTheme','publicHeadContent'));

devient (notez le \ devant le nom de la classe) :

$core->addBehavior('publicHeadContent',array(__NAMESPACE__.'\tplDuctileTheme','publicHeadContent'));

Une fois effectuées ces modifications, le thème est candidat à un clonage plus simple car il ne sera plus utile de modifier le nom de la ou des classes définies dans le code et le code de leurs usages, il suffira simplement de modifier le nom de l’espace de nom.

Par exemple si je veux cloner le « nouveau » Ductile, il me suffira alors de dupliquer le dossier ductile, de modifier le nom du dossier, de modifier le nom du thème dans le fichier _define.php et de modifier le nom de l’espace de nom au début des fichiers _public.php et _prepend.php :

<?php
namespace themes\ductileClone;

# -- BEGIN LICENSE BLOCK ---------------------------------------
# This file is part of Ductile, a theme for Dotclear
#
# Copyright (c) 2017 - Association Dotclear
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK -----------------------------------------

…

Attention, pas de tiret ou autres caractères spéciaux dans les espaces de nom, il est du coup préférable d’utiliser un nommage de type CamelCase.

Pour ma part, les prochaines versions des thèmes que j’ai publié contiendront cette modification.

PS : Ce changement n’est pas à faire dans un fichier _config.php du thème s’il en comporte un, à moins que la propriété standalone_config du thème soit définie à true dans sa définition.

PPS : Les espaces de nom sont utilisables dès la version 5.3 de PHP, il n’y a donc aucune contre-indication à faire cette modification dès à présent.

Note

[1] Sauf si vous avez défini un autre répertoire principal pour les thèmes du blog avec about:config. Dans ce cas il se peut qu’il n’y ait aucune incidence, c’est à vérifier au cas par cas.

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/13225

Haut de page