Welcome Guest, Not a member yet? Register   Sign In
Table generate when no data
#1

[eluser]Frank Wong[/eluser]
It seems not as useful to have
Code:
$this->table->generate();
return 'Undefined table data' than returning FALSE or empty string.

Maybe there is a reason for this. If any of the Reactor folks could shed some light, it would be a good learning experience for us.

In the meantime, I extended the library with this to return FALSE.
Code:
<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class MY_Table extends CI_Table
{

    public function __construct()
    {
        parent::__construct();
    }

    /**
     * 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) == 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 FALSE; // THE CHANGE
        }

        // 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;
        }

        // 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'];

        return $out;
    }

}




Theme © iAndrew 2016 - Forum software by © MyBB