<?php 
 
//  Author: Trabis 
//  URL: http://www.xuups.com 
//  E-Mail: [email protected] 
//  Plugin version: 1.1 
//  Release date: 06-04-2009 
//  Usage : just place <{block id=1}> inside any template or theme, replace '1' with the id of the block you want to show 
// 
//  Other options: 
//  display = 'title' -> shows just title 
//  display = 'none' -> renders the block but does not display it 
//  options = 'enter|block|options' -> overwrites block default options 
//  groups = 'enter|allowed|groups' -> overwrites block default group view permissions 
//  cache = 3600 -> overwrite cache time(in seconds) 
// 
//  Examples: 
//  <{block id=1 display="title"}>   displays just the block title 
//  <{block id=1}>                   displays just the block content 
//  <{block id=7 display="none"}>    does not display nothing but executes the block, this can go for online block or to trigger some cron block 
//  <{block id=600 groups="0|1" cache=20}>  display block just for this 2 groups and sets a cache of 20 seconds 
//  <{block id=600 options="100|100|s_poweredby.gif|0"}> displays block with diferent options 
 
/** 
 * @param $params 
 * @param $smarty 
 * 
 * @return mixed 
 */ 
function smarty_function_block($params, &$smarty) 
{ 
    if (!isset($params['id'])) { 
        return null; 
    } 
 
    $display_title = (isset($params['display']) && $params['display'] === 'title'); 
    $display_none  = (isset($params['display']) && $params['display'] === 'none'); 
    $options       = isset($params['options']) ? $params['options'] : false; 
    $groups        = isset($params['groups']) ? explode('|', $params['groups']) : false; 
    $cache         = isset($params['cache']) ? (int)$params['cache'] : false; 
 
    $block_id = (int)$params['id']; 
 
    static $block_objs; 
    if (!isset($block_objs[$block_id])) { 
        include_once XOOPS_ROOT_PATH . '/class/xoopsblock.php'; 
 
        $blockObj = new XoopsBlock($block_id); 
 
        if (!is_object($blockObj)) { 
            return null; 
        } 
 
        $block_objs[$block_id] = $blockObj; 
    } else { 
        $blockObj = $block_objs[$block_id]; 
    } 
 
    $user_groups = $GLOBALS['xoopsUser'] ? $GLOBALS['xoopsUser']->getGroups() : array(XOOPS_GROUP_ANONYMOUS); 
 
    static $allowed_blocks; 
    if (!is_array(@$allowed_blocks) || count($allowed_blocks) == 0) { 
        $allowed_blocks = XoopsBlock::getAllBlocksByGroup($user_groups, false); 
    } 
 
    if ($groups) { 
        if (!array_intersect($user_groups, $groups)) { 
            return null; 
        } 
    } else { 
        if (!in_array($block_id, $allowed_blocks)) { 
            return null; 
        } 
    } 
 
    if ($options) { 
        $blockObj->setVar('options', $options); 
    } 
 
    if ($cache) { 
        $blockObj->setVar('bcachetime', $cache); 
    } 
 
    if ($display_title) { 
        return $blockObj->getVar('title'); 
    } 
 
    $xoopsLogger = XoopsLogger::getInstance(); 
    $template    =& $GLOBALS['xoopsTpl']; 
 
    $bcachetime = (int)$blockObj->getVar('bcachetime'); 
    if (empty($bcachetime)) { 
        $template->caching = 0; 
    } else { 
        $template->caching        = 2; 
        $template->cache_lifetime = $bcachetime; 
    } 
 
    $template->setCompileId($blockObj->getVar('dirname', 'n')); 
    $tplName = ($tplName = $blockObj->getVar('template')) ? "db:{$tplName}" : 'db:system_block_dummy.tpl'; 
    $cacheid = 'blk_' . $block_id; 
 
    if (!$bcachetime || !$template->is_cached($tplName, $cacheid)) { 
        $xoopsLogger->addBlock($blockObj->getVar('name')); 
        if (!($bresult = $blockObj->buildBlock())) { 
            return null; 
        } 
        if (!$display_none) { 
            $template->assign('block', $bresult); 
            $template->display($tplName, $cacheid); 
        } 
    } else { 
        $xoopsLogger->addBlock($blockObj->getVar('name'), true, $bcachetime); 
        if (!$display_none) { 
            $template->display($tplName, $cacheid); 
        } 
    } 
    $template->setCompileId($blockObj->getVar('dirname', 'n')); 
 
    return null; 
} 
 
 |