PHP Classes

File: htdocs/class/smarty/xoops_plugins/function.block.php

Recommend this page to a friend!
  Classes of Michael Beck   Xoops 2.5   htdocs/class/smarty/xoops_plugins/function.block.php   Download  
File: htdocs/class/smarty/xoops_plugins/function.block.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Xoops 2.5
Modular content management publication system
Author: By
Last change: Merge pull request #540 from mambax7/feature/Smarty_2.6.31

Smarty 2.6.31
Date: 6 years ago
Size: 3,989 bytes
 

Contents

Class file image Download
<?php

// Author: Trabis
// URL: http://www.xuups.com
// E-Mail: lusopoemas@gmail.com
// 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;
}