Part of the EllisLab Network
x
 
Create New Page
 View Previous Changes    ( Last updated by RcCluster )

HtmlTable

Category:Contributions -> Libraries -> HTML

Introduction

HTML Table Extension integrates the original HTML Table Library. 

Although it is a extention it generate very simple tables. If there is a need it can become more flexible i think.

It generate full HTML-Table like this:

<table ...> <!-- start the table -->
  <
thead>  <!-- one row for table header -->
    <
tr>
      <
th>yada</th>
      ...
    </
tr>
  </
thead>
  <
tbody>
    <
tr>  <!-- one row for table sub header -->
      <
th>sub yada</th>
      ...
    </
tr>
    <
td>  <!-- the n table rows -->
      <
th>row1-cell1</th>
      ...
    </
td>
    ...
  </
tbody>
  <
tfoot> <!-- one row for table footer -->
    <
tr>
      <
td>end of table</td>
      ...
    </
tr>
  </
tfoot>
</
table

Version

0.1 based on CI 1.7.1 Date: May 2009.

Installation

Copy the code below into a file called MY_Table.php and place it in the /application/libraries folder. Like every extention you can activate it through the table class

$this->load->library('table'); 

or via autoload.php.

Methods

generate (overwritten)

Now it will generate some more:
- <thead>, <tbody> and <tfoot> tags.
- a subheading on top of <tbody>

_compile_template (overwritten)

some minor changes

_default_template (overwritten)

Some more tags due to the new sections. See end of listing.

set_footing (new)

To set the footing. Works exactly like “set_heading”.

- set_subheading (new)

To set the subheading. Works exactly like “set_heading”.

file: MY_Table.php

<?php
/**
* Based on the original library
*
* @autor: Alexander Rust
* @email: agrust@hotmail.com
* @date:  May 2009
*/

class MY_Table extends CI_Table {

  
var $footing      = array();
  var 
$subheading   = array();

  
/**
   * Set the table footing. Similar to heading
   *
   * Can be passed as an array or discreet params
   *
   * @access  public
   * @param  mixed
   * @return  void
   */
  
function set_footing()
  
{
    $args 
func_get_args();
    
$this->footing = (is_array($args[0])) ? $args[0] $args;
  
}

  
// --------------------------------------------------------------------

  /**
   * Set the table sub headers. Similar to heading
   *
   * Can be passed as an array or discreet params
   *
   * @access  public
   * @param  mixed
   * @return  void
   */
  
function set_subheading()
  
{
    $args 
func_get_args();
    
$this->subheading = (is_array($args[0])) ? $args[0] $args;
  
}

  
// --------------------------------------------------------------------

  /**
   * Generate the table.
   *
   *
   * @access  public
   * @param  mixed
   * @return  string
   */
  
function generate($table_data NULL)
  
{
    
// The table data can optionally be passed to this function
    // either as a database result object or an array
    
if ( ! is_null($table_data))
    
{
      
if (is_object($table_data))
      
{
        $this
->_set_from_object($table_data);
      
}
      
elseif (is_array($table_data))
      
{
        $set_heading 
= (count($this->heading) == AND $this->auto_heading == FALSE) ? FALSE TRUE;
        
$this->_set_from_array($table_data$set_heading);
      
}
    }

    
// Is there anything to display?  No?  Smite them!
    
if (count($this->heading) == AND count($this->rows) == 0)
    
{
      
return 'Undefined table data';
    
}

    
// Compile and validate the template date
    
$this->_compile_template();

    
// Build the table!

    
$out $this->template['table_open'];
    
$out .= $this->newline;

    
// Add any caption here
    
if ($this->caption)
    
{
      $out 
.= $this->newline;
      
$out .= '<caption>' $this->caption '</caption>';
      
$out .= $this->newline;
    
}
    
// Is there a table heading to display?
    
if (count($this->heading) > 0)
    
{
      $out 
.= "<!-- Heading -->";
      
$out .= $this->newline;
      
$out .= $this->template['heading_open'];
      
$out .= $this->newline;
      
$out .= $this->template['heading_row_start'];
      
$out .= $this->newline;

      foreach(
$this->heading as $heading)
      
{
        $out 
.= $this->template['heading_cell_start'];
        
$out .= $heading;
        
$out .= $this->template['heading_cell_end'];
      
}

      $out 
.= $this->template['heading_row_end'];
      
$out .= $this->newline;
      
$out .= $this->template['heading_close'];
      
$out .= $this->newline;
    
}

    
// Are there subheadings or rows to display?
    
if (count($this->subheading) > OR count($this->rows) > 0{
      
// start the tbody
      
$out .= $this->template['body_open'];
      
$out .= $this->newline;

      
// Is there a table heading to display?
      
if (count($this->subheading) > 0)
      
{
        $out 
.= "<!-- Sub Heading -->";
        
$out .= $this->newline;
        
$out .= $this->template['sub_heading_row_start'];
        
$out .= $this->newline;

        foreach(
$this->subheading as $subheading)
        
{
          $out 
.= $this->template['sub_heading_cell_start'];
          
$out .= $subheading;
          
$out .= $this->template['sub_heading_cell_end'];
        
}

        $out 
.= $this->template['sub_heading_row_end'];
        
$out .= $this->newline;
      
}

      
// Build the table rows
      
if (count($this->rows) > 0)
      
{
        $out 
.= "<!-- Table Rows -->";
        
$out .= $this->newline;
        
$i 1;
        foreach(
$this->rows as $row)
        
{
          
if ( ! is_array($row))
          
{
            
break;
          
}

          
// We use modulus to alternate the row colors
          
$name = (fmod($i++, 2)) ? '' 'alt_';

          
$out .= $this->template['row_'.$name.'start'];
          
$out .= $this->newline;

          foreach(
$row as $cell)
          
{
            $out 
.= $this->template['cell_'.$name.'start'];

            if (
$cell === "")
            
{
              $out 
.= $this->empty_cells;
            
}
            
else
            
{
              $out 
.= $cell;
            
}

            $out 
.= $this->template['cell_'.$name.'end'];
          
}

          $out 
.= $this->template['row_'.$name.'end'];
          
$out .= $this->newline;
        
}
      }
      
// end the tbody
      
$out .= $this->template['body_close'];
      
$out .= $this->newline;
    
}

    
// Is there a table footing to display?
    
if (count($this->footing) > 0)
    
{
      $out 
.= "<!-- Footing -->";
      
$out .= $this->newline;
      
$out .= $this->template['footing_open'];
      
$out .= $this->newline;
      
$out .= $this->template['footing_row_start'];
      
$out .= $this->newline;

      foreach(
$this->heading as $footing)
      
{
        $out 
.= $this->template['footing_cell_start'];
        
$out .= $footing;
        
$out .= $this->template['footing_cell_end'];
      
}

      $out 
.= $this->template['footing_row_end'];
      
$out .= $this->newline;
      
$out .= $this->template['footing_close'];
      
$out .= $this->newline;
    
}

    $out 
.= $this->template['table_close'];

    return 
$out;
  
}

  
// --------------------------------------------------------------------

  /**
   * Compile Template
   *
   * @access  private
   * @return  void
   */
   
function _compile_template()
   
{
     
if ($this->template == NULL)
     
{
       $this
->template $this->_default_template();
       return;
     
}

    $this
->temp $this->_default_template();
    foreach (
array_keys($this->temp) as $val)
    
{
      
if ( ! isset($this->template[$val]))
      
{
        $this
->template[$val] $this->temp[$val];
      
}
    }
   }

  
// --------------------------------------------------------------------

  /**
   * Default Template
   *
   * @access  private
   * @return  void
   */
  
function _default_template()
  
{
    
return  array (
            
'table_open'       => '<table border="0" cellpadding="4" cellspacing="0">',
            
'table_close'       => '</table>',

            
'heading_open'            => '<thead>',
            
'heading_close'           => '</thead>',
            
'heading_row_start'       => '<tr>',
            
'heading_row_end'         => '</tr>',
            
'heading_cell_start'      => '<th>',
            
'heading_cell_end'        => '</th>',

            
'sub_heading_row_start'       => '<tr>',
            
'sub_heading_row_end'         => '</tr>',
            
'sub_heading_cell_start'      => '<th>',
            
'sub_heading_cell_end'        => '</th>',

            
'body_open'       => '<tbody>',
            
'body_close'      => '</tbody>',
            
'row_start'       => '<tr>',
            
'row_end'         => '</tr>',
            
'cell_start'      => '<td>',
            
'cell_end'        => '</td>',

            
'row_alt_start'     => '<tr class="alt">',
            
'row_alt_end'       => '</tr>',
            
'cell_alt_start'    => '<td>',
            
'cell_alt_end'      => '</td>',

            
'footing_open'    => '<tfoot>',
            
'footing_close'   => '</tfoot>',
            
'footing_row_start'   => '<tr>',
            
'footing_row_end'     => '</tr>',
            
'footing_cell_start'  => '<td>',
            
'footing_cell_end'    => '</td>'
          
);
  
}

  
// --------------------------------------------------------------------

}

/* End of file MY_Table.php */
/* Location: ./system/application/libraries/MY_Table.php */ 

Category:Libraries -> HTML
Category:Libraries -> HTML Table Extension