adaniel Wed Mar 21 20:15:43 2001 EDT Added files: /php4/pear/HTML Table.php Log: original commit. class to create html tables
Index: php4/pear/HTML/Table.php +++ php4/pear/HTML/Table.php <?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +----------------------------------------------------------------------+ // | PHP version 4.0 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 2.0 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available at through the world-wide-web at | // | http://www.php.net/license/2_02.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | [EMAIL PROTECTED] so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Authors: Adam Daniel <[EMAIL PROTECTED]> | // | Bertrand Mansion <[EMAIL PROTECTED]> | // +----------------------------------------------------------------------+ // // $Id: Table.php,v 1.1 2001/03/22 04:15:42 adaniel Exp $ require_once "PEAR.php"; require_once "HTML/Common.php"; /** * Builds an HTML table * * @author Adam Daniel <[EMAIL PROTECTED]> * @author Bertrand Mansion <[EMAIL PROTECTED]> * @version 1.5 * @since PHP 4.0.3pl1 * * Example: $table = new HTML_Table; ... */ class HTML_Table extends HTML_Common { /** * Automatically adds a new row or column if a given row or column index does not exist * @var bool * @access private */ var $_autoGrow = true; /** * Value to insert into empty cells * @var string * @access private */ var $_autoFill = " "; /** * Array containing the table structure * @var array * @access private */ var $_structure = array(); /** * Number of rows composing in the table * @var int * @access private */ var $_rows = 0; /** * Number of column composing the table * @var int * @access private */ var $_cols = 0; /** * Class constructor * @param array $attributes Associative array of table tag attributes * @param int $tabOffset * @access public */ function HTML_Table($attributes=null, $tabOffset=0) { $commonVersion = 1.3; if (HTML_Common::apiVersion() < $commonVersion) { return new PEAR_Error("HTML_Table version " . $this->apiVersion() . " requires " . "HTML_Common version $commonVersion or greater.", 0, PEAR_ERROR_TRIGGER); } HTML_Common::HTML_Common($attributes, $tabOffset); } /** * Returns the API version * @access public * @returns double */ function apiVersion() { return 1.5; } /** * Sets the table caption * @param string $caption * @param mixed $attributes Associative array or string of table row attributes * @access public */ function setCaption($caption, $attributes=null) { $attributes = $this->_parseAttributes($attributes); $this->_structure["caption"] = array("attr"=>$attributes, "contents"=>$caption); } /** * Sets the autoFill value * @param mixed $fill * @access public */ function setAutoFill($fill) { $this->_autoFill = $fill; } /** * Returns the autoFill value * @access public * @returns mixed */ function getAutoFill() { return $this->_autoFill; } /** * Sets the autoGrow value * @param bool $fill * @access public */ function setAutoGrow($grow) { $this->_autoGrow = $grow; } /** * Returns the autoGrow value * @access public * @returns mixed */ function getAutoGrow() { return $this->_autoGrow; } /** * Sets the number of rows in the table * @param int $rows * @access public */ function setRowCount($rows) { $this->_rows = $rows; } /** * Sets the number of columns in the table * @param int $cols * @access public */ function setColCount($cols) { $this->_cols = $cols; } /** * Returns the number of rows in the table * @access public * @returns int */ function getRowCount() { return $this->_rows; } /** * Sets the number of columns in the table * @access public * @returns int */ function getColCount() { return $this->_cols; } /** * Sets a rows type 'TH' or 'TD' * @param int $row Row index * @param string $type 'TH' or 'TD' * @access public */ function setRowType($row, $type) { for ($counter=0; $counter < $this->_cols; $counter++) { $this->_structure[$row][$counter]["type"] = $type; } } /** * Sets a columns type 'TH' or 'TD' * @param int $col Column index * @param string $type 'TH' or 'TD' * @access public */ function setColType($col, $type) { for ($counter=0; $counter < $this->_rows; $counter++) { $this->_structure[$counter][$col]["type"] = $type; } } /** * Sets the cell attributes for an existing cell. * * If the given indices do not exist and autoGrow is true then the given * row and/or col is automatically added. If autoGrow is false then an * error is returned. * @param int $row Row index * @param int $col Column index * @param mixed $attributes Associative array or string of table row attributes * @access public * @throws PEAR_Error */ function setCellAttributes($row, $col, $attributes) { if ($this->_structure[$row][$col] == "SPANNED") return; if ($row >= $this->_rows) { if ($this->_autoGrow) { $this->_rows = $row+1; } else { return new PEAR_Error("Invalid table row reference[$row] in HTML_Table::setCellAttributes"); } } if ($col >= $this->_cols) { if ($this->_autoGrow) { $this->_cols = $col+1; } else { return new PEAR_Error("Invalid table column reference[$col] in HTML_Table::setCellAttributes"); } } $attributes = $this->_parseAttributes($attributes); $this->_structure[$row][$col]["attr"] = $attributes; $this->_updateSpanGrid($row, $col); } /** * Updates the cell attributes passed but leaves other existing attributes in tact * @param int $row Row index * @param int $col Column index * @param mixed $attributes Associative array or string of table row attributes * @access public */ function updateCellAttributes($row, $col, $attributes) { if ($this->_structure[$row][$col] == "SPANNED") return; $attributes = $this->_parseAttributes($attributes); $this->_updateAttrArray($this->_structure[$row][$col]["attr"], $attributes); $this->_updateSpanGrid($row, $col); } /** * Sets the cell contents for an existing cell * * If the given indices do not exist and autoGrow is true then the given * row and/or col is automatically added. If autoGrow is false then an * error is returned. * @param int $row Row index * @param int $col Column index * @param mixed $contents May contain html or any object with a toHTML method * @param string $type (optional) Cell type either 'TH' or 'TD' * @access public * @throws PEAR_Error */ function setCellContents($row, $col, $contents, $type='TD') { if ($this->_structure[$row][$col] == "SPANNED") return; if ($row >= $this->_rows) { if ($this->_autoGrow) { $this->_rows = $row+1; } else { return new PEAR_Error("Invalid table row reference[$row] in HTML_Table::setCellContents"); } } if ($col >= $this->_cols) { if ($this->_autoGrow) { $this->_cols = $col+1; } else { return new PEAR_Error("Invalid table column reference[$col] in HTML_Table::setCellContents"); } } $this->_structure[$row][$col]["contents"] = $contents; $this->_structure[$row][$col]["type"] = $type; } /** * Returns the cell contents for an existing cell * @param int $row Row index * @param int $col Column index * @access public * @return mixed */ function getCellContents($row, $col) { if ($this->_structure[$row][$col] == "SPANNED") return; return $this->_structure[$row][$col]["contents"]; } /** * Sets the contents of a header cell * @param int $row * @param int $col * @param mixed $contents * @access public */ function setHeaderContents($row, $col, $contents) { $this->setCellContents($row, $col, $contents, 'TH'); } /** * Adds a table row and returns the row identifier * @param array $contents (optional) Must be a indexed array of valid cell contents * @param mixed $attributes (optional) Associative array or string of table row attributes * @param string $type (optional) Cell type either 'TH' or 'TD' * @returns int * @access public */ function addRow($contents=null, $attributes=null, $type='TD') { if (isset($contents) && !is_array($contents)) { return new PEAR_Error("First parameter to HTML_Table::addRow must be an array"); } $row = $this->_rows++; for ($counter=0; $counter < count($contents); $counter++) { if ($type == 'TD') { $this->setCellContents($row, $counter, $contents[$counter]); } elseif ($type == 'TH') { $this->setHeaderContents($row, $counter, $contents[$counter]); } } $this->setRowAttributes($row, $attributes); return $row; } /** * Sets the row attributes for an existing row * @param int $row Row index * @param mixed $attributes Associative array or string of table row attributes * @access public */ function setRowAttributes($row, $attributes) { for ($i = 0; $i < $this->_cols; $i++) { $this->setCellAttributes($row,$i,$attributes); } } /** * Updates the row attributes for an existing row * @param int $row Row index * @param mixed $attributes Associative array or string of table row attributes * @access public */ function updateRowAttributes($row, $attributes=null) { for ($i = 0; $i < $this->_cols; $i++) { $this->updateCellAttributes($row,$i,$attributes); } } /** * Alternates the row attributes starting at $start * @param int $start Row index of row in which alternatign begins * @param mixed $attributes1 Associative array or string of table row attributes * @param mixed $attribute2 Associative array or string of table row attributes * @access public */ function altRowAttributes($start, $attributes1, $attributes2) { for ($row = $start ; $row < $this->_rows ; $row++) { $attributes = (($row+1+$start)%2==0) ? $attributes1 : $attributes2; $this->updateRowAttributes($row, $attributes); } } /** * Adds a table column and returns the column identifier * @param array $contents (optional) Must be a indexed array of valid cell contents * @param mixed $attributes (optional) Associative array or string of table row attributes * @param string $type (optional) Cell type either 'TH' or 'TD' * @returns int * @access public */ function addCol($contents=null, $attributes=null, $type='TD') { if (isset($contents) && !is_array($contents)) { return new PEAR_Error("First parameter to HTML_Table::addCol must be an array"); } $col = $this->_cols++; for ($counter=0; $counter < count($contents); $counter++) { $this->setCellContents($counter, $col, $contents[$counter], $type); } $this->setColAttributes($col, $attributes); return $col; } /** * Sets the column attributes for an existing column * @param int $col Column index * @param mixed $attributes (optional) Associative array or string of table row attributes * @access public */ function setColAttributes($col, $attributes=null) { for ($i = 0; $i < $this->_cols; $i++) { $this->setCellAttributes($i,$col,$attributes); } } /** * Updates the column attributes for an existing column * @param int $col Column index * @param mixed $attributes (optional) Associative array or string of table row attributes * @access public */ function updateColAttributes($col, $attributes=null) { for ($i = 0; $i < $this->_cols; $i++) { $this->updateCellAttributes($i,$col,$attributes); } } /** * Returns the table structure as HTML * @access public */ function toHtml() { $tabs = $this->_getTabs(); $strHtml .= "\n" . $tabs . "<TABLE" . $this->_getAttrString($this->_attributes) . ">\n"; if ($this->_structure["caption"]) { $attr = $this->_structure["caption"]["attr"]; $contents = $this->_structure["caption"]["contents"]; $strHtml .= $tabs . "\t<CAPTION" . $this->_getAttrString($attr) . ">"; if (is_array($contents)) $contents = implode(", ",$contents); $strHtml .= $contents; $strHtml .= "</CAPTION>\n"; } for ($i = 0 ; $i < $this->_rows ; $i++) { $strHtml .= $tabs ."\t<TR>\n"; for ($j = 0 ; $j < $this->_cols ; $j++) { if ($this->_structure[$i][$j] == "SPANNED") { $strHtml .= $tabs ."\t\t<!-- span -->\n"; continue; } $type = ($this->_structure[$i][$j]["type"] == "TH" ? "TH" : "TD"); $attr = $this->_structure[$i][$j]["attr"]; $contents = $this->_structure[$i][$j]["contents"]; $strHtml .= $tabs . "\t\t<$type" . $this->_getAttrString($attr) . ">"; if (is_object($contents)) { if (method_exists($contents, "toHtml")) { $contents = $contents->toHtml(); } elseif (method_exists($contents, "toString")) { $contents = $contents->toString(); } } if (is_array($contents)) $contents = implode(", ",$contents); if (isset($this->_autoFill) && $contents == "") $contents = $this->_autoFill; $strHtml .= $contents; $strHtml .= "</$type>\n"; } $strHtml .= $tabs ."\t</TR>\n"; } $strHtml .= $tabs . "</TABLE>"; return $strHtml; } /** * Prints the HTML table to the screen * @access public */ function display() { print $this->toHtml(); } /** * Checks if rows or columns are spanned * @param int $row Row index * @param int $col Column index * @access private */ function _updateSpanGrid($row, $col) { $colspan = $this->_structure[$row][$col]["attr"]["colspan"]; $rowspan = $this->_structure[$row][$col]["attr"]["rowspan"]; if ($colspan) { for ($j = $col+1; (($j < $this->_cols) && ($j <= ($col + $colspan - 1))); $j++) { $this->_structure[$row][$j] = "SPANNED"; } } if ($rowspan) { for ($i = $row+1; (($i < $this->_rows) && ($i <= ($row + $rowspan - 1))); $i++) { $this->_structure[$i][$col] = "SPANNED"; } } if ($colspan && $rowspan) { for ($i = $row+1; (($i < $this->_rows) && ($i <= ($row + $rowspan - 1))); $i++) { for ($j = $col+1; (($j <= $this->_cols) && ($j <= ($col + $colspan - 1))); $j++) { $this->_structure[$i][$j] = "SPANNED"; } } } } } ?>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]