------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'HTML/Table.php'; /** * Libreria para le manejo de las tablas de los sistemas de intranet. * */ class MECON_HTML_Tabla extends HTML_Table { /** * Valores de Configuracion particular * * @var array() $conf * @access protected */ var $_conf; /** * Atributos de las tablas. * * @var array() attrs * @access protected */ var $_attrs; /** * Constructor. * Puede recibir como parametro un string con los atributos que se * quieren dar a la tabla en cuestion. Estos atributos estan * seteados por default segun el archivo de configuracion. * Ademas puede recibir la indicacion de algun estilo en particular. * * @param mixed $atributos Atributos diferentes a los estandares para la tabla * @param string $estilo Tipo de tabla * * @access public */ function MECON_HTML_Tabla($attrs = null, $estilo = 'comun') { // Obtengo los valores particulares de configuracion. $this->_conf = include(dirname(__FILE__) . '/Tabla/estilo_' . $estilo . '.php'); // Seteo los atributos para la tabla $this->_attrs = $this->_conf['atributos']['tabla_comun']; //Genero el objeto HTML_Table if (is_string($attrs)) { $attrs = $this->_parseAttributes($attrs); } if (is_array($attrs)) { if (isset($attrs['width'])) { $this->_attrs['width'] = $attrs['width']; } if (isset($attrs['bgcolor'])) { $this->_attrs['bgcolor'] = $attrs['bgcolor']; } if (isset($attrs['cellspacing'])) { $this->_attrs['cellspacing'] = $attrs['cellspacing']; } if (isset($attrs['cellpadding'])) { $this->_attrs['cellpadding'] = $attrs['cellpadding']; } } $this->HTML_Table($this->_attrs); } /** * Agrega una fila del tipo cabecera tomando colores y demas del * archivo de configuracion. Recibe como parametro un array con * los datos a incluir en la linea. Agrega tantas columnas como * elementos tenga el array. Si no recibe parametro alguno, * inserta una fila en blanco. Devuelve el identificador de la * fila en donde inserto los datos. * * @param array() $contenido Contenido de la fila * * @return int Identificador de Linea * @access public * @deprecated */ function agregarFilaCabecera($contenido = '', $atributos = '') { return $this->addRow($contenido, 'cabecera'); } /** * Agrega una fila del tipo comun, tomando colores y demas del * archivo de configuracion. Recibe como parametro un array con * los datos a incluir en la linea. Agrega tantas columnas como * elementos tenga el array. Si no recibe parametro alguno, * inserta una fila en blanco. Devuelve el identificador de la * fila en donde inserto los datos. * * @param array() $contenido Contenido de la fila * * @return int Identificador de Linea * * @access public * @deprecated */ function agregarFila($contenido = '') { return $this->addRow($contenido, 'comun'); } /** * Modifica el atributo rowSpan a la celda pasada por parametro * * @param int $fila Identificador de la fila que se quiere modificar * @param int $columna Identificador de la columna que se quiere modificar * @param int $valor Atributo a modificar * * @access public * @deprecated */ function rowSpan($fila, $columna, $valor) { return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"'); } /** * Modifica el atributo colSpan a la celda pasada por parametro * * @param int $fila Identificador de la fila que se quiere modificar * @param int $columna Identificador de la columna que se quiere modificar * @param int $valor Atributo a modificar * * @access public * @deprecated */ function colSpan($fila, $columna, $valor) { return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"'); } /** * Modifica el atributo aling de la celda pasada por parametro * * @param int $fila Identificador de la fila que se quiere modificar * @param int $columna Identificador de la columna que se quiere modificar * @param string $valor Atributo a modificar * * @access public * @deprecated */ function align($fila, $columna, $valor) { return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"'); } /** * Setea una columna como del tipo cabecera * * @param int $columna Identificador de la columna que se quiere modificar * * @access public * @deprecated */ function setColCabecera($columna) { return $this->updateColAttributes($columna, 'cabecera'); } /** * Setea una columna como del tipo titulo * * @param int $columna Identificador de la columna que se quiere modificar * * @access public * @deprecated */ function setColTitulo($columna) { return $this->updateColAttributes($columna, 'titulo'); } /** * Alinea una columna entera * * @param int $columna Identificador de la columna que se quiere modificar * @param string $valor Valor * * @access public * @deprecated */ function setColAlign($columna, $valor) { return $this->updateColAttributes($columna,'align="'.$valor.'"'); } /** * Cambia el tamanio de una columna entera * * @param int $columna Identificadore de la columna que se quiere modificar * @param string $valor Valor * * @access public * @deprecated */ function setColWidth($columna, $valor) { return $this->updateColAttributes($columna,'width="'.$valor.'"'); } /** * Cambia el color de fondo de una celda * * @param int $fila Identificador de la fila que se quiere modificar * @param int $columna Identificador de la columna que se quiere modificar * @param string $valor Atributo a modificar * * @access public * @deprecated */ function setCellBgcolor($fila, $columna, $valor) { return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"'); } /** * Devuelve el html de la tabla * * Devuelve el html de la tabla para que sea mostrado. * Como parametro recibe el indicador de tabla simple. * Si $simple es falso, devuelve el html comun y corriente (con 2 * tablas), si es false devuelve una tabla sola. * * @param bool $simple Tipo de tabla que se quiere recibir. * * @return string Html * * @access public */ function toHtml($simple = 0) { // Agregar la tabla de fondo. if ($simple) { $result = parent::toHtml(); } else { $contenedora = $this->_conf['atributos']['tabla_contenedora']; $contenedora['width'] = $this->getAttribute('width'); $this->updateAttributes(array('width' => '100%')); $tabla_externa = new HTML_Table($contenedora); $tabla_externa->addRow(array(parent::toHtml()), $this->_conf['atributos']['celda_contenedora']); $result = $tabla_externa->toHtml(); } return $result; } /** * Cambia las propiedades de una celda * * Cambia las propiedades de una celda. Si $attrs es un array * asociativo, se setean los atributos representados por las claves * con los valores. * * @param int $row Identificador de la fila que se quiere modificar * @param int $col Identificador de la columna que se quiere modificar * @param mixed $attrs Atributo a modificar * * @access public */ function updateCellAttributes($row, $col, $attrs) { return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs, false)); } /** * Establece las propiedades de una celda * * Establece las propiedades de una celda. Si $attrs es un array * asociativo, se setean los atributos representados por las claves * con los valores. * * @param int $row Identificador de la fila que se quiere modificar * @param int $col Identificador de la columna que se quiere modificar * @param mixed $attrs Atributo a modificar * * @access public */ function setCellAttributes($row, $col, $attrs) { return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs, true)); } /** * Agrega una fila * * Agrega una fila. El contenido es el que viene representado por * el array $content. Recibe los atributos en la variable $attrs * * @param mixed $content Contenido * @param mixed $attrs Atributos * * @return int $rowId Identificador de la fila * * @access public */ function addRow($content, $attrs = 'comun') { return parent::addRow($content, $attrs); } /** * Convierte un atributo a string * * Convierte un atributo HTML al string para pasar a los metodos de HTML_Table * Recibe en $attrs los atributos a modificar. * * @param mixed $attrs Atributos. * @param bool $isSet Indica si hay que setear. * * @return array * @access private */ function _translateAttributes($attrs, $isSet) { if (!$attrs) { return array(); } if (is_string($attrs)) { $attrs = $this->_parseAttributes($attrs); } if ($isSet) { $rta = $this->_conf['atributos']['celda_comun']; } else { $rta = array(); } foreach ($attrs as $attr => $val) { $attr = strtolower($attr); switch ($attr) { // Estilos de celda case 'comun': case 'cabecera': case 'titulo': $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]); break; case 'align': case 'valign': case 'width': case 'height': case 'rowspan': case 'colspan': case 'bgcolor': case 'class': case 'border': case 'cellspacing': case 'cellpadding': case 'nowrap': $rta[$attr] = $val; break; case 'spacing': case 'padding': $rta["cell$attr"] = $val; break; case 'th': $rta[$attr] = ''; break; default: trigger_error("No se permite setear el atributo $attr", E_USER_ERROR); } } return $rta; } /** * Obtiene la Cascade Style Sheet para esta tabla. * * @return string Path 'web' a la css. */ function getCSS() { return $this->_conf['css']; } } ?>