2012-12-17 13 views

回答

1

我最後決定將具有相似的格式表下一個div提供的footer行的錯覺。希望將來桌子班將包括tfoot功能。

我知道擴展類,它會將此功能添加到CI表類。

0
+0

我已經看過這個擴展基類,我正在尋找一種不擴展基表類的方法。 –

+0

我不認爲codeigniter在CI HTML表中提供頁腳類 –

+1

我試圖避免這種迴應:),但它看起來像我將不得不擴展表類。但還是有希望的...... –

1

我並擴展表類,我還設置了模板默認使用jquery ui,與上面的例子不同,我不重新創建不需要更新的基本方法。

在應用程序/庫添加一個名爲MY_table.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class MY_Table extends CI_Table{ 
var $footer = array(); 
function __construct() 
{ 
    parent::__construct(); 
    $this->template = array(
     'table_open'   => '<table class="ui-corner-top ui-widget" >', 

     'thead_open'   => '<thead class="ui-widget-header">', 
     'thead_close'   => '</thead>', 
     'heading_row_start'  => '<tr>', 
     'heading_row_end'  => '</tr>', 
     'heading_cell_start' => '<th>', 
     'heading_cell_end'  => '</th>', 

     'tbody_open'   => '<tbody class="ui-widget-content">', 
     'tbody_close'   => '</tbody>', 

     'row_start'    => '<tr class="table_row_odd">', 
     'row_end'    => '</tr>', 
     'cell_start'   => '<td>', 
     'cell_end'    => '</td>', 

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

     'tfoot_open'   => '<tfoot class="ui-widget-header ui-priority-secondary">', 
     'footer_row_start'  => '<tr>', 
     'footer_row_end'  => '</tr>', 
     'footer_cell_start'  => '<th>', 
     'footer_cell_end'  => '</th>', 
     'tfoot_close'   => '</tfoot>', 

     'table_close'   => '</table>' 
    ); 
    $this->empty_cells = '&nbsp;'; 
} 
function set_template($template) 
{ 
    // extends the normal method so that only the required elements have to be entered. the remainder stay as defaults. 
    if (! is_array($template)) 
    { 
     return FALSE; 
    } 
    else 
    { 
     foreach($template as $param => $value) 
     { 
      $this->template[$param] = $value; 
     } 
    } 

} 
function set_footer() 
{ 
    $args = func_get_args(); 
    $this->footer = $this->_prep_args($args); 
} 
function clear() 
{ 
    $this->footer = array(); 
    parent::clear(); 
} 
// extend the generate table method. just adds the bit in to handle tfoot. 

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) == 0 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) == 0 AND count($this->rows) == 0) 
    { 
     return 'Undefined table data'; 
    } 

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

    // set a custom cell manipulation function to a locally scoped variable so its callable 
    $function = $this->function; 

    // 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 .= $this->template['thead_open']; 
     $out .= $this->newline; 
     $out .= $this->template['heading_row_start']; 
     $out .= $this->newline; 

     foreach ($this->heading as $heading) 
     { 
      $temp = $this->template['heading_cell_start']; 

      foreach ($heading as $key => $val) 
      { 
       if ($key != 'data') 
       { 
        $temp = str_replace('<th', "<th $key='$val'", $temp); 
       } 
      } 

      $out .= $temp; 
      $out .= isset($heading['data']) ? $heading['data'] : ''; 
      $out .= $this->template['heading_cell_end']; 
     } 

     $out .= $this->template['heading_row_end']; 
     $out .= $this->newline; 
     $out .= $this->template['thead_close']; 
     $out .= $this->newline; 
    } 
    if (count($this->footer) > 0) 
    { 
     $out .= $this->template['tfoot_open']; 
     $out .= $this->newline; 
     $out .= $this->template['footer_row_start']; 
     $out .= $this->newline; 

     foreach ($this->footer as $footer) 
     { 
      $temp = $this->template['footer_cell_start']; 

      foreach ($footer as $key => $val) 
      { 
       if ($key != 'data') 
       { 
        $temp = str_replace('<th', "<th $key='$val'", $temp); 
       } 
      } 

      $out .= $temp; 
      $out .= isset($footer['data']) ? $footer['data'] : ''; 
      $out .= $this->template['footer_cell_end']; 
     } 

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

    // Build the table rows 
    if (count($this->rows) > 0) 
    { 
     $out .= $this->template['tbody_open']; 
     $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) 
      { 
       $temp = $this->template['cell_'.$name.'start']; 

       foreach ($cell as $key => $val) 
       { 
        if ($key != 'data') 
        { 
         $temp = str_replace('<td', "<td $key='$val'", $temp); 
        } 
       } 

       $cell = isset($cell['data']) ? $cell['data'] : ''; 
       $out .= $temp; 

       if ($cell === "" OR $cell === NULL) 
       { 
        $out .= $this->empty_cells; 
       } 
       else 
       { 
        if ($function !== FALSE && is_callable($function)) 
        { 
         $out .= call_user_func($function, $cell); 
        } 
        else 
        { 
         $out .= $cell; 
        } 
       } 

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

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

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


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

    // Clear table class properties before generating the table 
    $this->clear(); 
    return $out; 
} 

文件}

0

沒必要延伸表庫,你會使用set_template功能,通過陣列模板。

相關問題