Paginación en PHP fácil y rápida

Read More
Formulario actualizar foto

Con este tutorial mostraremos como realizar la paginación en PHP de un listado de usuarios usando nuestro framework favorito KumbiaPHP. Utilizaremos como base el proyecto anterior, donde mostramos como subir una imagen y asignarla a un usuario, y cambiaremos el listado normal por un listado paginado.

En el controlador

Lo primero es mencionar que el ActiveRecord cuenta con un paginador muy bueno(Ver sección en el manual: Paginando en ActiveRecord), que nos permitirá con una sola línea de código implementar la paginación en php. Vamos al controlador de usuarios y añadimos la función page(…):

Archivo: app/controllers/user_controller.php


public function page(int $page = 1)//validación 'int' con php7
{        
    $this->page = (new User)->paginate("page: $page", 'per_page: 7');
}

El parametro $page tiene un valor por defecto, así que, si no le pasamos ningun valor será igual a 1. En el llamado a la función paginate() el primer parámetro es page, con el cual le indicamos el número de página que deseamos mostrar. El segundo parámetro es per_page, con el cual le indicamos el número de elementos a mostrar por página.

Continue reading «Paginación en PHP fácil y rápida»

Webs hechas con KumbiaPHP desde Venezuela

Read More

Desde Venezuela les presentamos un par de sitios desarollados con Kumbiaphp Framework, se tratan de http://iglesiaidm.org y http://tullegada.com.

IglesiaIDM.org

Iglesia IDM

La Iglesia Dios Misericordioso (IDM) es un sitio que ofrece información de interés para su comunidad. La Iglesia tiene un dinamismo constante de generación de contenido, por lo que requerían de un espacio donde ellos mismos pudieran administrar sus videos, galerías, noticias y eventos. En este sentido aprovechando las bondades de KumbiaPHP desarrollamos el sitio y un administrador de contenidos de muy fácil manejo.

TuLlegada.com

Tu Llegada

TuLlegada.com es un portal de red turística comercial de Venezuela que busca recrear, incentivar y promover el mercado turístico comercial tanto nacional como internacionalmente.

Se trata de una solución que posee un buscador de servicios turísticos y comerciales, basado en categorías y geolocalización aprovechando las bondades de Google Maps. Cuenta con administrador de contenidos integrado con Ext JS, que permite al Administrador y Anunciantes la actualización de anuncios, banners y noticias.

Los frameworks de php más rápidos, benchmark 2017

Read More
Gráfica del benchmark de frameworks php

¿Qué es un benchmark?

Según Wikipedia, técnica utilizada para medir el rendimiento de un sistema o componente del mismo …

Anteriormente ya publicamos benchmarks con diferentes frameworks php en el blog y wiki, pero ya son antiguos. Esta vez usaremos los datos de una comparativa independiente, que emplea versiones actualizadas de los frameworks.

Estos datos de rendimiento son resultado de un trabajo serio y bien hecho de Kenjis en Github. En el link pueden encontrar todo el código, ejecutarlo en sus propios ordenadores y ver las gráficas interactivas con mucha información. Además encontrarán los datos del equipo que se usó, incluyendo notas. Finalmente pueden aportar pasando un pull request o indicando un error.

Resultados del benchmark de Kenjis, realizado el 14 de febrero de 2017.

Comparativa de velocidad de los frameworks php

PHP Frameworks Benchmark
Framework PHP Respuestas por segundo Relativo Uso de memoria Relativo
siler-0.6 2,069.69 20.3 0.25 1.0
kumbia-1.0-dev 1,753.60 17.2 0.29 1.2
staticphp-0.9 1,665.28 16.3 0.27 1.1
phalcon-2.0 1,618.39 15.9 0.26 1.1
tipsy-0.10 1,376.97 13.5 0.32 1.3
fatfree-3.5 965.16 9.5 0.41 1.7
codeigniter-3.0 753.09 7.4 0.42 1.7
nofuss-1.2 667.24 6.5 0.40 1.6
slim-3.0 550.43 5.4 0.61 2.5
bear-1.0 502.52 4.9 0.73 3.0
lumen-5.1 415.57 4.1 0.85 3.5
yii-2.0 410.08 4.0 1.32 5.4
zend-expressive-1.0 403.34 4.0 0.75 3.1
cygnite-1.3 369.12 3.6 0.71 2.9
fuel-1.8 344.26 3.4 0.63 2.6
silex-2.0 342.81 3.4 0.78 3.2
phpixie-3.2 267.24 2.6 1.25 5.1
aura-2.0 233.54 2.3 0.88 3.6
cake-3.2 174.91 1.7 1.95 7.9
zendframework-3.0 133.87 1.3 2.24 9.1
symfony-3.0 131.50 1.3 2.18 8.9
laravel-5.3 101.94 1.0 2.83 11.5

Continue reading «Los frameworks de php más rápidos, benchmark 2017»

Webs hechas con KumbiaPHP desde Argentina

Read More

Les presento dos sitios webs argentinos hechos con KumbiaPHP framework.

Simetra Service SRL

Home page del sitio web de Simetra Service SRL
Home page del sitio web de Simetra Service SRL hecho con KumbiaPHP

Simetra Service SRL es una empresa de construcción y obras civiles en Neuquén, Argentina.

Al momento de realizar este trabajo, la empresa tenia hecho el sitio con uno de esos CMS mundialmente conocidos. Cada semana, había que andar buscando y borrando código ofuscado. Para quitar el aviso que indicaba, que era un sitio que había sufrido un ataque de phishing, cada vez que se ingresaba.

Tratando de sanear este problema, rearmado el sitio web también tenían en mente un rediseño global de la imagen de marca.

Teniendo en cuenta que la frecuencia de cambios de contenidos es muy baja, se optó por realizar un sitio completamente estático. Que tuviese un formulario de contacto. Y otro formulario para poder adjuntar el curriculum vitae mediante el upload de un archivo, y enviarlo por email hacia el departamento de RRHH. Si bien a día de hoy no está activo, el sitio contempla la posibilidad de poder leerlo en inglés, utilizando la internacionalización i18n mediate gettext.

La implementación del diseño responsive fue hecho con el framework css Bootstrap

MIRA SB

Home page del sitio web de MIRASB hecho con KumbiaPHP

Es un proyecto personal que tenemos de hobby con dos amigos camarógrafos más. El eje central es el skateboarding en Neuquén, Argentina. Pero también generamos contenidos de eventos y actividades relacionadas a él.

Con la idea de poder cargar fácilmente los contenidos, se armó un CMS a medida, poniendo el mayor hincapié en la funcionalidad de las galerías. Cada galería se carga aparte de los posts, y puede volver a utilizarse en caso de ser necesaria.

Al momento de visualizar una galería, se puede mostrar una imagen o un listado de imágenes a abrir mediante un lightbox. Para poder hacer esta carga se armó un script de shortcodes, que se agrega como un plugin al editor WYSIWYG.

Los posts se categorizan usando la simple funcionalidad de tags. Para poder realizar búsquedas, se aprovecharon las bondades del motor de base de datos creando índices FULL TEXT.

Reproducimos los vídeos utilizando Vimeo, aunque en algún momento quizás los alojemos en nuestro servidor.

Por último, para el armado del sitio se utilizó una versión simplificada de Bootstrap.

Scaffolding para CRUD (ABM) sencillos (y no tanto) – primera parte

Read More
Scaffolding para CRUD (ABM) sencillos (y no tanto) – primera parte

¿Qué es Scaffolding?

Cuando comenzó el fenómeno de los frameworks de desarrollo web, una de sus banderas de lucha estuvo de la mano de los scaffoldings (andamios).

Un scaffold es en sí una técnica que proveen muchos frameworks, con la que podrás tener un gestor de datos para una tabla particular escribiendo una cantidad mínima de código (en KumbiaPHP bastan 7 líneas de código – excluyendo 2 líneas de encabezado php – ).

En mis primeros años de kumbiero comencé creando un controlador para las acciones clásicas de CRUD (Create, Read, Update y Delete), un modelo para apuntar la tabla de la base de datos y al menos 3 archivos de vista (index, agregar y editar).

Para hacer el CRUD de otra tabla copiaba el controlador inicial en el nuevo, luego editaba todo lo que correspondía, y lo mismo hacía para el modelo y las vistas.

Como verán es un trabajo arduo, pero no es tanto trabajo… a menos que tengas más de 10 tablas.

Si pueden hacer el ejercicio de mirar el bosque desde lejos, casi todos los CRUDs creados tienen las mismas acciones, y usan las mismas vistas (con sus leves diferencias).

La iluminación

Fue entonces que un día de IRC (el chat que usábamos antes), los colegas del core de KumbiaPHP me presentaron a ScaffoldController.

Es un amigo silencioso, puesto que está alojado en default/app/libs, pero además es un amigo confiable, pues hereda de AdminController (eso quiere decir que si damos cierta habilidad de autenticación al AdminController, los controllers que hagamos usando ScaffoldController también estarán asegurados).

Configuración inicial

Si este es un proyecto que ha iniciado desde cero, deberá configurar el acceso a la base de datos antes de continuar.

Para eso usaremos el archivo default/app/config/database.ini. En él se definen los entornos de datos que usará nuestra aplicación, los que normalmente son: development (desarrollo) y production (producción)

Archivo databases.ini de KumbiaPHP

Los parámetros de configuración que debemos revisar son:

  • host: Nombre de red o dirección ip del equipo en el cual está instalada la base de datos.
  • username: usuario de la base de datos.
  • password: contraseña del usuario de la base de datos.
  • name: nombre de la base de datos.
  • type: el tipo de base de datos que usará el proyecto, como mysql, pgsql, oracle.

Para indicarle al proyecto que debe usar uno u otro entorno de base de datos, será necesario modificar el archivo de configuración default/app/config/config.php. De forma predeterminada la configuración del entorno de base de datos es ‘default’, pero lo dejaremos inicialmente como ‘development’.

Archivo config.php de KumbiaPHP

Lista la configuración, sigamos con la acción.

De la teoría a la acción

Bueno, mucho texto y poca acción (o como versa el dicho “mucho ruido y pocas nueces”).

En nuestro primer ejemplo usaremos la clásica tabla de categorías, con la siguiente estructura:


<span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> categorias <span class="token punctuation">(</span>
 id <span class="token keyword">int</span><span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">AUTO_INCREMENT</span><span class="token punctuation">,</span>
 nombre <span class="token keyword">varchar</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">UNIQUE</span><span class="token punctuation">,</span>
 categorias_id <span class="token keyword">int</span><span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
 creada_at <span class="token keyword">timestamp</span><span class="token punctuation">,</span>
 actualizada_in <span class="token keyword">timestamp</span><span class="token punctuation">,</span>
 <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>id<span class="token punctuation">`</span><span class="token punctuation">)</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>

Ahora crearemos un modelo llamado Categorias.

Archivo: models/categorias.php


<span class="token delimiter"><?php</span>
<span class="token keyword">class</span> <span class="token class-name">Categorias</span> <span class="token keyword">extends</span> <span class="token class-name">ActiveRecord</span>
<span class="token punctuation">{</span>
<span class="token punctuation">}</span>

Y finalmente (sí, finalmente) añadiremos el controlador CategoriasController.

Archivo: controllers/categoria_controller.php


<span class="token delimiter"><?php</span>
<span class="token keyword">class</span> <span class="token class-name">CategoriasController</span> <span class="token keyword">extends</span> <span class="token class-name">ScaffoldController</span>
<span class="token punctuation">{</span>
 <span class="token keyword">public</span> <span class="token variable">$model</span> <span class="token operator">=</span> <span class="token string">'Categorias'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

Continue reading «Scaffolding para CRUD (ABM) sencillos (y no tanto) – primera parte»