Dotclear

Vous n'êtes pas identifié(e).

Annonce

#1 2013-12-11 16:23:55

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

##########MACRO#0#

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

#2 2013-12-11 21:42:57

nikrou
Membre
Inscription : 2007-10-02
Site Web

Re : ##########MACRO#0#

Jean-Michel a écrit :

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

#3 2013-12-11 21:46:33

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : ##########MACRO#0#

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 = \'&nbsp;\';} '.
		'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

#4 2013-12-12 07:32:38

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : ##########MACRO#0#

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

#5 2013-12-12 08:03:11

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : ##########MACRO#0#

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

#6 2013-12-12 10:26:12

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : ##########MACRO#0#

Merci pour ta réponse. Effectivement l'insertion d'un retour à la ligne enlève l'affichage de #######MACRO#0#.

Hors ligne

#7 2013-12-12 10:48:13

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : ##########MACRO#0#

La 2.6.2 corrigera le problème.


Dyslexics have more fnu!

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map