Location: PHPKode > scripts > Panel_Fichas tab control > panel_fichas-tab-control/panel_fichas.php
<?php
/**
* Clase para la creación de un panel de fichas (tab control)
*
* @author Alfredo Rahn <hide@address.com>
* @version 0.2 (24-09-2005)
* @version 0.1 (30-06-2005)
*/

/**
* Clase que crea un panel de fichas html
*/
class panel_Fichas {
	/**
	* El vector con la configuración de las fichas
	*/
	var $CFG;
	/**
	* El key de la lista activa
	*/
	var $Activa;
	/**
	* La cantidad de filas entre las que vamos a distribuir las fichas
	*/
	var $Filas;
	/**
	* Cadena con los atributos de despliegue de la tabla
	*/
	var $TAttr;
	/**
	* Cadena con los atributos de despliegue de la celda activa
	*/
	var $ACAttr;
	/**
	* Cadena con los atributos de despliegue de la celda inactiva
	*/
	var $ICAttr;
	/**
	* El nombre de la variable que contiene la ficha activa
	*/
	var $FA_name;
	/**
	* Constructor de la Clase 
	*
	* @param array $Fichas Vector referencial con la configuración
	* @param mixed $Activa La llave de la ficha activa (o cero la primera)
	* @param string $TAttr Los atributos para el despliegue de la tabla
	* @param string $ACAttr Atributos para el despliegue de celda activa
	* @param string $ICAttr Atributos para el despliegue de celda activa
	* @param number $filas Número de filas a desplegar
	* @param string $FA_name El nombre de la variable de la ficha activa
	*/
	function panel_Fichas(  $Fichas=array(),
							$Activa=0,
							$TAttr="",
							$ACAttr="",
							$ICAttr="",
							$filas=1,
							$FA_name="ficha") {
		// Si hay elementos en el vector Fichas
		if ($bueno=	!empty($Fichas) && is_array($Fichas))
			// Si estos elementos al menos tienen etiqueta
			foreach(array_keys($Fichas) as $key)
				if (!($bueno = strlen($Fichas[$key][LABEL]) > 0))
					continue;
		// Si bueno es true, es que el array sirvio para algo
		$this->CFG = $bueno ? $Fichas : array();

		// La ficha activa		
		$this->Activa = ($Activa != 0) && 
						in_array($Activa,array_keys($this->CFG)) ?
						$Activa : 
						0;
		// Los atributos de formato
		$this->TAttr  = (!empty($TAttr)) ? 
						$TAttr :
						"";
		$this->ACAttr = (!empty($ACAttr)) ? 
						$ACAttr :
						"";
		$this->ICAttr = (!empty($ICAttr)) ? 
						$ICAttr :
						"";
		// El nombre de la variable de la ficha activa
		$this->FA_name = (strlen($FA_Name) > 0) &&
						 (htmlentities($FA_Name) == $FA_Name) ? 
						 $FA_Name :
						 "ficha";
	}
	/**
	* Inserta una nueva ficha 
	*
	* @param string $llave El nombre o numero de llave
	* @param string $titulo El titulo a mostrar para la ficha
	* @param string $valor El valor o contenido de la ficha
	* @param string $tipo El tipo de valor o contenido 
	*/
	function nuevaFicha($llave,$titulo,$valor="",$tipo="") {
		// Si algo anda mal se va
		if (empty($key) ||
		    empty($value) ||
			!is_numeric($pos) ||
			(int)$pos >= 0) return false;
		// Monta el valor en el vector
		$this->Elem = array_merge($this->Elem,
								  array($key => $value));
		// Si esta en el de posiciones tambien
		if ($pos > 0) $this->Pos[$key] = $pos;
		return true;
	}
	/**
	* Elimina una Ficha
	*
	* @param string $llave La llave que identifica la ficha a borrar
	*/
	function borrarFicha($llave) {
		// Si no existe nos vamos
		if (!isset($this->Elem[$key])) return false;
		// Si existe en el vector de elementos, borralo
		unset($this->Elem[$key]);
		// Si esta en el vector de posiciones borralo
		if (isset($this->Pos[$key])) unset($this->Pos[$key]);
		return true;
	}
	/**
	* Activa o desactiva (permitir el link) en una ficha
	*  
	* @param string $llave El codigo de la ficha en cuestión
	* @param bool $estado true si se quiere activa, false otherwhise
	*/
	function estadoFicha($llave,$estado="") {
		// Si la llave no existe, devuelve vacio
		if (!array_key_exists($llave,$this->CFG))
			return "";
		
		if ($estado === "") {
			return isset($this->CFG[$llave][DISABLED]) ?
					!$this->CFG[$llave][DISABLED] :
					true;
		} else {
			$this->CFG[$llave][DISABLED] = !(bool)$estado;
			return (bool)$estado;
		}
	}
	/**
	* Cambia la ficha activa a solicitud del usuario
	*  
	* @param array $In El vector con las entradas del usuario
	*/
	function cambiarActiva(&$In) {
		if (isset($In[$this->FA_name]) &&
			strlen($In[$this->FA_name]) > 0 &&
			array_key_exists($In[$this->FA_name],$this->CFG) &&
			!$this->CFG[$In[$this->FA_name]][DISABLED]) {
			// Ficha activa la que le dijeron
			$this->Activa = $In[$this->FA_name];
			return true;
		} else {
			// La primera que no este inactiva pues la otra no es válida
			foreach(array_keys($this->CFG) as $act) {
				if (!$this->CFG[$act][DISABLED]) {
					$this->Activa = $act;
					return true;
				}
			}
			return false;
		}
	}
	/**
	* Despliega el html con el formulario
	*
	*/
	function htmlPanel() {
		$s  = "<table {$this->TAttr}>\n"
		    . "<tr><TD>\n"
		    . "\t<table width=\"100%\" cellpadding=\"3\" cellspacing=\"0\"><TR>\n";
		foreach(array_keys($this->CFG) as $key) {
			$fmt = ($this->Activa == $key) ? $this->ACAttr : $this->ICAttr;
			// Imprime las celdas, una ficha en cada una			
			$s .= "\t<td nowrap $fmt>&nbsp;\n";
				if ($this->CFG[$key][DISABLED] === true) {
					$s .= $this->CFG[$key][LABEL] . "&nbsp;</td>\n";
				} else {
					$s .= "\t\t<a href=\"" . $_SERVER['PHP_SELF'] . "?" 
						. $this->FA_name . "=" . $key . "\">"
						. $this->CFG[$key][LABEL] . "</a>&nbsp;</td>\n";
				}
		}
		// Imprime la celda mas derecha, la que arriba a las otras
		$s .= "\t<td width=\"80%\">&nbsp;</td>\n";
		$s .= "\t</tr>\n\t</table>\n</td></tr>\n"
			. "<TR><td height=\"200\" {$this->ACAttr}>";
		// Coloca el contenido de la ficha en su celda
		switch ($this->CFG[$this->Activa][TYPE]) {
			case "INCLUDE":
				if (file_exists($this->CFG[$this->Activa][CONTENT])) 
					echo $s;
					include($this->CFG[$this->Activa][CONTENT]);
					$s = "";
				break;
			case "STRING":
			default:
				$s .= $this->CFG[$this->Activa][CONTENT];
				break;
		}
		$s .= "</td></tr>\n</table>";
		echo $s;
	}
}
?>
Return current item: Panel_Fichas tab control