Documentación


Prólogo


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.

Convenciones sobre configuración

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

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

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

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.

Estructura de directorios


Una vez descargado y cuando hayas descomprimido el fichero, estos son los directorios que verás:

  • - assets
  • - dist
  • - inc
  • - SEINE

Verás que tienes seis directorios principales:

  • - assets que es donde se almacenan todos los archivos jquery para que el tema de la aplicación funcione e imágenes del tema.
  • - dist que es donde se almacenan todos los estilos css y librerías jquery para que el tema de la aplicación funcione correctamente.
  • - inc Los diferentes ficheros que se incluyen en todas las páginas, que incluye la cabecera, pié de página y menús.
  • - SEINE que es donde harás tu magia: aquí guardarás los ficheros de tu aplicación

El directorio ASSETS


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.

El directorio DIST


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

Contiene recursos de terceros. Esto te ayuda a separar tus librerías internas de las externas que estarán en la carpeta extra-libs o libs en la carpeta assets.

El directorio INC


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.

El directorio SEINE


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:

  • - csv
    Es el modelo que se utiliza para la lectura de ficheros CSV
  • - excel

Es el modelo que se utiliza para la lectura de ficheros EXCEL (Utiliza el plugin phpexcel de la carpeta plugins)

  • - file

Este modelo hace referencia a la subida de ficheros a nuestra aplicación desde un formulario

  • - form
    Es el modelo que nos permite la generación de diferentes formularios
  • - mail

Genera correos electrónicos de diferente índole, por ejemplo, el alta de usuarios o la recuperación de contraseñas.

  • - table

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:

  • - dompdf-0.8.0

Aplicación PHP para la realización de ficheros PDF

  • - phpexcel

Aplicación PHP para la realización de ficheros Microsoft Excel

  • - phpmailer

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.

¿Dónde se encuentra la capa 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.

Casi todas las solicitudes para la aplicación van a seguir este patrón básico.

Beneficios


¿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.

Modelos


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.

El modelo CSV


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

El modelo EXCEL


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>";
}
                         

El modelo FILES


Este modelo hace referencia a la subida de ficheros a nuestra aplicación desde un formulario.
Parámetros de entrada clase files:

Método saveFile


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>";
                        

El modelo FILES


Este modelo hace referencia a la subida de ficheros a nuestra aplicación desde un formulario.
Parámetros de entrada clase files:

Método saveMultipleFile


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>";
                            }
                        }
                        

Método saveFileURL


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);
						

El modelo MAILS


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.

Método generateRecoveryMail


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);
					

Método generateInvitationMail


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);
                    

Método generateReinvitationMail


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"]);
                        

El modelo TABLE


Genera tablas de una forma rápida.
Parámetros de entrada clase table:

Método generateBasicTable


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");
}

Método generateCompleteTable


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");

Método generateBasicDataTable


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");

El modelo FORM


Es el modelo que nos permite la generación de diferentes formularios.
Parámetros de entrada clase form:

Método generateFormLogin


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();  
                    

Método generateFormRecover


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();
                        

Método 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();
                        

Método 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();
                        

Método generateHeaderFormWizard


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;
}

Método generateClassicFormArray


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

Método generateClassicHorizontalFormArray


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

Método generateCodeClassicFormArray


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

Método generateCodeHorizontalClassicFormArray


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);
                        

Elementos que se pueden enviar en el array de un formulario:


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:

      1. valor
      2. nombre
      3. seleccionado

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:

      1. valor
      2. nombre
      3. seleccionado

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:

      1. valor
      2. nombre
      3. seleccionado

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">

- JQuery:
                      <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();
                        

 

Método generateSelectCustomBD


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" => ""
                        )
                        

Método generateSelectBD


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" => ""
                        )
                        

PLUGINS


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.

Plugin Mask


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");

Plugin dompdf-0.8.0


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();
                        

Plugin phpexcel


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

Plugin phpmailer


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