gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

function.html_table.php (5358B)


      1 <?php
      2 /**
      3  * Smarty plugin
      4  *
      5  * @package    Smarty
      6  * @subpackage PluginsFunction
      7  */
      8 
      9 /**
     10  * Smarty {html_table} function plugin
     11  * Type:     function<br>
     12  * Name:     html_table<br>
     13  * Date:     Feb 17, 2003<br>
     14  * Purpose:  make an html table from an array of data<br>
     15  * Params:
     16  * <pre>
     17  * - loop       - array to loop through
     18  * - cols       - number of columns, comma separated list of column names
     19  *                or array of column names
     20  * - rows       - number of rows
     21  * - table_attr - table attributes
     22  * - th_attr    - table heading attributes (arrays are cycled)
     23  * - tr_attr    - table row attributes (arrays are cycled)
     24  * - td_attr    - table cell attributes (arrays are cycled)
     25  * - trailpad   - value to pad trailing cells with
     26  * - caption    - text for caption element
     27  * - vdir       - vertical direction (default: "down", means top-to-bottom)
     28  * - hdir       - horizontal direction (default: "right", means left-to-right)
     29  * - inner      - inner loop (default "cols": print $loop line by line,
     30  *                $loop will be printed column by column otherwise)
     31  * </pre>
     32  * Examples:
     33  * <pre>
     34  * {table loop=$data}
     35  * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
     36  * {table loop=$data cols="first,second,third" tr_attr=$colors}
     37  * </pre>
     38  *
     39  * @author   Monte Ohrt <monte at ohrt dot com>
     40  * @author   credit to Messju Mohr <messju at lammfellpuschen dot de>
     41  * @author   credit to boots <boots dot smarty at yahoo dot com>
     42  * @version  1.1
     43  * @link     http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
     44  *           (Smarty online manual)
     45  *
     46  * @param array $params parameters
     47  *
     48  * @return string
     49  */
     50 function smarty_function_html_table($params)
     51 {
     52     $table_attr = 'border="1"';
     53     $tr_attr = '';
     54     $th_attr = '';
     55     $td_attr = '';
     56     $cols = $cols_count = 3;
     57     $rows = 3;
     58     $trailpad = '&nbsp;';
     59     $vdir = 'down';
     60     $hdir = 'right';
     61     $inner = 'cols';
     62     $caption = '';
     63     $loop = null;
     64 
     65     if (!isset($params['loop'])) {
     66         trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
     67 
     68         return;
     69     }
     70 
     71     foreach ($params as $_key => $_value) {
     72         switch ($_key) {
     73             case 'loop':
     74                 $$_key = (array) $_value;
     75                 break;
     76 
     77             case 'cols':
     78                 if (is_array($_value) && !empty($_value)) {
     79                     $cols = $_value;
     80                     $cols_count = count($_value);
     81                 } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
     82                     $cols = explode(',', $_value);
     83                     $cols_count = count($cols);
     84                 } elseif (!empty($_value)) {
     85                     $cols_count = (int) $_value;
     86                 } else {
     87                     $cols_count = $cols;
     88                 }
     89                 break;
     90 
     91             case 'rows':
     92                 $$_key = (int) $_value;
     93                 break;
     94 
     95             case 'table_attr':
     96             case 'trailpad':
     97             case 'hdir':
     98             case 'vdir':
     99             case 'inner':
    100             case 'caption':
    101                 $$_key = (string) $_value;
    102                 break;
    103 
    104             case 'tr_attr':
    105             case 'td_attr':
    106             case 'th_attr':
    107                 $$_key = $_value;
    108                 break;
    109         }
    110     }
    111 
    112     $loop_count = count($loop);
    113     if (empty($params['rows'])) {
    114         /* no rows specified */
    115         $rows = ceil($loop_count / $cols_count);
    116     } elseif (empty($params['cols'])) {
    117         if (!empty($params['rows'])) {
    118             /* no cols specified, but rows */
    119             $cols_count = ceil($loop_count / $rows);
    120         }
    121     }
    122 
    123     $output = "<table $table_attr>\n";
    124 
    125     if (!empty($caption)) {
    126         $output .= '<caption>' . $caption . "</caption>\n";
    127     }
    128 
    129     if (is_array($cols)) {
    130         $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
    131         $output .= "<thead><tr>\n";
    132 
    133         for ($r = 0; $r < $cols_count; $r ++) {
    134             $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
    135             $output .= $cols[$r];
    136             $output .= "</th>\n";
    137         }
    138         $output .= "</tr></thead>\n";
    139     }
    140 
    141     $output .= "<tbody>\n";
    142     for ($r = 0; $r < $rows; $r ++) {
    143         $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
    144         $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
    145 
    146         for ($c = 0; $c < $cols_count; $c ++) {
    147             $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
    148             if ($inner != 'cols') {
    149                 /* shuffle x to loop over rows*/
    150                 $x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
    151             }
    152 
    153             if ($x < $loop_count) {
    154                 $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
    155             } else {
    156                 $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
    157             }
    158         }
    159         $output .= "</tr>\n";
    160     }
    161     $output .= "</tbody>\n";
    162     $output .= "</table>\n";
    163 
    164     return $output;
    165 }
    166 
    167 function smarty_function_html_table_cycle($name, $var, $no)
    168 {
    169     if (!is_array($var)) {
    170         $ret = $var;
    171     } else {
    172         $ret = $var[$no % count($var)];
    173     }
    174 
    175     return ($ret) ? ' ' . $ret : '';
    176 }