Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonsoir,
En l'état, le contenu des fichiers suivants fonctionnent pour obtenir deux listes déroulantes permettant de faire 2 choix "Structure" et "Style". Ils sont basés sur le code partagé par pierrevg dans les précédentes messages et nettoyés pour garder l'essentiel. Nous appellerons ce basique "MyPrettyTheme". C'est une première étape ;)
_public.php
<?php
if (!defined('DC_RC_PATH')) { return; }
l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/public');
// style pour l'affichage du menu
$core->addBehavior('publicHeadContent','MyPrettyThemeStructure_publicHeadContent');
function MyPrettyThemeStructure_publicHeadContent($core)
{
$style = $core->blog->settings->themes->MyPrettyThemeStructure_style;
if (!preg_match('/^structure-fixed-1col-bottom|structure-fixed-2col-left-alternative|structure-fixed-2col-left|structure-fixed-2col-right-alternative|structure-fixed-2col-right|structure-fixed-3col-left|structure-fixed-3col-middle|structure-fixed-3col-right$/',$style)) {
$style = 'menuH';
}
$url = $core->blog->settings->themes_url.'/'.$core->blog->settings->theme;
echo '<link rel="stylesheet" type="text/css" media="screen" href="'.$url."/".$style.".css\" />\n";
}
// style pour l'affichage des saisons
$core->addBehavior('publicHeadContent','MyPrettyThemeStyle_publicHeadContent');
function MyPrettyThemeStyle_publicHeadContent($core)
{
$style = $core->blog->settings->themes->MyPrettyThemeStyle_style;
if (!preg_match('/^colour-custom|colour-classic$/',$style)) {
$style = 'Classic';
}
$url = $core->blog->settings->themes_url.'/'.$core->blog->settings->theme;
echo '<link rel="stylesheet" type="text/css" media="screen" href="'.$url."/".$style.".css\" />\n";
}
?>
_config.php
<?php
if (!defined('DC_CONTEXT_ADMIN')) { return; }
// chargement de la traduction
l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/admin');
// structure
$MyPrettyThemeStructure_styles = array(
"1 colonne" => 'structure-fixed-1col-bottom',
"2 colonnes, sidebar à gauche, bonus" => 'structure-fixed-2col-left-alternative',
"2 colonnes, sidebar à gauche" => 'structure-fixed-2col-left',
"2 colonnes, sidebar à droite, bonus" => 'structure-fixed-2col-right-alternative',
"2 colonnes, sidebar à droite" => 'structure-fixed-2col-right',
"3 colonnes, sidebar à gauche" => 'structure-fixed-3col-left',
"3 colonnes, sidebar middle" => 'structure-fixed-3col-middle',
"3 colonnes, sidebar à droite" => 'structure-fixed-3col-right'
);
if (!$core->blog->settings->themes->MyPrettyThemeStructure_style) {
$core->blog->settings->themes->MyPrettyThemeStructure_style = 'structure-fixed-1col-bottom';
}
if (!empty($_POST['MyPrettyThemeStructure_style']) && in_array($_POST['MyPrettyThemeStructure_style'],$MyPrettyThemeStructure_styles))
{
$core->blog->settings->themes->MyPrettyThemeStructure_style = $_POST['MyPrettyThemeStructure_style'];
$core->blog->settings->addNamespace('themes');
$core->blog->settings->themes->put('MyPrettyThemeStructure_style',$core->blog->settings->MyPrettyThemeStructure_style,'string','Structure',true);
$core->blog->triggerBlog();
}
echo
'<fieldset><legend>'.__('Structure').'</legend>'.
'<p class="field"><label>'.__('Display:').'</label>'.
form::combo('MyPrettyThemeStructure_style',$MyPrettyThemeStructure_styles,$core->blog->settings->themes->MyPrettyThemeStructure_style).
'</p>'.
'</fieldset>';
// style
$MyPrettyThemeStyle_styles = array(
__('Classic') => 'colour-classic',
__('Custom') => 'colour-custom',
);
if (!$core->blog->settings->themes->MyPrettyThemeStyle_style) {
$core->blog->settings->themes->MyPrettyThemeStyle_style = 'colour-classic';
}
if (!empty($_POST['MyPrettyThemeStyle_style']) && in_array($_POST['MyPrettyThemeStyle_style'],$MyPrettyThemeStyle_styles))
{
$core->blog->settings->themes->MyPrettyThemeStyle_style = $_POST['MyPrettyThemeStyle_style'];
$core->blog->settings->addNamespace('themes');
$core->blog->settings->themes->put('MyPrettyThemeStyle_style',$core->blog->settings->MyPrettyThemeStyle_style,'string','Style',true);
$core->blog->triggerBlog();
}
echo
'<fieldset><legend>'.__('Style').'</legend>'.
'<p class="field"><label>'.__('Display:').'</label>'.
form::combo('MyPrettyThemeStyle_style',$MyPrettyThemeStyle_styles,$core->blog->settings->themes->MyPrettyThemeStyle_style).
'</p>'.
'</fieldset>';
Hors ligne
Question de novice, est-il possible d'avoir des balise de type {{tpl:MyPrettyThemeStructure}} et {{tpl:MyPrettyThemeStyle}}. Cela sortirait comme code .structure-fixed-1col-bottom et .classic. Ceci afin de pouvoir créer une condition CSS pour certaines structures un peu particulières.
Si oui, comment faire ? (j'imagine que ça se déroule dans _public.php ?)
Hors ligne
Un petit up par rapport à mes questions postées en #25 et #27 ;-)
Hors ligne
La création d'une balise est documentée ici : http://fr.dotclear.org/documentation/2.0/resources/tpl
Au hasard, il faudrait faire un truc comme ça
$core->tpl->addValue('MyPrettyThemeStructure',array('tplMyPrettyTheme','MyPrettyThemeStructure'));
class tplMyPrettyTheme
{
public static function MyPrettyThemeStructure($attr)
{
return
'<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStyle_style.'; ?>';
}
}
Hors ligne
Pour ta question #25, tu peux te fier à cette page de documentation, à quelques exceptions près (il me semble que la doc sur "Afficher un message de confirmation lors de l'appui sur le bouton
" n'est pas faisable dans le cadre d'un thème).
Qu'est ce qui t'as paru différent dans le code de Pierre ?
Hors ligne
(il me semble que la doc sur "Afficher un message de confirmation lors de l'appui sur le bouton
" n'est pas faisable dans le cadre d'un thème).
SI si c'est faisable, voir le configurateur de Freshy2 par exemple (quand on enregistre la config, on a bien le message en haut de page).
Hors ligne
Merci, j'y travaille mais pour l'instant, le code me renvoie un 0 dans le code source.
Hors ligne
Dans la page about:config, je viens de voir que les paramètres (choix des listes déroulantes) que j'ai généré, ils viennent se caser dans un "bloc" thèmes avec ceux des thèmes comme "BlowUp" ou "Wilson". Pourquoi les paramètres de thèmes comme "DesignPile" ou "Palette" ne viennent pas s'y mettre ? (curiosité)
Hors ligne
Surement parce que celle qui a codé a fait ça n'importe comment ! Il faudrait que je me replonge dedans...
Mon interrogation n'avait rien contre toi ;-) (je suis même pas sûr que la documentation recommande de faire d'une façon précise mais si ça peut rester logique)
Hors ligne
Surement parce que celle qui a codé a fait ça n'importe comment ! Il faudrait que je me replonge dedans...
Non, si le thème est un peu ancien, je crois que c'est juste une histoire de version de settings, il y a sans doute un appel à
$core->blog->settings->theme
au lieu de
$core->blog->settings->system->theme
Hors ligne
Je pense que ça devrait suffire, oui :)
Hors ligne
Pour ta question #25, tu peux te fier à cette page de documentation, à quelques exceptions près (il me semble que la doc sur "Afficher un message de confirmation lors de l'appui sur le bouton
" n'est pas faisable dans le cadre d'un thème).Qu'est ce qui t'as paru différent dans le code de Pierre ?
Le code de Pierre serait écrit de cette façon :
class tplMyPrettyThemeStructure
{
public static function MyPrettyThemeStructure($attr)
{
echo '$core->blog->settings->system->theme->MyPrettyThemeStructure_style.';
}
}
au lieu de :
class tplMyPrettyTheme
{
public static function MyPrettyThemeStructure($attr)
{
return
'<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStyle_style.'; ?>';
}
}
Hors ligne
J'ai bien tenté d'assimiler cette page de la documentation mais visiblement je reste devant la porte sans avoir trouvé la clé ;)
Il me semble dans mes souvenirs que dans une des aides que m'avait donné amalgame sur ce forum, il avait assemblé le Behavior avec la création d'un tpl.
Quelqu'un pour m'aider/aiguiller en partant du code #26 ?
Hors ligne
annso a écrit :Pour ta question #25, tu peux te fier à cette page de documentation, à quelques exceptions près (il me semble que la doc sur "Afficher un message de confirmation lors de l'appui sur le bouton
" n'est pas faisable dans le cadre d'un thème).Qu'est ce qui t'as paru différent dans le code de Pierre ?
Le code de Pierre serait écrit de cette façon :
class tplMyPrettyThemeStructure { public static function MyPrettyThemeStructure($attr) { echo '$core->blog->settings->system->theme->MyPrettyThemeStructure_style.'; } }
au lieu de :
class tplMyPrettyTheme { public static function MyPrettyThemeStructure($attr) { return '<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStyle_style.'; ?>'; } }
Je t'invite à lire le paragraphe : "Démonstration de l'influence du cache des templates"
http://fr.dotclear.org/documentation/2. … rces/tpl?s[]=cache
Hors ligne
Bon, c'est pas mon code, j'ai du le piquer dans le code d'un thème ou d'un plugin présent sur le lab et bidouillé à ma sauce. Gardons en tête que je n'y connais rien en php, veux-tu ? Et comme précisé plus haut, code probablement perfectible.
Hors ligne
Bon, c'est pas mon code, j'ai du le piquer dans le code d'un thème ou d'un plugin présent sur le lab et bidouillé à ma sauce. Gardons en tête que je n'y connais rien en php, veux-tu ? Et comme précisé plus haut, code probablement perfectible.
Peu importe qui a écrit le code, je parlais du "style". J'aurai pu très bien dire le style d'écriture du code trouvé dans le thème "Ductille". Moi aussi j'y connais rien en code php, je cherche juste à créer un modèle "base" d'un configurateur de thème. En tant que novice, je cherche à savoir quel est la bonne façon d'écrire, s'il en a une (les deux sont peut-être valable).
Hors ligne
Je t'invite à lire le paragraphe : "Démonstration de l'influence du cache des templates"
http://fr.dotclear.org/documentation/2. … rces/tpl?s[]=cache
J'aurai besoin d'une réponse plus explicite pour "novice" car là, je peux comprendre mais alors pour appliquer… :'(
Hors ligne
Plop,
Je me permets de remonter le sujet :)
@ Jean-Michel, les codes en #26 sont-ils "stables" avec la dernière version de Dotclear ? Est-ce que tu as trouvé une réponse pour ta question en #27 ?
Un grand merci !
Hors ligne
Pour la question #27, la réponse est oui, il faut créer 2 balises de template dans le fichier _public.php :)
Hors ligne
Comme cela ? (J'ai bien lu les messages après #27, mais le PHP est moi...)
// Création des balises de template {{tpl:MyPrettyThemeStructure}} et {{tpl:MyPrettyThemeStyle}}
$core->tpl->addValue('MyPrettyThemeStructure',array('tplMyPrettyTheme','MyPrettyThemeStructure'));
$core->tpl->addValue('MyPrettyThemeColors',array('tplMyPrettyTheme','MyPrettyThemeColors'));
class tplMyPrettyTheme
{
public static function MyPrettyThemeStructure($attr)
{
return
'<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStructure_style.'; ?>';
}
}
class tplMyPrettyTheme
{
public static function MyPrettyThemeColors($attr)
{
return
'<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStyle_style.'; ?>';
}
}
Oups ça coince : Uncaught exception 'Exception' with message 'No valid callback for MyPrettyThemeStyle' :-/
Merci :)
Dernière modification par Mathieu M. (2012-03-23 16:15:44)
Hors ligne
Tu déclares deux fois la classe tplMyPrettyTheme et tu n'as pas appelé la balise par le bon nom :
// Création des balises de template {{tpl:MyPrettyThemeStructure}} et {{tpl:MyPrettyThemeStyle}}
$core->tpl->addValue('MyPrettyThemeStructure',array('tplMyPrettyTheme','MyPrettyThemeStructure'));
$core->tpl->addValue('MyPrettyThemeStyle',array('tplMyPrettyTheme','MyPrettyThemeStyle'));
class tplMyPrettyTheme
{
public static function MyPrettyThemeStructure($attr)
{
return
'<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStructure_style.'; ?>';
}
public static function MyPrettyThemeStyle($attr)
{
return
'<?php echo '.$GLOBALS['core']->blog->settings->themes->MyPrettyThemeStyle_style.'; ?>';
}
}
devrait aller mieux ;)
Hors ligne
L'erreur devient : Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'.
C'est grave ? :p
Hors ligne
Bah non, j'ai bêtement copié-collé le code que tu donnais au dessus sans vérifier :P
Essaie d'échapper les ' comme ça :
$GLOBALS[\'core\']
Hors ligne
Vous n'êtes pas identifié(e).