如何将tfoot行添加到使用codeigniter表类生成的表中

时间:2012-12-17 15:07:07

标签: codeigniter

我想在CI表类生成的表中添加页脚行。有一些类可用于扩展表类并添加此功能。如果没有扩展表类,我宁愿使用本机功能。

是否可以在CI表类中使用?

5 个答案:

答案 0 :(得分:1)

我最终在桌子底下放了一个类似格式的div,以提供页脚行的错觉。希望将来表类将包含tfoot功能。

我知道扩展类会将此功能添加到CI表类。

答案 1 :(得分:1)

这是一个老问题,但我遇到了同样的问题,这里是修改后的表库,允许表格页脚

https://github.com/rhspeer/TableWithTableFooter

答案 2 :(得分: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;
}

}

答案 3 :(得分:0)

答案 4 :(得分:0)

没有必要扩展表库,你可以使用set_template函数,传递数组模板。