logo

WikiJuanan: EstandarAplicacionesWeb ...

Inicio | Indice De Paginas | Ultimas Modificaciones | Ultimos Commentarios | Usuarios | Registrarse | Conectar:  Contraseña:  

ProgramaciónDesarrollo Web


1. Agrupa la funcionalidad en módulos
Es decir: carpetas. Créate una carpeta para cada agrupación funcional.


2. Funciones comunes:
Configuración, acceso a base de datos, comprobación de login, generación de html, etc...


3. No pongas los nombres de los archivos en los require_once!!!
Créate un fichero php donde tienes un DEFINE para cada uno de los archivos de la aplicación


4. PROHIBIDO TERMINANTEMENTE escribir SQL en las paginas php!!
No tienen por que ser clases... Para cada modulo hay que crear un fichero, puede ser una clase, puede ser un archivo con funciones, debe contener toda la lógica de negocio y acceso a datos
Desde estas clases para acceder a la base de datos utilizarás una clase de acceso a datos común. Te aconsejo utilizar la de oscommerce


5. NO quiero ver ni un insert ni un update en todo el codigo!
Ni quiera en las clases para acceso a base de datos coge el oscommerce y mira la librería de acceso a datos. Se le pasa un array con el nombre del campo y el valor y la operación que quieres hacer con eso es suficiente. Si agregas un campo nuevo no te falla nada, se cambia en un momento.


6. Contexto
El contexto es la información que se necesita en todas páginas como: usuario de la base de datos, usuario logado, perfil. Una variable de sesión vamos. Pero en lugar de crear muchas variables utiliza un array y llámalo contexto o como tu quieras, pero solo una variable para todo, please


7. PLANTILLAS O PATRONES DE DISEÑO
Este es un aspecto muy importante para no marear al usuario. Primero debéis tener una plantilla de fichero (cabecera, menu, requires....) Despues, debéis acordar la posición de lo botones, estilo, etc.
Me refiero a lo siguiente: los mantenimientos van a tener listado, edición, agregar y eliminar. Lo lógico es que todo sea igual: un listado, un botón editar, un botón agregar y un botón eliminar, el de eliminar pide confirmación. Siempre de la misma forma. Que no se te ocurra poner el listado y la edición en la misma pantalla.
Eso tienes que definirlo al principio. Ojo con los enlaces que algunas veces editan y otras visualizan.....


8. Ultima lección de hoy ESTILO DE PROGRAMACIÓN
PROHIBIDO utilizar la misma variable para dos cosas, en phpfusion sobre todo lo hacen mucho. La variable $query sirve para la consulta sql, para el resultado de la base de datos y para yo que se. Es superdificil de depurar. Las variables tienen un propósito y un ámbito. PROHIBIDO meter todo en el mismo PHP!! Como oscommerce, que en el mismo fichero tiene el listado, la edición, el agregar, y la lógica de negocio!! Tiene un php por CRUD!! burraaaaaada!!!!


A ver, esto que te voy a decir es un poco complicado al principio, pero es cuestión de que hagas un ejemplo. Es el caso de SMF por eso me he pasado a este foro, está bien hecho.
Para cada CRUD te creas un controlador: Controlador Cursos.php? El controlador es el encargado de decidir a donde vamos, tienes una variable que vas pasando por GET que se llama action que dice lo que vas a hacer y lo que vas a hacer es:
1. Listado
2. Editar
3. Agregar
4. Eliminar
5. Grabar Edicion?
6. Grabar Eliminar?
7. Grabar Agregar?


Si hay más acciones pues las pones, tu código quedaría así
$action = (isset($_GET['action']) ? $_GET['action'] : 'list');


switch($action)
{
case “list”:
require_once(TASKLIST_VIEW);
$view=new Task List?();


break;


case “edit”:
require_once(TASKEDIT_VIEW);
$view=new Task Edit?($_GET['ID'],"edit");
break;


case “edit”:
require_once(TASKEDIT_VIEW);
$view=new Task Edit?($_GET['ID'],"edit");
break;


require_once(TASKEDIT_VIEW);
// ¿Ves qué no pongo nombres de archivos?


Cuando hago esto:
require_once(TASKLIST_VIEW);
$view=new Task List?();


Me estoy creado un objeto view de tipo Task List?. Por ahora no hago nada con ese objeto. Ahora el controlador tiene la cabecera, el menú, un montón de tablas y en medio de todo hace esto:
$view->doView();


Eso hecha una tabla entera 'pa' fuera con los botones todo lo que no sea «común», el controlador se despreocupa de lo que venga, le dice a la clase “pintate pishita”
Si es un delete, mira el controlador lo que hace:


case “donedelete”:


require_once(TASKSAVE_VIEW);
$view=new Task Save?($_POST,$action);
redirect(TASKS_CONTROLLER.»?action=list»);


Vamos por partes. Primero incluyo el archivo, me creo una nueva vista, pero como es un delete vuelvo a refrescar la ventana.


Una cosa sobre el redirect. El código sigue ejecutándose y llega al doView, el doView no pinta nada, simplemente borra
cuando al usuario le llega esta “vista”, viene en la cabecera con un redirect ¿qué tenemos ahora? Pues que el listado se dedica a pintar el listado y no tiene por que saber nada del resto


Primero do_delete y luego done_delete, todo es igual: do_edit, done_edit y luego list. El done es el que graba y hace un redirect al listado. Lo del redirect te evita el “double posting”


$rep=new tasksrepository(); /crea un nuevo repositorio, este es el unico que puede acceder a la base de datos


$fields=$this->def->fields;
$info_array=array(); /aquí se guarda la información


foreach($fields as $field){
$info_array[$field["name"]]=$rep->mapField($field,$this->post[$field["name"]]);}


if ($this->action=="doneedit")
$rep->update($info_array,$this->post[$this->def->id]);
if ($this->action=="doneadd")
$rep->addNew($info_array,$this->post[$this->def->id]);
if ($this->action=="donedelete")
$rep->delete($info_array,$this->post[$this->def->id]);


Esta es mi clase de grabar, que graba cualquier acción de cualquier controlador, siempre es la misma, solo tengo una.


Por ahora puedes hacerlo así
$info_array["campo"=>"valor"]


El valor lo coges del request rellenas todos los campos y ahora, por ejemplo, para agregar:
$rep->addNew($info_array,ID);


Ahora viene lo bueno, mira como defino el listado:
$this->fields["name"]=array(«name»=>"name","caption"=>"Nombre","control"=>"TEXTBOX");


Le digo al listado que me muestre el campo name, con cabecera Nombre y lo presenta como texto
Y ahora:
$this->fields["typeid"]=array(«name»=>"typeid","caption"=>"Tipo","control"=>"LIST","list"=>"TIPOTAREA");
Le digo que agregue el campo tipo pero que es una lista de valores que se llama tipo tarea


Mira mi lista de estados:


case “ESTADOS”:
$list["F"]="<center><IMG SRC='".IMAGES."ok.jpg'></center>";
$list["A"]="<center><IMG SRC='".IMAGES."no.jpg'></center>";
$list["P"]="<center><IMG SRC='".IMAGES."estado.jpg'></center>";
return $list;
break;


¿Cómo le digo los botones que tiene que mostrar?
$list->addAction(«Edita»,TASKS_CONTROLLER,"edit","row","taskid");
$list->addAction(«Borra»,TASKS_CONTROLLER,"delete","row","taskid");


Le digo que quiero un boton editar a nivel de ROW
y un botón nuevo al final
$list->addAction(«Nueva Tarea»,TASKS_CONTROLLER,"add","bottom");

No hay archivos en esta página. [Enseñar archivos/formulario]
No hay comentarios en esta pagina. [Enseñar comentarios/formulario]