My CategoryIf - dotclear 2
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 :
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 '&&';
}
}
}
?>
Possibilité de filtrer sur plusieurs url(s) pour l'attribut "url" de tpl:MyCategoryIf.
Benoît Grelier | Luberon en Provence | PhotoBlog Aiguebrun | 2009-02-18 21:44:00 | Dotclear 2 | lien permanent
Commentaires
salut. merci pour cette modif, elle est fort pratique.
Petite question: es que cela marche pour exclure des categorie ?
ne semble pas marché...
merci
Bonjour colir
La syntaxe dans ce cas est plutôt :
avec un seul "!" au début.
la syntaxe avec !
ne semble pas marché...
merci tout de meme pour le test
fil des commentaires