<?php 
 
/** 
 * Smarty {json} plugin 
 * 
 * Type:       function 
 * Name:       json 
 * Date:       Apr 12, 2009 
 * Purpose:    Read JSON from file, decode and assign data to Smarty template variable 
 * Syntax:     {json file="filename.json"}: 'file' is a required parameter (URL) 
 *             Predefined additional parameters: 
 *             - assign="data": assign all JSON data to template variable $data 
 *             - obj2obj [ Boolean | default:false ]: 
 *               decodes JSON objects as either PHP associative arrays or PHP objects 
 *             - debug [ Boolean | default:false ]: print decoded data in template 
 *             Variable parameters: 
 *             {json file="filename.json" home="homepage" lang="languages"}: 
 *               assign (JSONdata)["homepage"] to template variable $home 
 *               and (JSONdata)["languages"] to $lang, 
 *               compare to: {config_load file="filename.conf" section="homepage"} 
 * Install:    Drop into the plugin directory 
 * @link       http://jlix.net/extensions/smarty/json 
 * @author     Sander Aarts <smarty at jlix dot net> 
 * @copyright  2009 Sander Aarts 
 * @license    LGPL License 
 * @version    1.0.1 
 * @param      array 
 * @param      Smarty 
 */ 
function smarty_function_json($params, &$smarty) { 
 
 
    $params['file'] = isset($params['file']) ? $params['file'] : null; 
    $params['obj2obj'] = isset($params['obj2obj']) ? $params['obj2obj'] : true; 
    $params['debug'] = isset($params['debug']) ? $params['debug'] : false; 
     
    $larConfigDir = $smarty->getConfigDir(); 
    $lstConfigDir = $larConfigDir[0]; 
 
    //echo "<pre>"; 
    //print_r($smarty->template_dir); 
    //echo "</pre>"; 
    //echo "<h1>Params</h1>"; 
    //echo "<pre>"; 
    //print_r($params); 
    //echo "</pre>"; 
    if (!is_callable('json_decode')) { 
        $smarty->_trigger_fatal_error("{json} requires json_decode() function (PHP 5.2.0+)"); 
    } 
    if (empty($params['file'])) { 
        $smarty->_trigger_fatal_error("{json} parameter 'file' must not be empty"); 
    } 
    if (isset($params['assign'], $params[$params['assign']])) { 
        $smarty->_trigger_fatal_error("{json} parameter 'assign' conflicts with a variable assign parameter (both refer to the same variable)"); 
    } 
 
    $assoc = ($params['obj2obj'] == true) ? false : true; 
    $json = trim(file_get_contents($lstConfigDir . $params['file'])); 
    $data = json_decode($json, $assoc); 
 
    /* echo "<h1>Data</h1>"; 
      echo "<pre>"; 
      print_r($data); 
      echo "</pre>"; */ 
 
    if ($params['debug'] == true) { 
        /* echo "<pre>"; 
          print_r($data); 
          echo "</pre>"; */ 
    } 
 
    unset($params['file'], $params['obj2obj'], $params['debug']); 
 
    $assign = array(); 
    foreach ($params as $key => $value) { 
        if ($key === 'assign') 
            $assign[$value] = $data; 
        else 
            $assign[$key] = $assoc ? $data[$value] : $data->$value; 
    } 
//    echo "<h1>Assign</h1>"; 
//    echo "<pre>"; 
//    print_r($assign); 
//    echo "</pre>"; 
    if (count($assign) > 0) { 
        $smarty->assign($assign); 
    } else { 
        return $data; 
    } 
} 
 
 |