PHP

Minificar código HTML desde Codeigniter

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

La minificación se refiere a la eliminación de bytes innecesarios, como los espacios adicionales, saltos de línea y sangrías. Al minimizar los códigos HTML se puede acelerar la carga de una página web.

Podemos utilizar multiples herramientas online, preprocesadores, entre otros para generar una versión optimizada del código HTML. En esta oportunidad permítame mostrarle como minificar nuestro código HTML desde el framework codeigniter; usaremos un método donde eliminaremos espacios en blanco innecesarios del HTML generado, excepto Javascript. Sin más empecemos:

1.- Modificar config.php

En el archivo de configuración aplication/config/config.php modificar la variable enable_hooks de FALSE a TRUE.

$config['enable_hooks'] = TRUE;

2.- Modificar hooks.php

Ubicar los el archivo aplication/config/hooks.php y adicionar las siguientes líneas de código:


$hook['display_override'][] = array(
'class' => '',
'function' => 'compress',
'filename' => 'compress.php',
'filepath' => 'hooks'
);

3.- Crear compress.php

Crear el archivo aplication/hooks/compress.php y pegar el siguiente código php:


function compress(){
ini_set("pcre.recursion_limit", "16777");
$CI =& get_instance();
$buffer = $CI->output->get_output();
$re = '%# Collapse whitespace everywhere but in blacklisted elements.
(?> # Match all whitespans other than single space.
[^\S ]\s* # Either one [\t\r\n\f\v] and zero or more ws,
| \s{2,} # or two or more consecutive-any-whitespace.
) # Note: The remaining regex consumes no text at all...
(?= # Ensure we are not in a blacklist tag.
[^<]*+ # Either zero or more non-"<" {normal*}
(?: # Begin {(special normal*)*} construct
< # or a < starting a non-blacklist tag.
(?!/?(?:textarea|pre|script)\b)
[^<]*+ # more non-"<" {normal*}
)*+ # Finish "unrolling-the-loop"
(?: # Begin alternation group.
textarea|pre|script)\b
| \z # or end of file.
) # End alternation group.
) # If we made it here, we are not in a blacklist tag.
%Six';
$new_buffer = preg_replace($re, " ", $buffer);
if ($new_buffer === null){
$new_buffer = $buffer;
}
$CI->output->set_output($new_buffer);
$CI->output->_display();
}

4.- Verificar cambios.

Guarde los cambios realizados y verifique el código fuente de su página web desde el navegador.

Si no notas los resultados, por favor borra la cache de tu navegador y vuelve a verificar el código fuente.

Referencia:

https://github.com/juanjus98/Minificar-codigo-HTML-desde-Codeigniter

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more

Documentar Código fuente PHP con ApiGen

Documentar código fuente PHP con ApiGen
Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Documentar con ApiGen

Hoy en día, la gran mayoría de la comunidad de programadores consideran como una buena práctica el hecho de comentar el código fuente, siempre y cuando estos comentarios estén estructurados y escritos de forma correcta; para que algún programa pueda ayúdanos a generar rápidamente nuestra documentación.

El principal objetivo de documentar el código fuente es básicamente es para facilitar la identificación y comprensión del funcionamiento o uso de las clases y sus métodos por todos los integrantes de un equipo de desarrolladores.

Hay muchas herramientas que nos pueden ayudar a documentar nuestro código fuente pero esta vez nos encargaremos de ApiGen.

1.- Documentar correctamente las clases y métodos.

ApiGen

2.- Descargar ApiGen desde su página web http://www.apigen.org/ y guardarlo en alguna ubicación del disco duro, en mi caso por ejemplo lo puse en C:/apigen/apigen.phar

3.- Verificar si ApiGen se ejecuta correctamente. Desde la consola de Windows nos ubicamos en el directorio donde guardamos el apigen.phar y ejecutamos la siguiente línea de comandos.

Documentar código Fuente con ApiGen

Si les aparece algo parecido a lo siguiente quiere decir que ya estamos listos para generar nuestra documentación de código fuente.

Documentar código Fuente con ApiGen

4.- Generamos nuestra documentación de código fuente; para ello es necesario tener identificado el directorio donde se encuentra nuestro código fuente PHP, y crear un directorio donde guardaremos los archivos generados por el ApiGen.

Ejecutar las siguientes líneas de comando en la consola de Windows.

Documentar código Fuente con ApiGen

5.- Revisar la documentación en el directorio asignado.

Referencias:

http://www.apigen.org/

https://www.sitepoint.com/generate-documentation-with-apigen/

http://code-epicenter.com/apigen-generate-documentation-for-your-php-project/

 

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more

Crear Helper en Codeigniter

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Los helper son basicamente funciones que nos ayudaran en el proceso del desarrollo que podemos llamar desde las vistas o controladores y no digo modelos por que no se deberia llamarlos desde hay.

crearlas son sumamente facil es mas si es que tienes una funcion ya escrita en php simplemente la puedes copiar y comodolar algunas cosas si es que esta trabajando con base de datos de lo contrario no deberia ser necesario mover nada y como suelo hacer poco floro y mas accion.

ubicamos la carpeta donde debemos tener los helper y no es nada dificil por que codeigniter ya viene con una carpeta con ese nombre.

ubicacion_helper

ahora puedes crear un archivo php pero debe tener un sufijo “_helper” por ejemplo en la imagen tengo 2 helper que se llama sistema y web pero cumpliendo con el requisito de codeigniter se debe colocar “_helper” y entonces queda sistema_helper y web_helper.

ahora abrimos el archivo y comenzamos a programar y veran lo facil que es en este caso voy a crear 2 ejemplos de helper 1 basica y la otra utlizando base de datos.

1) crearemos un helper que nos ayude a crear url amigables una funcion que le pasen un string y te devuelva una cadena para que pase tranquilamente como url.

 

//esto no es obligatorio pero por un tema de seguridad que nos dice si BASEPATH no esta definido no va a cargar
if (!defined('BASEPATH')){exit('No direct script access allowed');}
//aqui es simple preguntamos si no existe la funcion urls_amigables la podemos crear de lo contrario no se crea
if (!function_exists('urls_amigables')) {
    //creamos la funcion y no explico mas sobre que es cada linea por que eso ya es otro tema.
    function urls_amigables($url) {
    $url = strtolower($url);
    $find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
    $repl = array('a', 'e', 'i', 'o', 'u', 'n');
    $url = str_replace ($find, $repl, $url);
    $find = array(' ', '&amp;', '\r\n', '\n', '+'); 
    $url = str_replace ($find, '-', $url);
    $find = array('/[^a-z0-9\-&lt;&gt;]/', '/[\-]+/', '/&lt;[^&gt;]*&gt;/');
    $repl = array('', '-', '');
    $url = preg_replace ($find, $repl, $url);
    return $url;
    }
}


 

2) queremos un helper que revise la base de datos y sepa cual es el ultimo codigo que se tiene y a ese codigo le sumamos 1 para que sea consecutivo la secuencia de codigos (lo especial es como instaciamos para poder trabajar con la base de datos)

//esto no es obligatorio pero por un tema de seguridad que nos dice si BASEPATH no esta definido no va a cargar
if (!defined('BASEPATH')){exit('No direct script access allowed');}
//aqui es simple preguntamos si no existe la funcion urls_amigables la podemos crear de lo contrario no se crea
if (!function_exists('codigo_compra'))
{
    function codigo_compra()
    {
        //para poder usar la base de datos en el helper debemos instanciar al core de codeigniter 
        $CI= & get_instance(); 
        //al ser instanciado es el equivalente a $this que se tiene en control
        //el siguiente proceso facil de entender igual no va al caso
        if ($CI->db->get("pedidos")->num_rows()>0)
        {
            $num=$CI->db->order_by("id","desc")->get("pedidos")->row_array();
            $num= (int) $num["codigo"];
            return str_pad($num+1, 8, "0", STR_PAD_LEFT);
 
        }
        else 
        {
            return str_pad(1, 10, "0", STR_PAD_LEFT);
        }
    }
}

si ya tiene cu helper lo unico que falta es cargarlo en al carpeta config en el archivo autoload.php y buscamos la linea donde muestra:

$autoload['helper'] = array();

ahora solo debe colocar el nombre de tu helper para que cargue y no es necesario que coloques el sufijo “_helper”

$autoload['helper'] = array("mihelper");

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more

Trabajo con Cron Job del Cpanel

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Tarde o temprano nos toparemos con la necesidad de tener tareas programadas o tambien llamadas cron job en los cpanel y en linux el archivo crontab (/etc/crontab) que sirve de mucho esto ya que de lo contrario tendriamos que estar detras del sistema y el aplicativo no nos estaria ayudando mucho pero si aun de lo dicho no entiendo mucho en que te puede servir te doy algunas ideas:

  1. enviar mail de recordatorio cuando  ya van a vencer sus facturas.
  2. Enviar boletines mensuales a todos los usuarios suscritos.
  3. Un sistema de ticket enviar mail de recordatorio de atencion.
  4. Alertar si un producto tiene poco stock por medio de un correo.
  5. Actualizacion  de registros en ciertas fechas que se cumplan
  6. .

  7. Sistema de agenda donde puedes hacer alarmas con fechas

entre muchas cosas mas que se te puedan ocurrir al entender la gran ayuda que puede ser pero se que si eres programador que ve por primera vez este tema te sentiras confundido como yo lo pase cuando tuve que toparme hace varios años atras. Entonces voy a desarrollar un caso que te ayudara mejor a entender.

CASO:
Tenemos un sistema de colegio donde tiene facturacion y contamos con un cronograma de pagos  quiero decir que tenemos una tabla con las fechas que debe pagar y vamos a avisar al cliente que su factura se vencera pero claro debemos enviar 2 dias antes que venza la fecha.

tenemos una tabla asi donde tenemos la fecha que vence “date_expiration” y al cliente “client_id”

cronograma

nuestro codigo del lenguaje de programacion que utilices debe restar 2 dias al date_expiration pero aqui lo vamos hacer con php. Realizare un codigo que simplemente va hacer un recorrigo a la tabla y en

la consulta le restare 2 dias y esa respuesta la comparare con la fecha actual y coinciden es que faltan 2 dias para que su fecha se venza.

 

$link=mysql_connect("localhost","root","pass");
mysql_select_db("colegio",$link);
 
//lo que hacemos aqui es una consulta a la tabla expiration_invoice y a al campo "date_expiration" le restamos 2 dias
$query=mysql_query("select DATE_ADD(date_expiration, INTERVAL -2 DAY) as fecha,client_id from expiration_invoice",$link)
//recorremos lo que nos devuelve la query
while ($data=mysql_fetch_array($query))
{
 
	if ($data["fecha"]==date("Y-m-d"))
	{
 
		/*hacemos una consulta a la tabla cliente por el id que tenemos "cliente_id" 
		y obtenemos el mail  para poder enviarle el correo informandole que vencera su factura*/
 
	}
 
}

 

en ese codigo fuente esta toda la logica y la idea es que cada dia esto se tiene que ejecutar a las 0 horas que ya seria el inicio de un nuevo dia. Asi todos los dias estaria haciendo el recorrido a revisar quien cumple la condicion pero como hacemos que corra cada dia automaticamente por que no es la idea que madrugues a ejecutar el archivo.

entonces si tienes un cpanel debes buscar la opcion:

cpanel_crontab

ya dentro de la opcion cron job debemos configurar desde esta pantalla

configuracion_cpanel_cronjob

aqui no ya nos ayuda mucho con la configuracion ya que tiene algunos predeterminados que son los mas comunes y tiene el que necesitamos pero explicare de todas maneras.

tarea_cpanel_crogramada

Minuto: 0
Hora: 0
Dia: *
Mes: *
Dia de Sema: *

en cristiano lo que dice hay es que se ejecutara:
en el minuto 0 de la hora 0 todos los dias de todos los meses de todas las semanas
y esto resumuento es que se ejecute a las 0 horas de todos los dias.

el punto de comando es donde debes ejecutar un comando linux y para ejecutar un archivo php en linux debes indicar la ubicacion del archivo y colocar antes php y resulta en nuestro caso esta ruta “/var/www/cron.php” y para ejecutarlo debe quedar asi “php /var/www/cron.php”.

se pueden hacer muchas combinaciones ya dependiendo de su necesidad del proyecto alguna duda escribir en la caja de comentarios.

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more

Usar La libreria PHPMAILER en CODEIGNITER

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Al poco tiempo que comence a usar codeigniter se me habia presentado la necesidad de usar la libreria phpmailer que ya es parte de nuestra tipica librerias preferidas a la hora de desarrollar un proyecto por lo bueno que llega a ser.

antes de comenzar debes ya tener la libreria phpmailer descargada y tener listo una instalado el codeigniter y nos vamos a la carpeta libraries que es el lugar donde debemos colocar la carpeta que nos da la libreria phpmailer y debe quedar asi.

instalar_phpmailer_codeigniter

ahora que lo tenemos instalado codeigniter nunca se enterara que existe si no le indicamos y para eso debemos ir a autoload.php que se encuentra en config

ubicar_autoload_codeigniter

puedes tener cargada algunas librerias por defecto

$autoload['libraries']=array('template','session','database');

pero falta agregar la de phpmailer.

$autoload['libraries']=array('template','session','database','phpmailer');

hasta ahora vamos bien pero falta lo que a muchos confunde que es el amarre que se debe hacer en la carpeta libraries y creamos un archivo My_phpmailer.php con el siguiente codigo que en realidad creamos una libreria para codeigniter que dentro de la libreria hacemos un include de el core del phpmailer.

if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class My_PHPMailer {
    public function My_PHPMailer() {
        require_once('PHPMailer/class.phpmailer.php');
    }
}

si colocaste todo en su sitio no es necesario que modifiques la ruta que damos en el require_once y con esto ya podemos usar nuestra libreria en cualquier control por ejemplo:

 public function envio()
{
        $mail = new PHPMailer();
        $mail->SetLanguage('es');
        $mail->FromName = "luisrodriguez.pe";
        $mail->From = "no-reply@luisrodriguez.pe";
        $mail->Subject = "asunto del mensaje";
        $mail->AddAddress("luizmirodriguez@gmail.com");
        $mail->Body = "cuerpo de mensaje";
        $mail->IsHTML(true);
        $mail->Send();
}

espero que les ayude y cualquier duda en los comentarios de abajo.

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more