Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Pages : 1
Bonsoir,
Dans un billet technique où j'explique une astuce à réaliser sous Dotclear 2, j'ai plusieurs blocs de code (/// le code ///). Tous affichent le code php mais quand un bloc contient du html et balises Dotclear du genre :
<ul>
<li{{tpl:CategoryIfCurrent}}><p class="fr"><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></p> <p class="en">{{tpl:CategoryDescription}}</p></li>
</ul>
J'ai le droit à un joli ##########MACRO#0# côté public.
Que puis-je faire ?
Hors ligne
Que puis-je faire ?
Tu peux poster un message sur le forum ! :-)
p.s: je n'arrive pas à reproduire le problème.
Je préfère être atteint de parkinson plutôt qu'alzheimer : je prefère renverser un peu de ma bière plutôt qu'oublier de la boire !
Présentez vos photos simplement avec Phyxo !
Hors ligne
Si ça peut aider, j'ai oublié de préciser j'écris en wiki et voici l'intégralité du contenu du billet en cause :
!!! Mise au point
* Dans le cadre du développement du site internet [« Shine »|http://www.carolefredericks.fr/|fr] contenant environ 150 pages répartis en une trentaine de catégorie dont 5 catégories parents, j'ai organisé la navigation avec un menu à onglets.
* Quand l'onglet est inactive, il a une couleur d'arrière plan grise.
* Quand l'onglet est active, il aura une couleur blanche afin de reprendre la couleur d'arrière plan de la zone d'affichage du contenu. Ceci quelque soit le niveau de la catégorie (parent, petit-enfant, arrière-petit-enfant,… bref au moins 4 niveaux) et son contexte de template (category ou post).
!!! Application
* Créer un fichier _public.php dans le thème actif
///
<?php
if (!defined('DC_RC_PATH')) { return; }
l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/public');
# ---> Ajouter un class .current à la catégorie parent même quand on se trouver sur une catégorie enfant (2 niveaux)
$core->addBehavior('templateBeforeBlock',array('ShineBehavior','block'));
$core->tpl->addValue('CategoryIfCurrent',array('ShineTpl','CategoryIfCurrent'));
$core->tpl->addValue('CategorySiblings',array('ShineTpl','CategorySiblings'));
class ShineBehavior
{
public static function block()
{
$args = func_get_args();
array_shift($args);
if ($args[0] == 'Categories') {
$p =
'<?php if ($core->url->type != "home") { '.
'if ($_ctx->exists("categories")) { '.
'$_ctx->current_cat_id = $_ctx->categories->cat_id; '.
'$cat_id = $_ctx->categories->cat_id; '.
'$rs = $core->blog->getCategoryParents($cat_id); '.
'$_ctx->current_cat_parent_id = $rs->isEmpty() ? 0 : (integer) $rs->cat_id;'.
'} elseif ($core->url->type != "home" && $_ctx->exists("posts")) { '.
'$_ctx->current_cat_id = $_ctx->posts->cat_id; '.
'$cat_id = $_ctx->posts->cat_id; '.
'$rs = $core->blog->getCategoryParents($cat_id); '.
'$_ctx->current_cat_parent_id = $rs->isEmpty() ? 0 : (integer) $rs->cat_id;'.
'}'.
"} ?>\n";
return $p;
}
}
}
class ShineTpl {
public static function CategoryIfCurrent($attr)
{
$ret = isset($attr['return']) ? $attr['return'] : 'current';
$ret = html::escapeHTML($ret);
$p =
'<?php if ($_ctx->exists("current_cat_id")) { '.
'if ($_ctx->categories->cat_id == $_ctx->current_cat_id || $_ctx->categories->cat_id == $_ctx->current_cat_parent_id) { '.
"echo ' class=\"".addslashes($ret)."\"'; } ".
'} ?>';
return $p;
}
public static function CategorySiblings()
{
$p =
'<?php '.
'$current_cat_id = $_ctx->current_cat_id; '.
'$cat_parent_id = $_ctx->current_cat_parent_id; '.
'if ($_ctx->exists("current_cat_id")) { '.
'if ($cat_parent_id != "0") { '.
'$rs = $core->blog->getCategoryFirstChildren($cat_parent_id); '.
'$p = \'\'; '.
'while ($rs->fetch()) { '.
'if ($rs->cat_id == $current_cat_id) { '.
'$p .= \'<a class="current" href="\'.$core->blog->url.$core->url->getBase(\'category\').\'/\'.$rs->cat_url.\'">\'.$rs->cat_title.\'</a>\'; '.
'} else { '.
'$p .= \'<a href="\'.$core->blog->url.$core->url->getBase(\'category\').\'/\'.$rs->cat_url.\'">\'.$rs->cat_title.\'</a>\'; '.
'} '.
'} '.
'} else {'.
'$rsp = $core->blog->getCategoryFirstChildren($cat_id); '.
'$p = \'\'; '.
'while ($rsp->fetch()) { '.
'$p .= \'<a href="\'.$core->blog->url.$core->url->getBase(\'category\').\'/\'.$rsp->cat_url.\'">\'.$rsp->cat_title.\'</a>\'; '.
'} '.
'} '.
'} '.
'if ($current_cat_id == false) {$p = \' \';} '.
'echo $p; '.
' ?>';
return $p;
}
}
?>
///
* Pour l'appliquer sur une liste, j'utilise le code suivant :
///
<ul>
<li{{tpl:CategoryIfCurrent}}><p class="fr"><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></p> <p class="en">{{tpl:CategoryDescription}}</p></li>
</ul>
///
Plouf…
Hors ligne
Tu as bien trouvé un bug. en attendant, tu peux contourner en insérant un retour à la ligne avant le /// qui concerne la section qui pose problème :
* Pour l'appliquer sur une liste, j'utilise le code suivant :
///
<ul>
Dyslexics have more fnu!
Hors ligne
http://dev.dotclear.org/2.0/ticket/1900
L'explication est assez siouxe : quand on met une liste de valeurs en wiki, le </ul> résultant n'est pas suivi d'un retour à la ligne, et le convertisseur wiki->xhtml s'emmêle les pinceaux car il ne retrouve pas ses petits.
Dyslexics have more fnu!
Hors ligne
Merci pour ta réponse. Effectivement l'insertion d'un retour à la ligne enlève l'affichage de #######MACRO#0#.
Hors ligne
Pages : 1
Vous n'êtes pas identifié(e).