Etiqueta: PHP

Insertar la caja de comentarios de Facebook en WordPress

Una integración simple y siempre muy solicitada es la de la caja de comentarios de Facebook en los sitios WordPress, que es el CMS más utilizado a nivel mundial dada su simplicidad de uso y mantención.

Para lograr esta integración, no requerimos de una Application ID de Facebook, ya que, al igual que los botones Like, funciona “en caliente”, sin requerir tokens ni nada.

Leer más →

Uso practico del puntero this en la POO

En lenguajes de programación orientada a objetos, como C++, C#, Visual Basic .NET y demases, es común utilizar una variable presente en todas las clases: el puntero this.

Este puntero (no confundir explícitamente con los punteros de C/C++; se debe interpretar mas bien como el “apuntador a”) hace referencia a la clase en si misma. Entender su funcionamiento es bastante simple, y en código se hace más evidente.

static public int sumardos(int valor)
{
    return valor + 2;
}

Hasta aquí nada muy nuevo. Una función sumardos que retorna un entero, que es un valor que se le entrega a esta función y se le suman dos unidades. Ahora, démosle contexto a este método (recordemos que en la jerga informática, función es una rutina que devuelve o no un valor. Un Método es una propiedad de los objetos que realiza una operación con el objeto o relativo a él).

public class operaciones{
    private int valor;

    public operaciones()
    {
      valor = 1;
    }

    static public int sumardos(int valor)
    {
      return valor + 2;
    }
}

Ahora, podemos apreciar que la clase también tiene un atributo (de nuevo, en la jerga informática, una variable es un elemento en el cual podemos almacenar datos, un atributo es una propiedad de los objetos relativos a estos) llamado valor.

Veamos como funciona el asunto.

operaciones obj = new operaciones();
Console.WriteLine("3 + 2 = " + obj.sumardos(3));

La consola imprime esto:

3 + 2 = 5

No hay problema. Se imprime el valor esperado, pero eso plantearía otra pregunta, ¿y como imprimo y/o utilizo el atributo valor y no solamente el parámetro valor dado al método?

Como se puede suponer, la solución y el objetivo de esta entrada es simplemente, referenciar a la misma clase (u objeto, según como se mire), con el puntero this.

public class operaciones{
    private int valor;

    public operaciones()
    {
      valor = 1;
    }

    static public int sumardos(int valor)
    {
      return this.valor + 2;
    }
}

Lo que, bajo la misma impresión dada anteriormente imprimirá:

3 + 2 = 3

Esto ocurre ya que ahora no tomo al parámetro valor, si no que al atributo valor, cuyo valor es 1.

Una de las buenas practicas de los lenguajes OOP cuando los programas comienzan a ser muy grandes, y trabajados entre varias personas, es la correcta utilización del puntero this donde corresponda; pues nadie sabe cuando un tercero podrá agregar atributos o parámetros con los mismos valores ya existentes en el ámbito privado o local, que harán que la aplicación deje de funcionar correctamente.

Notar que los nombres de variables repetidos no son marcados ni como advertencia ni como error, pues están en ámbitos diferentes.

Operador Ternario “?” en C/C++

Es común encontrar esta sentencia en C/C++ en códigos fuente algo extensos:

x = 1;
x = (x == 1) ? 0:1;

Esto se llama “Operación Ternaria”, y es un método bastante popular de abreviar del clásico if...else...if que podemos encontrar en prácticamente todos los lenguajes de programación de alto nivel y que se ha implementado en otros lenguajes de programación como JavaC#.

Se trata de tener 3 expresiones que se escriben de esta forma:

E1 ? E2:E3;

E1: La condición que íria como argumento de un bloque if.
E2: En caso que E1 sea true.
E3: En caso que E1 sea false.

Si lo convertimos en nuestros bloques comunes queda algo como:

if (E1) {E2;} else {E3;}

Como ven, es una forma bastante abstracta de escribir lo mismo y que sirve principalmente para condicionar de manera rápida una expresión, por ejemplo:

for (i = 0; i != n; i++)
printf ("%6d%c", a[i], (i%10 == 9 || i == n-1) ? '\n' : ' ');

o mas útil aún:

printf ("Tienes %d item%s.\n", n, n == 1 ? "" : "s");

Espero que eso resuelva algunas dudas, el uso de este método de abstracción es idéntico en Java.

Generar PDF con PHP

image

 

Hoy en día existen varias opciones a la hora de querer generar un archivo PDF a partir de un sitio web, para mostrar un informe o generar algún certificado.

Para este propósito utilizaremos una librería llamada R&OS.

Como siempre, descomprimimos todo dentro del directorio donde tengamos el documento en cuestión e incluimos el archivo class.ezpdf.php, que tiene la clase que incluye los métodos para generar el fichero.

<?php          
//Incluimos el fichero que contiene la clase a usar          
include('class.ezpdf.php');         
//Creamos el objeto que manejara todo el contenido          
//del PDF           
$pdf = new Cezpdf();         
//Seleccionamos una fuente a usar (Case-sensitive)          
$pdf->selectFont('fonts/Courier.afm');         
//Creamos un array con la informacion del PDF          
$datos = array (          
        'Title'=>'Ejemplo PDF',         
        'Author'=>'Sebastián Ortiz',         
        'Subject'=>'Ejemplo de PDF',         
        'Creator'=>'seba.ortiz.lira@gmail.com',         
        'Producer'=>'http://sebaortizlira.wordpress.com/'       
        );         
//Agregamos la Informacion del PDF al contenido          
$pdf->addInfo($datos);         
//Insertamos texto y su tamaño de letra          
$pdf->ezText("<b>Ejemplo de PDF en PHP</b>n",20);         
$pdf->ezText("Esta es una prueba de pdf generado con R&OSn",12);         
$pdf->ezText("nnn",10);         
$pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"),10);         
$pdf->ezText("<b>Hora:</b> ".date("H:i:s")."nn",10);         
//Iniciamos el flujo de Datos del PDF          
$pdf->ezStream();         
?>

Con esto se genera un documento PDF básico, pero si deseamos podemos incluir rutinas con MySQL y otras funciones. Es de mencionar que existen mas métodos para generar PDF (incluso sin utilizar clases simplificadas como esta), pero para los fines mas comunes, no debería ser necesario mas que esto.

Para mas información se puede ir a la documentación de R&OS disponible en su web.