SEINE está diseñado para hacer tareas habituales de desarrollo web simples y fáciles. Proporciona una caja de herramientas todo-en-uno y para que puedas empezar rápidamente, las diferentes partes de SEINE trabajan correctamente de manera conjunta o separada.
El objetivo de esta documentación es el de introducirte en los conceptos generales de SEINE y darte un rápido vistazo sobre como esos conceptos están implementados en SEINE. Si estás deseando comenzar un proyecto puedes empezar con la documentación aquí expuesta.
SEINE está diseñado para hacer tareas habituales de desarrollo web simples y fáciles. Proporciona una caja de herramientas todo-en-uno y para que puedas empezar rápidamente, las diferentes partes de SEINE trabajan correctamente de manera conjunta o separada.
El objetivo de esta documentación es el de introducirte en los conceptos generales de SEINE y darte un rápido vistazo sobre como esos conceptos están implementados en SEINE. Si estás deseando comenzar un proyecto puedes empezar con la documentación aquí expuesta.
SEIE proporciona una estructura organizativa básica que cubre los nombres de las clases, archivos, tablas de base de datos y otras convenciones más. Aunque lleva algo de tiempo aprender las convenciones, siguiéndolas evitará que tengas que hacer configuraciones innecesarias y hará que la estructura de la aplicación sea uniforme y que el trabajo con varios proyectos sea sencillo.
La capa Modelo representa la parte de tu aplicación que implementa la lógica de negocio. Es la responsable de obtener datos y convertirlos en los conceptos que utiliza tu aplicación. Esto incluye procesar, validar, asociar u otras tareas relacionadas con el manejo de datos.
En el caso de una red social la capa modelo se encargaría de tareas como guardar los datos del usuario, las asociaciones de amigos, almacenar y obtener fotos, buscar sugerencias de amistad, etc. Los objetos modelo serían «Amigo», «Usuario», «Comentario» o «Foto». Si quisieramos obtener más datos de nuestra tabla usuarios podríamos hacer lo siguiente:
La capa Vista renderiza una presentación de datos modelados. Separada de los objetos Modelo, es la responsable de usar la información disponible para producir cualquier interfaz de presentación que pueda necesitar tu aplicación.
La capa Controlador maneja peticiones de usuarios. Es la responsable de elaborar una respuesta con la ayuda de las capas Modelo y Vista.
Un controlador puede verse como un gestor que asegura que todos los recursos necesarios para completar una tarea son delegados a los trabajadores oportunos. Espera por las peticiones de los clientes, comprueba la validez de acuerdo con las reglas de autenticación y autorización, delega la búsqueda o procesado de datos al modelo, selecciona el tipo de presentación que el cliente acepta y finalmente delega el proceso de renderizado a la capa Vista.
Una vez descargado y cuando hayas descomprimido el fichero, estos son los directorios que verás:
Verás que tienes seis directorios principales:
En este directorio encontrarás un montón de utilidades destinadas a que el tema de la aplicación funcione. El núcleo de SEINE no necesita este directorio para su funcionamiento, puedes incorporar cualquier tema, ya sea BOOTSTRAP o similares, teniendo que hacer algunos cambios que veremos posteriormente. Veamos el contenido de esta carpeta:
extra-libs
Contiene un montón de recursos e utilidades para nuestra aplicación, siempre referentes a tema utilizado.
images
Este directorio contiene todas las imágenes, iconos, etc. que utiliza el tema que trae por defecto SEINE.
libs
Contiene recursos que no son de terceros o externos a tu aplicación. Esto te ayuda a separar tus librerías internas de las externas que estarán en la carpeta extra-libs.
Este directorio encontrarás todos los estilos y librerías de terceros para que el tema principal que usa SEINE funcione correctamente. El núcleo de SEINE no necesita este directorio para su funcionamiento, puedes incorporar cualquier tema, ya sea BOOTSTRAP o similares, teniendo que hacer algunos cambios que veremos posteriormente. Veamos el contenido de esta carpeta:
css
Contienen un montón de ficheros css que hacen referencia al tema principal de nuestra aplicación. Puedes encontrar en dicha carpeta el fichero "custom.css" que es dónde incorporaremos mejoras y nuevos estilos al tema visual que utiliza SEINE
js
Este directorio única y exclusivamente se utiliza para incluir los trozos de código repetidos que se utilizan en las diferentes páginas de nuestra aplicación. Por ejemplo, la cabecera, el pie de página y los menús son siempre idénticos sea cual sea nuestra página, con lo cual, podemos incluirlos siempre en nuestras páginas para que los cambios que se realicen dichos ficheros se vean reflejados en todas nuestras páginas.
Este directorio es el más importante y es dónde se encuentra en núcleo de funcionamiento de SEINE. Aquí es dónde podremos ver e incorporar la magia de nuestra aplicación. Veamos el contenido de esta carpeta:
database
Contiene la clase referente al acceso a la base o bases de datos que utilizará nuestra aplicación.
entity
Este directorio hace referencia a las entidades. Las entidades son las diferentes asociaciones que se dedican a una actividad común. Por ejemplo, una empresa sería una entidad y otra empresa sería otra entidad diferente.
injection
Contiene la clase referente a la seguridad para las posibles amenazas externas a la aplicación, por ejemplo, SQL Injection que se puede producir en los diferentes campos de texto que se ven en nuestra aplicación.
models
El modelo representa la parte de la aplicación que implementa la lógica de negocio. Ésto significa que es responsable de la recuperación de datos convirtiéndolos en conceptos significativos para la aplicación, así como su procesamiento, validación, asociación y cualquier otra tarea relativa a la manipulación de dichos datos.
A primera vista los objetos del modelo pueden ser considerados como la primera capa de la interacción con cualquier base de datos que podría estar utilizando tu aplicación. Pero en general representan los principales conceptos en torno a los cuales se desea implementar un programa.
NOTA: Los modelos que aquí se exponen, están asociados al tema por defecto de SEINE. Por ejemplo, los formularios generan trozos de código HTML con estilos y estructuras referente al tema actual. Si incluyéramos otro tema, deberíamos reescribir los trozos de código HTML que hacen referencia a dicho tema. Sin embargo, no deberíamos tocar la estructura lógica de dichos modelos.
En nuestro caso tendremos los siguientes modelos:
Es el modelo que se utiliza para la lectura de ficheros EXCEL (Utiliza el plugin phpexcel de la carpeta plugins)
Este modelo hace referencia a la subida de ficheros a nuestra aplicación desde un formulario
Genera correos electrónicos de diferente índole, por ejemplo, el alta de usuarios o la recuperación de contraseñas.
El modelo que genera tablas de una forma rápida.
plugins
Este directorio contiene plugins realizados por terceros para la realización de diferentes cosas. Por ejemplo: PDF, Excel, correos electrónicos, etc.
En nuestro caso tendremos los siguientes plugins por defecto:
Aplicación PHP para la realización de ficheros PDF
Aplicación PHP para la realización de ficheros Microsoft Excel
Aplicación PHP para el envío de correos electrónicos
rest
Contiene la clase referente a la lectura y escritura de API Rest Full para los datos enviados y recibidos por JSON.
users
Contiene la clase referente a los usuarios de nuestra aplicación. Disponemos de una clase usuario y de diferentes ficheros para cambiar la contraseña, cerrar sesión, recuperar contraseña y el login.
views
La vista hace una presentación de los datos del modelo estando separada de los objetos del modelo. Es responsable del uso de la información de la cual dispone para producir cualquier interfaz de presentación de cualquier petición que se presente.
Por ejemplo, como la capa de modelo devuelve un conjunto de datos, la vista los usaría para hacer una página HTML que los contenga.
La capa de la Vista no se limita únicamente a HTML o texto que represente los datos, sino que puede ser utilizada para ofrecer una amplia variedad de formatos en función de sus necesidades tales como videos, música, documentos y cualquier otro formato que puedas imaginar.
En este directorio incorporaremos todo el código referente al HTML de nuestra aplicación. Además, incorporaremos código PHP que realiza tareas para formar dicho HTML. Cabe destacar que no contiene nada del controlador.
La capa del controlador gestiona las peticiones de los usuarios. Es responsable de responder la información solicitada con la ayuda tanto del modelo como de la vista.
Los controladores pueden ser vistos como administradores cuidando de que todos los recursos necesarios para completar una tarea se deleguen a los trabajadores más adecuados. Espera peticiones de los clientes, comprueba su validez de acuerdo con las normas de autenticación o autorización, delega la búsqueda de datos al modelo y selecciona el tipo de respuesta más adecuado según las preferencias del cliente. Finalmente delega este proceso de presentación a la capa de la Vista.
NOTA: En SEINE el controlador o controladores se encuentran en el directorio raíz, es decir, como fichero en la misma carpeta dónde se encuentra la carpeta SEINE.
El ciclo de una petición típica en SEINE comienza cuando un usuario solicita una página o un recurso de tu aplicación. Esta solicitud es procesada por el servidor que realiza una petición a una página PHP que es el controlador.
Una vez que la solicitud llega al controlador, éste se comunicará con la capa del Modelo para cualquier proceso de captación de datos o el guardado de los mismos según se requiera. Una vez finalizada esta comunicación el controlador procederá a delegar en el objeto de vista correcto la tarea de generar una presentación resultante de los datos proporcionada por el modelo.
Finalmente, cuando esta presentación se genera, se envía de inmediato al usuario.
¿Por qué utilizar MVC? Debido a que es un patrón de diseño de software verdaderamente probado que convierte una aplicación en un paquete modular fácil de mantener y mejora la rapidez del desarrollo. La separación de las tareas de tu aplicación en modelos, vistas y controladores hace que su aplicación sea además muy ligera de entender. Las nuevas características se añaden fácilmente y agregar cosas nuevas a código viejo se hace muy sencillo. El diseño modular también permite a los desarrolladores y los diseñadores trabajar simultáneamente, incluyendo la capacidad de hacer prototipos rápidos.
La separación también permite a los desarrolladores hacer cambios en una parte de la aplicación sin afectar a los demás.
Si nunca has creado una aplicación de esta forma se necesita algún tiempo para acostumbrarse, pero estamos seguros de que una vez que hayas terminado tu primera aplicación con SEINE no vas a querer hacerlo de cualquier otra manera.
El modelo representa la parte de la aplicación que implementa la lógica de negocio. Esto significa que es responsable de la recuperación de datos convirtiéndolos en conceptos significativos para la aplicación, así como su procesamiento, validación, asociación y cualquier otra tarea relativa a la manipulación de dichos datos.
A primera vista los objetos del modelo pueden ser considerados como la primera capa de la interacción con cualquier base de datos que podría estar utilizando tu aplicación. Pero en general representan los principales conceptos en torno a los cuales se desea implementar un programa.
Es el modelo que se utiliza para la lectura de ficheros CSV
Parámetros de entrada constructor de la clase CSV:
- $file_name
Ubicación del fichero
- $parse_header
Por defecto a false, quiere decir si el fichero CSV tiene una línea de cabecera
- $delimiter
Por defecto ";". El carácter de limitación de columna
- $length
Por defecto 8000 líneas. El tamaño de lectura.
Parámetro de entrada clase get:
- $max_lines
Número máximo de líneas a leer.
Ejemplo:
$importer = new csv($carpeta.$fich, true, ";"); $data = $importer->get(2000); //mirar el número de columnas if(count(array_keys($data[0]))<=10) { //buscar id_vendor por la primera PO (siempre es el mismo para todo el fichero) foreach($data as $linea) { //mete en el array el nombre de la cabecera por si hay espacios no de error $keys = array_keys($linea); echo $linea[$keys[0]]."', '".$linea[$keys[1]]."', '".$linea[$keys[2]]."', '".$linea[$keys[3]]."', '".$linea[$keys[4]]."', '".$linea[$keys[5]]."', ".$linea[$keys[6]].", '".$linea[$keys[7]]."', '".$linea[$keys[8]]; }//fin foreach }//fin if
Es el modelo que se utiliza para la lectura de ficheros EXCEL (Utiliza el plugin phpexcel de la carpeta plugins)
Parámetros de entrada clase EXCEL:
Parámetros de entrada método readExcel:
- $filename
Fichero a leer
Ejemplo:
$excel = new excel(); $data = $excel->readExcel("./imports/".$fich); //la primera columna empieza en 12 $cont=1; if($data[0]==1) { $error=0; foreach($data[1] AS $row) { if($cont>=12 && $row["A"]=="") { break; } if($cont>=12) { echo "'".$row["A"]."', '".$row["B"]."', '".$row["C"]."', '".$row["D"]."', ".strtotime($date).", '".$row["F"]."', ".$row["G"].", '".$row["H"]."', ".str_replace(",",".",$row["I"]).", ".str_replace(",",".",$row["J"]).", '".$row["K"]."', '".$row["L"]."', '".$row["M"]."', '".$row["N"]."'"; } } } else { $error=1; $ms_err.="El fichero subido no corresponde al tipo de archivo seleccionado.<br>"; }
Este modelo hace referencia a la subida de ficheros a nuestra aplicación desde un formulario.
Parámetros de entrada clase files:
Guarda un fichero en una carpeta dada con un nombre dado
Parámetros de entrada método saveFile:
- $filename
Nombre que hace referencia a la variable $_FILE del formulario enviado
- $uploaddir
Carpeta dónde se va a guardar el fichero
- $archivo
Nombre del archivo guardado
- $addDuplicate
Por defecto a true. Añadir marca de tiempo en el nombre del fichero
Ejemplo:
$fi=new files(); $fich = $fi->saveFile("fichero", $carpeta, $_FILES["fichero"]["name"], true); echo "El nombre del fichero es: ".$fich."<br>";
Este modelo hace referencia a la subida de ficheros a nuestra aplicación desde un formulario.
Parámetros de entrada clase files:
Guarda un Array de ficheros en una carpeta dada con un nombre dado
Parámetros de entrada método saveMultipleFile:
- $filename
Nombre que hace referencia a la variable $_FILE del formulario enviado
- $pos
La posición en el Array de archivos al que se hace referencia
- $uploaddir
Carpeta dónde se va a guardar el fichero
- $archivo
Nombre del archivo guardado
- $addDuplicate
Por defecto a true. Añadir marca de tiempo en el nombre del fichero
- $addExtension
XXXXXXX Por defecto a true.
Ejemplo:
$total=0; if(isset($_FILES["fichero"]["name"])) { $total = count($_FILES['fichero']['name']); } if($total>0) { for($i=0 ; $i < $total ; $i++ ) { $fi=new files(); $fich = $fi->saveMultiFile("fichero", $i, $carpeta, $_FILES['fichero']['name'][$i], false); echo "El nombre del fichero es: ".$fich."<br>"; } }
Guarda un archivo de una URL en una carpeta dada con un nombre dado
Parámetros de entrada método saveFileURL:
- $url
La dirección URL dónde se encuentra el fichero a descargar
- $uploaddir
Carpeta dónde se va a guardar el fichero
- $archivo
Nombre del archivo guardado
- $addDuplicate
Por defecto a true. Añadir marca de tiempo en el nombre del fichero
Ejemplo:
$file=new files() $imagen = $file->saveFileURL($input["url"], $carpeta, $input["id_product"], true);
Genera correos electrónicos de diferente índole, por ejemplo, el alta de usuarios o la recuperación de contraseñas.
Parámetros de entrada clase mails:
- $language
Por defecto "es". Especifica el idioma del correo electrónico a enviar.
Genera y envía un correo electrónico con la contraseña si se desea.
Parámetros de entrada método generateRecoveryMail:
- $user
Nombre de usuario
- $password
Contraseña (sin encriptar)
- $send_password
Si se desea enviar la contraseña sin encriptar por correo electrónico.
Ejemplo:
$enviomail = new mails("es"); $enviomail->generateRecoveryMail($usuario->user, $contra, $recuperar_plano);
Genera y envía un correo electrónico con de invitación a formar parte del sistema.
Parámetros de entrada método generateInvitationMail:
- $user
Nombre de usuario
- $password
Contraseña (sin encriptar)
- $send_password
Si se desea enviar la contraseña sin encriptar por correo electrónico.
Ejemplo:
$enviomail = new mails("es"); $enviomail->generateInvitationMail($_POST["user"], $code, true);
Genera y envía un correo electrónico con una reinvitación a un usuario ya registrado anteriormente.
Parámetros de entrada método generateReinvitationMail:
- $user
Nombre de usuario
Ejemplo:
$enviomail = new mails("es"); $enviomail->generateReinvitationMail($_POST["user"]);
Genera una tabla básica sin paginación.
Parámetros de entrada del método generateBasicTable:
- $rows
Array bidimensional que contiene todos los datos de la tabla, siendo la primera posición la cabecera de la tabla.
- $id
Por defecto vacío. Es el id que hace referencia a la tabla
- $theadClass
Por defecto el estilo "thead-light". Hace referencia a la clase que llevará el th de la cabecera
- $class
Por defecto “table”. Es la clase que hace referencia a la tabla
- $thScope
Por defecto “col”. Hace referencia al scope de la tabla
Ejemplo:
$i=1; $sql="select * from table where id like '".$_REQUEST["id"]."'"; $conexion = new conectaBD(); $res = $conexion->SqlQuery($sql); if($res->rowCount()>0) { $arrayx[0][0]="Column 1"; $arrayx[0][1]="Column 2"; $arrayx[0][2]="Column 3"; while($row=$res->fetch()) { $arrayx[$i][0]=$row["tbl_id"]; $arrayx[$i][1]=$row["tbl_return"]; $arrayx[$i][2]=$row["tbl_request"]; $i++; } $tbl=new table(); $tbl->generateBasicTable($arrayx, "idtable", " thead-light ", "table", "col"); }
Genera una tabla con paginación.
Parámetros de entrada del método generateCompleteTable:
- $rows
Array bidimensional que contiene todos los datos de la tabla, siendo la primera posición la cabecera de la tabla.
- $columnsSorted
Array con las columnas que se pueden ordenar
- $column
Por defecto -1 que quiere decir que ninguna ordenada. Columna a ordenar
- $sorted
Por defecto a vacío. Ordenación ascendente (asc) o descendente (desc) de la columna ordenada
- $maxRegs
Por derfecto -1 que quiere decir que se muestran todos los registros. Número máximo de registros por página
- $page
Por defecto 1. Página actual
- $show
Número de registros a mostrar en la paginación por delante y por detrás. Es decir, si ponemos 2 y estamos en la página 5 mostrará en la paginación 3,4 y 6,7 después del 5.
- $totalRegs
Número total de registros
- $search
Por defecto vacío. Cadena de búsqueda para el envío de la búsqueda en la paginación
- $strGET
Más parámetros de envío que se incorporarán a la URL de la paginación
- $id
Por defecto vacío. Es el id que hace referencia a la tabla
- $theadClass
Por defecto el estilo "thead-light". Hace referencia a la clase que llevará el th de la cabecera
- $class
Por defecto “table”. Es la clase que hace referencia a la tabla
- $thScope
Por defecto “col”. Hace referencia al scope de la tabla
Ejemplo:
$i=1; $order=""; $search = ""; $searchstr = ""; $strGET = ""; if(isset($_GET["col"]) && isset($_GET["sor"])) { switch($_GET["col"]) { case "0": $order=" order by tbl_id ".$_GET["sor"]; $column=$_GET["col"]; $sorted=$_GET["sor"]; break; case "1": $order=" order by tbl_type ".$_GET["sor"]; $column=$_GET["col"]; $sorted=$_GET["sor"]; break; case "4": $order=" order by tbl_date ".$_GET["sor"]; $column=$_GET["col"]; $sorted=$_GET["sor"]; break; default: $order=" order by tbl_date ASC"; $column=1; $sorted="ASC"; } } else { $column=-1; $sorted=""; $order=" order by tbl_date ASC"; } //paginación $maxRegs = 25; if(isset($_GET["pag"])) { $pagina = $_GET["pag"]; $inicio = ($pagina - 1) * $maxRegs; } else { $inicio = 0; $pagina = 1; } //fin paginación $conexion = new conectaBD(); if(isset($_REQUEST["src"]) && trim($_REQUEST["src"])!="") { $searchstr=trim($_REQUEST["src"]); $search .= "and (tbl_id like '%".trim($_REQUEST["src"])."%' or tbl_type like '%".trim($_REQUEST["src"])."%') "; } $sql="select * from table where 1=1 ".$search.$order; $totalRegsRes = $conexion->SqlQuery($sql); $totalRegs = $totalRegsRes->rowCount(); $sql.=" LIMIT ".$inicio.",".$maxRegs; $arrayx[0][0]="ID"; $arrayx[0][1]="Tipo"; $arrayx[0][2]="Razón"; $arrayx[0][3]="Título"; $arrayx[0][4]="Fecha"; $arrayx[0][5]="Estado"; $arrayx[0][6]="Total"; $columnsSorted = array( 0 => true, 1 => true, 2 => false, 3 => false, 4 => true, 5 => false, 6 => false ); $res = $conexion->SqlQuery($sql); if($res->rowCount()>0) { while($row=$res->fetch()) { $usu = new users(); $arrayx[$i][0]='<a href="javascript:void(0);" id="id_dis'.$row["tbl_id"].'" class="disputa">'.$row["tbl_id"].'</a>'; $arrayx[$i][1]=$row["tbl_type"]; $arrayx[$i][2]=$row["tbl_reason"]; $arrayx[$i][3]=$row["tbl_title"]; $arrayx[$i][4]=date("d/m/Y", $row["tbl_date"]); $arrayx[$i][5]=$row["tbl_status"]; $arrayx[$i][6]=number_format($row["tbl_amount"],2,",","."); $i++; } } if(isset($_REQUEST["src"]) && trim($_REQUEST["src"])!="") { echo '<p>Resultados para la búsqueda de: '.trim($_REQUEST["src"]).' <span class="badge badge-pill badge-danger" style="width:24px !important; cursor:pointer;" onclick="location.href=window.location.pathname"><i class="m-r-10 mdi mdi-close"></i></span></p>'; } $tbl=new table(); $tbl->generateCompleteTable($arrayx,$columnsSorted, $column, $sorted, $maxRegs, $pagina, 2, $totalRegs, $searchstr, $strGET, "dateTable");
Genera una tabla JQuery con paginación, buscador y responsive.
Parámetros de entrada del método generateBasicDataTable:
- $rows
Array bidimensional que contiene todos los datos de la tabla, siendo la primera posición la cabecera de la tabla.
- $id
Por defecto vacío. Es el id que hace referencia a la tabla
- $theadClass
Por defecto el estilo "thead-light". Hace referencia a la clase que llevará el th de la cabecera
- $class
Por defecto “table”. Es la clase que hace referencia a la tabla
- $thScope
Por defecto “col”. Hace referencia al scope de la tabla
Ejemplo:
$i=1; $sql="select * from table_det where id=".$_GET["id"]; $arrayx[0][0]="Column 1"; $arrayx[0][1]="Column 2"; $arrayx[0][2]="Column 3"; $arrayx[0][3]="Column 4"; $arrayx[0][4]="Column 5"; $res = $conexion->SqlQuery($sql); if($res->rowCount()>0) { while($row=$res->fetch()) { $arrayx[$i][0]=$ row["field1"]; $arrayx[$i][1]=$ row["field2"]; $arrayx[$i][2]=$ row["field3"]; $arrayx[$i][3]=$ row["field4"]; $arrayx[$i][4]=$ row["field5"]; $i++; } } $tbl=new table(); $tbl->generateBasicDataTable($arrayx, "idtable", "thead-light", "table", "col");
Es el modelo que nos permite la generación de diferentes formularios.
Parámetros de entrada clase form:
Genera un formulario básico de login.
Parámetros de entrada del método generateFormLogin:
- $n_user
Por defecto “usuario”. Es el name que se envía en el input de usuario
- $p_user
Por defecto “Email”. Es el placeholder que se muestra en el input de usuario
- $n_password
Por defecto “pass”. Es el name que se envía en el input de contraseña
- $p_password
Por defecto “Contraseña”. Es el placeholder que se muestra en el input de contraseña
- $method
Por defecto “post”. Es el método de envío del formulario.
- $action
Por defecto “”. La URL de envío del formulario
- $class
Por defecto “form-horizontal m-t-20”. La clase de la etiqueta form
- $id
Por defecto “formulario”. El id del formulario
- $string_recover
Por defecto “Recuperar contraseña”. Texto que se muestra en el enlace de recuperar contraseña
- $string_acc
Por defecto “Acceder”. Texto del botón de envío del formulario.
- $ms_err
Por defecto “Usuario y/o contraseña incorrectos.”. Texto que aparece al no validarse correctamente.
Ejemplo:
$formlogin = new forms(); $formlogin->generateFormLogin();
Genera un formulario básico de recuperación de contraseña.
Parámetros de entrada del método generateFormRecover:
- $n_user
Por defecto “usuariorecorvery”. Es el name que se envía en el input de usuario
- $p_user
Por defecto “Email”. Es el placeholder que se muestra en el input de usuario
- $method
Por defecto “post”. Es el método de envío del formulario.
- $action
Por defecto “”. La URL de envío del formulario
- $class
Por defecto “col-12”. La clase de la etiqueta form
- $id
Por defecto “formulario2”. El id del formulario
- $string_return
Por defecto “Volver a Inicio”. Es el texto del botón de volver al formulario login
- $string_acc
Por defecto “Enviar”. Texto del botón de envío del formulario.
- $ms_err
Por defecto “Usuario desconocido.”. Texto que aparece al no validarse correctamente.
- $ms_sucess
Por defecto “Mensaje enviado, revise su correo electrónico.”.
Ejemplo:
$formrecover= new forms(); $formrecover ->generateFormRecover();
Genera un formulario básico de cambio de contraseña.
Parámetros de entrada del método generateFormChangePassword:
- $n_password
Por defecto “pass”. Es el name que se envía en el input de contraseña
- $p_password
Por defecto “Contraseña”. Es el placeholder que se muestra en el input de contraseña
- $n_password2
Por defecto “pass2”. Es el name que se envía en el input de confirmar contraseña
- $p_password2
Por defecto “Contraseña contraseña”. Es el placeholder que se muestra en el input de confirmar contraseña
- $method
Por defecto “post”. Es el método de envío del formulario
- $action
Por defecto “”. La URL de envío del formulario
- $class
Por defecto “form-horizontal m-t-20”. La clase de la etiqueta form
- $id
Por defecto “formulario”. El id del formulario
- $string_acc
Por defecto “Cambiar”. Texto del botón de envío del formulario.
- $ms_err
Por defecto “Ha habido un error.”. Texto que aparece al no validarse correctamente.
Ejemplo:
$formchangepass = new forms(); $formchangepass ->generateFormChangePassword();
Genera un formulario básico de cambio de contraseña.
Parámetros de entrada del método generateFormChangePassword:
- $n_password
Por defecto “pass”. Es el name que se envía en el input de contraseña
- $p_password
Por defecto “Contraseña”. Es el placeholder que se muestra en el input de contraseña
- $n_password2
Por defecto “pass2”. Es el name que se envía en el input de confirmar contraseña
- $p_password2
Por defecto “Contraseña contraseña”. Es el placeholder que se muestra en el input de confirmar contraseña
- $method
Por defecto “post”. Es el método de envío del formulario
- $action
Por defecto “”. La URL de envío del formulario
- $class
Por defecto “form-horizontal m-t-20”. La clase de la etiqueta form
- $id
Por defecto “formulario”. El id del formulario
- $string_acc
Por defecto “Cambiar”. Texto del botón de envío del formulario.
- $ms_err
Por defecto “Ha habido un error.”. Texto que aparece al no validarse correctamente.
Ejemplo:
$formchangepass = new forms(); $formchangepass ->generateFormChangePassword();
Genera una cabecera de un formulario por pasos.
Parámetros de entrada del método generateHeaderFormWizard:
- $steps
Array con el nombre de los pasos
- $step_active
Posición del array activo
- $id
Por defecto “steps-uid-“.Es el id que se incorpora a cada uno de los pasos
Ejemplo:
$formwizard = new forms(); $steps[1]="Dirección/Datos"; $steps[2]="Detalle"; echo $formwizard->generateHeaderFormWizard($steps,1,"steps-uid-");
Ayuda para volver atrás en un formulario por pasos con JQuery:
$(".wizard2").click(function() { var getID = $(this).attr('id').replace('steps-uid-0-t-','');
window.location.href = "url.php?id=" + getID;
}
Genera la cabecera de un formulario clásico.
Parámetros de entrada del método generateClassicFormArray:
- $method
Es el método de envío del formulario
- $action
La URL de envío del formulario
- $class
La clase de la etiqueta form
- $id
El id del formulario
- $string_acc
Por defecto “Enviar”. Texto del botón de envío del formulario.
- $ms_err
Texto que aparece al no validarse correctamente.
- $input_array
Array con los diferentes elementos que formarán el formulario
Genera la cabecera de un formulario clásico horizontal.
Parámetros de entrada del método generateClassicHorizontalFormArray:
- $method
Es el método de envío del formulario
- $action
La URL de envío del formulario
- $class
La clase de la etiqueta form
- $id
El id del formulario
- $string_acc
Por defecto “Enviar”. Texto del botón de envío del formulario.
- $ms_err
Texto que aparece al no validarse correctamente.
- $input_array
Array con los diferentes elementos que formarán el formulario
Genera el código para los diferentes elementos enviados en un array.
Parámetros de entrada del método generateCodeClassicFormArray:
- $input_array
Array con los diferentes elementos que formarán el formulario
Genera el código para los diferentes elementos enviados en un array.
Parámetros de entrada del método generateCodeHorizontalClassicFormArray:
- $input_array
Array con los diferentes elementos que formarán el formulario
Ejemplo de un formulario completo:
$method = "post"; $action = "enviar.php" $class="formulario"; $id="formulario"; $string_acc="Modificar"; $ms_err="Error"; $form = array ( array( "tag" => "input", "type" => "text", "name" => "nombre", "id" => "nombre", "class" => "form-control", "placeholder" => "Nombre", "error" => "", "required" => "required", "data" => "", "value" => "" ), array( "tag" => "textarea", "type" => "", "name" => "direccion", "id" => "direccion", "class" => "form-control", "placeholder" => "Dirección", "error" => "", "required" => "required", "data" => "", "value" => $row["address"] ), array( "tag" => "select", "type" => "", "name" => "pais", "id" => "pais", "class" => "select2 form-control custom-select", "placeholder" => "País", "error" => "", "required" => "style='width: 100%; height:36px;'", "data" => $wizard->generateSelectBD("paises", $row["country"]), "value" => "" ), array( "tag" => "input", "type" => "tel", "name" => "telf", "id" => "telf", "class" => "form-control", "placeholder" => "Teléfono", "error" => "", "required" => "required", "data" => "", "value" => $row["phone"] ), array( "tag" => "input", "type" => "email", "name" => "mail", "id" => "mail", "class" => "form-control", "placeholder" => "Correo electrónico", "error" => "", "required" => "required", "data" => "", "value" => $row["email"] ) ); echo $wizard->generateClassicFormArray($method, $action, $class, $id, $string_acc, $ms_err, $form);
En los formularios existen varios elementos básicos de recolección de datos. Pueden ser desde un cajetín de texto a una lista desplegable.
Elemento decimal
Es un cajetín de texto dónde se pueden meter un número con dos decimales
Ejemplo:
array( "tag" => "decimal", "type" => "", "name" => "peso", "id" => "peso", "class" => "form-control", "placeholder" => "Peso", "error" => "", "required" => "required", "data" => "", "value" => "1" )
Elemento hidden
Es un elemento oculto en un formulario
Ejemplo:
array( "tag" => "hidden", "type" => "hidden ", "name" => " buscaren", "id" => "buscaren ", "class" => "", "placeholder" => "", "error" => "", "required" => "", "data" => "", "value" => "blanco" )
Elemento textarea
Es un cajetín de texto dónde podemos colocar saltos de línea
Ejemplo:
array( "tag" => "textarea", "type" => "", "name" => "direccion", "id" => "direccion", "class" => "form-control", "placeholder" => "Dirección", "error" => "", "required" => "", "data" => "", "value" => "" )
Elemento radio
Elemento de única opción dentro de un conjunto de ellas.
Hay que tener en cuenta que el array pasado en el campo data tiene que estar formado por posición:
Ejemplo:
//creación del Array de opciones $radio_placeholder_1 = array( //array(value, name, selected) array("1","Blanco","checked"), array("2","Negro",""), array("3","Color","") ); array( "tag" => "radio", "type" => "radio", "name" => "tipo", "id" => "tipo", "class" => "custom-control custom-radio", "placeholder" => "", "error" => "", "required" => "required", "data" => $radio_placeholder_1, "value" => "" )
Elemento checkbox
Elemento de varias opciones dentro de un conjunto de ellas.
Hay que tener en cuenta que el array pasado en el campo data tiene que estar formado por posición:
Ejemplo:
//creación del Array de opciones $check_placeholder_1 = array( //array(value, name, selected) array("1","Realizado trabajo","checked"), ); array( "tag" => "checkbox", "type" => "checkbox ", "name" => "realizado", "id" => "realizado", "class" => "custom-control custom-checkbox", "placeholder" => "", "error" => "", "required" => "required", "data" => $check_placeholder_1 , "value" => "" )
Elemento checkbox
Elemento de varias opciones dentro de un conjunto de ellas.
Hay que tener en cuenta que el array pasado en el campo data tiene que estar formado por posición:
Ejemplo:
//creación del Array de opciones $check_placeholder_1 = array( //array(value, name, selected) array("1","Realizado trabajo","checked"), ); array( "tag" => "checkbox", "type" => "checkbox ", "name" => "realizado", "id" => "realizado", "class" => "custom-control custom-checkbox", "placeholder" => "", "error" => "", "required" => "required", "data" => $check_placeholder_1 , "value" => "" )
Elemento date
Es un cajetín de texto dónde podemos incorporar una fecha. Es dependiente de librerías JQuery que se integran en SEINE.
- CSS:
<link rel="stylesheet" type="text/css" href="./assets/libs/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css">
<script src="./assets/libs/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script> <script src="./assets/libs/bootstrap-datepicker/dist/locales/bootstrap-datepicker.es.min.js"></script>
También realizar la llamada por JQuery a las funciones
jQuery('#datepicker-autoclose').datepicker({ autoclose: true, todayHighlight: true, language: 'es' });
Ejemplo:
array( "tag" => "date", "type" => "text", "name" => "fecha", "id" => "datepicker-autoclose", "class" => "form-control", "placeholder" => "Fecha", "error" => "", "required" => "", "data" => "", "value" => "" )
Elemento separation
Genera una separación con un texto dado.
Ejemplo:
array( "tag" => "separation", "type" => "", "name" => "", "id" => "", "class" => "", "placeholder" => "", "error" => "", "required" => "", "data" => "", "value" => "" )
Elemento select
Genera una lista desplegable pasando un array en el data.
Ejemplo:
array( "tag" => "select", "type" => "", "name" => "id_transportista", "id" => "id_transportista", "class" => "form-control custom-select", "placeholder" => "Transportista", "error" => "", "required" => "style='width: 100%; height:36px;'", "data" => $form->generateSelectCustomBD("transportistas","activo=1",$campos,"id_transportista",$id_transportista,"Medios propios","0"), "value" => "" )
Este elemento permite añadir un array en sus datos. SEINE provee una generación de campos para los elementos select de forma automática. Para ello debemos disponer de un objeto form para poder llamar al método de la clase.
Ejemplo:$form = new forms();
Genera el código para una lista de un formulario consultando una tabla de la base de datos.
Parámetros de entrada método generateSelectCustomBD:
- $tabla
El nombre de la tabla de la base de datos
- $condición
Condición para la consulta SQL
- $campos
Array con los campos mostrar
- $id_compare
Es el campo que se tiene que comparar con el valor del $id
- $id
Es el id del select que se va a poner como selected
- $default
Añade un nuevo elemento al principio de la lista
- $value_default
El valor que tiene el campo default
Ejemplo:
//array con los campos a mostrar (se pueden poner cuantos quieras) $campos[0]="nombre"; array( "tag" => "select", "type" => "", "name" => "id_transportista", "id" => "id_transportista", "class" => "form-control custom-select", "placeholder" => "Transportista", "error" => "", "required" => "style='width: 100%; height:36px;'", "data" => $form->generateSelectCustomBD("transportistas","activo=1",$campos,"id_transportista",$id_transportista,"Medios propios","0"), "value" => "" )
En la base de datos por defecto de SEINE, existe una tabla llamada listados_app que su función principal es la de tener listados que no necesitan de una tabla en la base de datos.
Parámetros de entrada método generateSelectBD:
- $tabla
El nombre de la tabla de la base de datos
- $id
Es el id del select que se va a poner como selected
Ejemplo:
array( "tag" => "select", "type" => "", "name" => "pais", "id" => "pais ", "class" => "select2 form-control custom-select ", "placeholder" => "País", "error" => "", "required" => "style='width: 100%; height:36px;'", "data" => $form->generateSelectBD("paises", 0), "value" => "" )
SEINE proporciona una serie de plugins preinstalados para facilitar el desarrollo de aplicaciones.
SEINE dispone de sus propios plugins, y estos se encuentran en la carpeta plugins. El tema que trae por defecto SEINE, también incorpora plugins a nivel de código JQuery.
Primero explicaremos los plugings del tema preinstalado y seguidamente de los que incorpora SEINE.
Se trata de un plugin de tema y nos facilita la inclusión de máscaras en campos de texto.
Para que esto función debemos incorporar el JQuery correspondiente:
- JQuery:
<script src="./assets/libs/inputmask/dist/min/jquery.inputmask.bundle.min.js"></script> <script src="./dist/js/pages/mask/mask.init.js"></script>
Para añadir una nueva máscara debemos acceder al fichero “dist/js/pages/mask/ mask.init.js” y allí podremos añadir una nueva máscara
Ejemplo:
Este ejemplo creará una máscara a nuestro campo de texto con la clase “fra-inputmask” dónde a es cualquier letra y 9 es cualquier número. Los guiones (-) saldrán por defecto
$(".fra-inputmask").inputmask("aa-a99-aa-9999");
Se trata de un plugin externo para realizar archivos PDF. Tiene el inconveniente de que no permite la inclusión de ficheros externos CSS.
Toda la documentación sobre este plugin se encuentra en: https://github.com/dompdf/dompdf/releases
- JQuery:
<script src="./assets/libs/inputmask/dist/min/jquery.inputmask.bundle.min.js"></script> <script src="./dist/js/pages/mask/mask.init.js"></script>
Ejemplo:
include_once("SEINE/plugins/dompdf-0.8.0/autoload.inc.php"); use Dompdf\Dompdf; $dompdf = new Dompdf(); $dompdf->loadHtml(' <html><body>Prueba PDF</body></html>'); // (Optional) Setup the paper size and orientation $dompdf->setPaper('A4'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser //$dompdf->stream(); $dompdf->stream(); $pdf_gen = $dompdf->output();
Se trata de un plugin externo para realizar archivos Excel, tanto lectura como escritura. La lectura en SEINE se realiza con la clase “excel”.
Toda la documentación sobre este plugin se encuentra en: https://medium.com/matrix-developments/php-excel-una-ligera-alternatva-para-phpexcel-f18623356c91
Se trata de un plugin externo para realizar envíos de correos electrónicos. El envío de correos electrónicos en SEINE se realiza con la clase “mails”.
Toda la documentación sobre este plugin se encuentra en: https://github.com/PHPMailer/PHPMailer/releases