Plugin MyCategoryIF

Ce petit plugin permet de tester sur plusieurs catégories. Il met pour cela à disposition le tag de template de type block <tpl:MyCategoryIf></tpl:MyCategoryIf>. Il s'utilise dans les mêmes contextes que le tag de dotclear 2 <tpl:CategoryIf></tpl:CategoryIf>.

Exemples d'utilisation:

<tpl:MyCategoryIf url="cat-1,cat-2">
<p>Ce texte ne s'affiche que si l'url de la catégorie testée est
cat-1 ou cat-2</p>
</tpl:MyCategoryIf>
<tpl:MyCategoryIf url="!cat-1,cat-2">
<p>Ce texte ne s'affiche que si l'url de la catégorie testée est
différent de cat-1 et cat-2</p>
</tpl:MyCategoryIf>
<tpl:MyCategoryIf url="cat-1,cat-2" has_entries="1">
<p>Ce texte ne s'affiche que si l'url de la catégorie testée est
cat-1 ou cat-2 et si elle possède des billets</p>
</tpl:MyCategoryIf>

Télécharger le Plugin MyCategoryIf :

plugin-myCategoryIf-0.1.zip

Code du fichier _public.php du plugin :

<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of Dotclear 2.
#
# Copyright (c) 2003-2008 Olivier Meunier and contributors
# 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 ------------------------------------
if (!defined('DC_RC_PATH')) { return; }

# Add tpl:MyCategoryIf
$GLOBALS['core']->tpl->addBlock('MyCategoryIf',array('tplMyCategoryIf','MyCategoryIf'));

class tplMyCategoryIf
{
/*dtd
<!ELEMENT tpl:MyCategoryIf - - -- tests on current entry -->
<!ATTLIST tpl:MyCategoryIf
url CDATA #IMPLIED -- category has given url
has_entries (0|1) #IMPLIED -- post is the first post from list (value : 1) or not (value : 0)
>
*/
public static function MyCategoryIf($attr,$content)
{
$if = array();
$operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&';

if (isset($attr['url'])) {
$cats_if = array();
$compar_cat_op = '==';
$cats_if_op = '||';

$url = addslashes(trim($attr['url']));
if (substr($url,0,1) == '!') {
$url = substr($url,1);
$compar_cat_op = '!=';
$cats_if_op = '&&';
}
$urls = explode(",", $url);

foreach ($urls as $k => $url)
{
$cats_if[] = '($_ctx->categories->cat_url '.$compar_cat_op.' "'.$url.'")';
}
$if[] = '('.implode(' '.$cats_if_op.' ',$cats_if).')';
}

if (isset($attr['has_entries'])) {
$sign = (boolean) $attr['has_entries'] ? '>' : '==';
$if[] = '$_ctx->categories->nb_post '.$sign.' 0';
}

if (!empty($if)) {
return '<?php if('.implode(' '.$operator.' ',$if).') : ?>'.$content.'<?php endif; ?>';
} else {
return $content;
}
}

protected function getOperator($op)
{
switch (strtolower($op))
{
case 'or':
case '||':
return '||';
case 'and':
case '&&':
default:
return '&&';
}
}
}
?>