예제 #1
0
    function generar_layout()
    {
        $cod_carga_cuadro = '<?php
function conf__cuadro()
{
    $sql = "SELECT id, nombre, descripcion FROM ref_juegos";
    return toba::db()->consultar($sql);
}
?>
';
        $cod_seleccion = '<?php
function evt__cuadro__seleccion($seleccion)
{
	$this->dep("datos")->cargar($seleccion);
}
?>
';
        $cod_carga_form = '<?php
function conf__formulario()
{
	if ($this->dep("datos")->esta_cargada()) {
		return $this->dep("datos")->get();	
	}
}
?>
';
        $cod_abm = '<?php
function evt__formulario__alta($datos)
{
	$this->dep("datos")->nueva_fila($datos);
	$this->dep("datos")->sincronizar();
	$this->dep("datos")->resetear();		
}

function evt__formulario__modificacion($datos)
{
	$this->dep("datos")->set($datos);
	$this->dep("datos")->sincronizar();
	$this->dep("datos")->resetear();				
}

function evt__formulario__baja()
{
	$this->dep("datos")->eliminar_filas();
	$this->dep("datos")->sincronizar();
	$this->dep("datos")->resetear();		
}
?>
';
        echo "\n\t\t\t<p>\n\t\t\t\tUna vez definidos los componentes resta programar la lógica de la operación. En este caso\n\t\t\t\tla lógica es bien simple, sólo es necesario atender los eventos y configurar el cuadro y formulario.\n\t\t\t\tEn los eventos se interactúa con el datos_tabla que es quien en definitiva hace las consultas y comandos SQL.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t\n\t\t\t</p>\n\t\t\t<h3>Manejo del Cuadro</h3>\n\t\t\t<ul>\n\t\t\t\t<li>Para cargar el cuadro con datos se hace una consulta directa a la base.\n\t\t\t\t\t" . mostrar_php($cod_carga_cuadro) . "\n\t\t\t\t</li>\n\t\t\t\t\n\t\t\t\t<li>Cuando del cuadro se selecciona un elemento, el datos_tabla se carga con ese elemento,\n\t\t\t\tmarcando que a partir de aqui las operaciones de ABM se harán sobre este registro. En esta operación\n\t\t\t\tel registro cargado del datos_tabla funciona como un <strong>cursor</strong> que representa la fila actualmente seleccionada, \n\t\t\t\tsi no está cargado, no hay selección y viceversa.\n\t\t\t\t\t" . mostrar_php($cod_seleccion) . "\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<h3>Manejo del Formulario</h3>\n\t\t\t<ul>\n\t\t\t\t<li>Cuando el datos_tabla esta cargado, es señal que del cuadro algo se selecciono, entonces\n\t\t\t\tse dispone a cargar con estos datos. S usa el método get() del datos_tabla porque se sabe de antemano\n\t\t\t\tque se va a retornar un único registro, si la cantidad puede ser mayor se necesita llamar al método get_filas()\n\t\t\t\t\t" . mostrar_php($cod_carga_form) . "\n\t\t\t\t<li>Cuando el usuario selecciona una acción sobre el registro cargado en el formulario,\n\t\t\t\t\tes necesario indicar la acción al datos_tabla, sincronizarlo con la base de datos\n\t\t\t\t\t(ejecutando los comandos SQL) y lo resetea para limpiar la selección:</li>\n\t\t\t\t\t" . mostrar_php($cod_abm) . "\n\t\t\t</ul>\n\t\t";
        $vinculo = toba::vinculador()->get_url(null, 2654, array(), array('celda_memoria' => 'ejemplo'));
        echo "<p style='font-size:150%;text-align:center;'>\n\t\t\t\t<a target='_blank' href='{$vinculo}'>Ejecutar Operación</a></p>";
    }
예제 #2
0
    function generar_layout()
    {
        $codigo = '{$this->objeto_js}.iniciar_viejo = {$this->objeto_js}.iniciar;

{$this->objeto_js}.iniciar = function() {
	//Extensión
	this.iniciar_viejo(); //Llamada al original
	//Extensión
}';
        echo "\n\t\t\t<p>\n\t\t\t\tLa opción a atrapar eventos predefinidos es redefinir el comportamiento\n\t\t\t\tde métodos ya existentes. En general no es una metodología recomendada\n\t\t\t\tpero a veces es necesaria para casos no contemplados.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tAl no existir la herencia clásica, la redefinición del método tiene\n\t\t\t\tque simularla manualmente, esto es guardar el método viejo y definir el\n\t\t\t\tnuevo llamando cuando sea necesario al viejo. Vemos un ejemplo:\n\t\t\t</p>\n\t\t";
        echo mostrar_php($codigo);
    }
예제 #3
0
    function generar_layout()
    {
        $tab1 = toba_recurso::imagen_proyecto('tutorial/abm-mt-tab1.png');
        $tab2 = toba_recurso::imagen_proyecto('tutorial/abm-mt-tab2.png');
        $tab3 = toba_recurso::imagen_proyecto('tutorial/abm-mt-tab3.png');
        $codigo1 = '<?php
function conf__form_persona()
{
  return $this->get_relacion()->tabla("persona")->get();
}

function evt__form_persona__modificacion($registro)
{
	$this->get_relacion()->tabla("persona")->set($registro);
}
?>
';
        $codigo2 = '<?php
function conf__form_juegos()	
{
	return $this->get_relacion()->tabla("juegos")->get_filas(null,true);	
}

function evt__form_juegos__modificacion($datos)
{
	$this->get_relacion()->tabla("juegos")->procesar_filas($datos);	
}
?>';
        $codigo3 = '<?php
protected $s__deporte;

function conf__cuadro_deportes()	
{
	return $this->get_relacion()->tabla("deportes")->get_filas();	
}

function evt__cuadro_deportes__seleccion($seleccion) {	
	$this->s__deporte = $seleccion;
}

function conf__form_deportes()
{
	if(isset($this->s__deporte)) {	
		return $this->get_relacion()->tabla("deportes")->get_fila($this->s__deporte);	
	}
}

function evt__form_deportes__modificacion($registro)
{
	if(isset($this->s__deporte)){
		$this->get_relacion()->tabla("deportes")->modificar_fila($this->s__deporte, $registro);	
		$this->evt__form_deportes__cancelar();	
	}
}

function evt__form_deportes__baja()
{
	if(isset($this->s__deporte)){
		$this->get_relacion()->tabla("deportes")->eliminar_fila( $this->s__deporte );	
		$this->evt__form_deportes__cancelar();	
	}
}

function evt__form_deportes__alta($registro)
{
	$this->get_relacion()->tabla("deportes")->nueva_fila($registro);
}

function evt__form_deportes__cancelar()
{
	unset($this->s__deporte);
}
?>
';
        $codigo4 = '<?php
function conf__cuadro_deportes()	
{
	return $this->get_relacion()->tabla("deportes")->get_filas();	
}

function evt__cuadro_deportes__seleccion($seleccion) {	
	$this->get_relacion()->tabla("deportes")->set_cursor($seleccion);
}

function conf__form_deportes()
{
	if ($this->get_relacion()->tabla("deportes")->hay_cursor()) {
		return $this->get_relacion()->tabla("deportes")->get();
	}
}

function evt__form_deportes__modificacion($registro)
{
	$this->get_relacion()->tabla("deportes")->set($registro);
	$this->evt__form_deportes__cancelar();
}

function evt__form_deportes__baja()
{
	$this->get_relacion()->tabla("deportes")->set(null);
	$this->evt__form_deportes__cancelar();
}

function evt__form_deportes__alta($registro)
{
	$this->get_relacion()->tabla("deportes")->nueva_fila($registro);
}

function evt__form_deportes__cancelar()
{
	$this->get_relacion()->tabla("deportes")->resetear_cursor();
}
?>
';
        echo "\n\t\t\t<h2>Primer Tab: Formulario simple</h2>\n\t\t\t<img src='{$tab1}'>\n\t\t\t<p>En esta solapa se encuentra un formulario con un evento implícito <em>modificacion</em>.\n\t\t\tYa que se está editando la tabla cabecera de la relación (en este caso persona) sólo\n\t\t\tes posible que exista un único registro de esta tabla en la relación.</p>\n\t\t\t<p>\n\t\t\tEl método <em>set</em> del datos_tabla está preparado para estos casos, \n\t\t\tsi no existe el registro lo crea y si existe lo modifica. La carga en la configuración también\n\t\t\tes sencilla, con el método <em>get</em> se piden los datos del único registro, en caso de no \n\t\t\texistir este método retorna <em>null</em> mostrando el formulario vacío.\n\t\t\t</p>\n\t\t\t\n\t\t\t" . mostrar_php($codigo1) . "\n\t\t\t\n\t\t\t<h2>Segundo Tab: Formulario ml</h2>\n\t\t\t<img src='{$tab2}'>\n\t\t\t<p>En esta solapa, un formulario ML maneja las tres acciones (ABM) sobre una tabla\n\t\t\tde la relación (juegos de una persona). Lo interesante del formulario ML es que las acciones\n\t\t\tse realizan en javascript, informandolas al servidor como un bloque. El formato de la información\n\t\t\tque recibe el servidor es una matriz, donde por cada fila se informa su estado (A, B o M) junto con\n\t\t\tsu nuevo valor (exceptuando la baja).</p>\n\t\t\t<p>En lugar de recorrer esta estructura manualmente y con un case derivar cada acción de una fila \n\t\t\ta un método del datos_tabla, esta clase contiene un método <em>procesar_filas</em> que lo hace internamente.\n\t\t\tPara la carga se utiliza el método <em>get_filas</em> con su segundo parámetro en verdadero, indicando que \n\t\t\tlas filas se retornen en una matriz asociativa cuya clave sea la clave interna de la fila. Esto permite\n\t\t\tque el ML y el datos_tabla mantengan los mismos valores de claves de las filas.\n\t\t\t" . mostrar_php($codigo2) . "\n\t\t\t\n\t\t\t<h2>Tercer Tab: Cuadro y Formulario</h2>\n\t\t\t<img src='{$tab3}'>\n\t\t\t<p>\n\t\t\tLa última solapa tiene un cuadro y un formulario que maneja las acciones sobre una tabla de la relación\n\t\t\t(deportes de una persona). La estrategia aquí es manejar la interface de una forma clásica, en donde\n\t\t\ten el cuadro se muestran las filas disponibles y al seleccionarlas se pueden editar o borrar.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\tLa primera forma de encararlo es mantener en sesión la fila seleccionada, si no existe tal fila\n\t\t\tindica que el formulario se debe mostrar vacío dando lugar a una alta. Cuando un atributo de la \n\t\t\tclase comienza con <em>s__</em> indica que será mantenido en sesión, en este caso ese atributo es\n\t\t\t<em>\$s__deporte</em>. Las operaciones de baja y modificación utilizan esta fila seleccionada\n\t\t\tcomo parámetro para los métodos del datos_tabla.\n\t\t\t</p>\n\t\t\t" . mostrar_php($codigo3) . "\n\t\t\n\t\t\t<h2>Tercer Tab: Forma altenativa</h2>\n\t\t\t<p>La alternativa a mantener la selección en una variable de sesión y luego\n\t\t\tusar la API del datos_tabla sobre esta fila (para obtener sus valores, modificarla o borrarla) \n\t\t\tes usar una utilidad del datos_tabla llamada <strong>cursor</strong>. El cursor\n\t\t\tpermite apuntar a una fila particular, haciendo que ciertas operaciones utilizen esa fila\n\t\t\tcomo predeterminada. Por ejemplo si se fija el cursor en la fila 8 y luego, sea en el mismo u otro\n\t\t\tpedido de página, se hace un set(\$datos) en esa tabla, los datos afectan a esta fila.\n\t\t\t<p>\n\t\t\t\n\t\t\t<p>El cursor es de suma utilidad cuando se trabaja con relaciones más complejas ya que permite\n\t\t\tfijar valores en ciertas tablas y operar en forma reiterada sobre registros relacionados de otras\n\t\t\ttablas, esto se verá más adelante.</p>\n\t\t\t\n\t\t\t\n\t\t\t" . mostrar_php($codigo4) . "\n\t\t";
    }
예제 #4
0
파일: pant_api.php 프로젝트: emma5021/toba
    function generar_layout()
    {
        $api1 = toba_parser_ayuda::parsear_api('Fuentes/toba_mensajes', 'toba_mensajes', 'toba_editor');
        $api2 = toba_parser_ayuda::parsear_api('SalidaGrafica/toba_notificacion', 'toba_notificacion', 'toba_editor');
        $img = toba_recurso::imagen_proyecto('tutorial/notificacion.png', true);
        $wiki = toba_parser_ayuda::parsear_wiki('Referencia/Mensajes', 'Mensajes y Notificaciones', 'toba_editor');
        $ejemplo = toba::vinculador()->get_url(null, 1000204, array(), array('celda_memoria' => 'ejemplo'));
        $codigo1 = '<?php
//Suponiendo que el mensaje ingresado es: \'Esta es la %1% instancia de un mensaje global de Toba. Fecha de hoy: %2%.\'
$mensaje = toba::mensajes()->get("indice", array("primera", date("d/M/Y"));
echo $mensaje;
//La salida es: \'Esta es la primera instancia de un mensaje global de Toba. Fecha de hoy: 01/02/2007.\'
?>
';
        $codigo2 = '<?php
toba::notificacion()->agregar($mensaje);
toba::notificacion()->agregar($mensaje, "info");
?>
';
        echo "<p>\n\t\t\tPara centralizar el manejo de mensajes y permitir su posterior personalización\n\t\t\tToba brinda la posibilidad de definir los mensajes en el mismo editor web y\n\t\t\tposteriormente instanciarlos y notificarlos usando la API.\n\t\t</p>\n\t\t<p>Una vez creados los mensajes en el editor es posible recuperarlos en ejecución\n\t\tusando la clase {$api1}:\n\t\t</p>\n\t\t";
        echo mostrar_php($codigo1);
        echo "<p>\n\t\t\tEn lugar de mostrar el mensaje con un simple <em>echo</em> es posible notificarlo\n\t\t\tutilizando la clase {$api2}: \n\t\t</p>";
        echo mostrar_php($codigo2);
        echo $img;
        echo "<h2>Más info</h2>\n\t\t <ul><li>{$wiki}\n\t\t\t<li><a href='{$ejemplo}' target='_blank'>Ejemplo</a>\n\t\t</ul>\n\t\t";
    }