Flux Atom

remihackert.net

pdf.png

Plugin MyTagIf pour Dotclear 2

aiguillage.jpg

Si vous cherchez à produire un comportement specifique fonction de la présence ou non d'un certain Tag dans la liste des Tags associés à un billet, ce plugin peut vous interessez. Ce plugin crée une balise-aiguillage du type <tpl:MyTagIf url="mon_tag"> fais ci, fais ça </tpl:MyTagIf>.

créer un répertoire myTagIf dans le répertoire plugins. et creer deux fichiers
Ce premier fichier pour le reférencement du plugin par dotclear nommé _define.php

<?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
# [url]http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[/url]
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { return; }
$this--->registerModule(
/* Name */                 "MyTagIf",
/* Description*/          "Does the tags list of a post contain....",
/* Author */                "Rémi Hackert",
/* Version */                '0.1',
/* Permissions */        'usage,contentadmin'
);
?>


puis le code suivant dans un fichier nommé  _public.php
<?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
# [url]http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[/url]
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { return; }
# Add tp: MyTagIf
$GLOBALS['core']-&gt;tpl-&gt;addBlock('MyTagIf',array('tplMyTagIf','MyTagIf'));
class tplMyTagIf
{
/*dtd
<!--ELEMENT tpl:MyTagIf - - -- tests on current entry ---->
<!--ATTLIST tpl:MyTagIf
url        CDATA    #IMPLIED    -- category has given url
-->
*/
public static function MyTagIf($attr,$content)
{
$if = array();
$operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&amp;&amp;';
if (isset($attr['url'])) {
$cats_if = array();
$compar_cat_op = '==';
$cats_if_op = '||';
$url = trim($attr['url']);
if (substr($url,0,1) == '!') {
$url = substr($url,1);
$compar_cat_op = '!=';
$cats_if_op = '&amp;&amp;';
}
$urls = explode(",", $url);
foreach ($urls as $k =&gt; $url)
{
$cats_if[] = '($_ctx-&gt;meta-&gt;meta_id '.$compar_cat_op.' "'.$url.'")';
}
$if[] = '('.implode(' '.$cats_if_op.' ',$cats_if).')';
}
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 '&amp;&amp;':
default:
return '&amp;&amp;';
}
}
}
?>

 

Utilisation

Ensuite on utilise cette balise au sein d'un boucle EntryTags par exemple dans le code du fichier de template post.html.

<tpl:Entrytags>     //boucle sur tous les Tag de ce post
   <tpl:mytagif url="mon_tag">
      afficher mon texte si le tag courant de la boucle devient égal à "mon_tag".
   </tpl:mytagif>
</tpl:Entrytags>


 

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : http://www.animals-in-motion.com/remihackert/index.php?trackback/16

Fil des commentaires de ce billet