Archive for the 'PHP' Category

Unable to load dynamic library php_curl.dll – No se puede encontrar el módulo especificado

El problema para cargar la librería php_curl.dll es ya conocido, aún así no pude resolverlo por largo tiempo hasta hoy, aunque probé varias de las soluciones, finalmente me encontré con un post en la página de Paralles que solucionó todo.

El problema no era apache ( estoy con Apache 2.2.16 ), si no PHP 5.2.14, que por alguna razón tiene problemas específicamente con esta librería, la solución:

  1. Descargar PHP 5.2.13 zip package y desde los archivos que vienen acá
  2. Copiar libeay32.dll y ssleay32.dll ( que es el origen de muchos problemas similares con esta librería ) en la carpeta windows/system32
  3. Copiar php_curl.dll a la carpeta ext que tienes en tu carpeta instalada de PHP 5.2.14 y reemplazar el que viene con esta versión

Y todo debería quedar funcionando correctamente.

Agregar paginación a Comentarios en WordPress

Hace unos días me enteré por twitter que Charla Técnica, proyecto de mi amigo Norman Varas, tenía problemas en su migración desde Blogger a WordPress, principalmente porque estaba usando un hosting compartido que no aguantaba el alto tráfico que tiene este sitio y además el problema de estar probando directamente sobre el sitio en producción plugins y cambios al mismo por lo que ahora ya además cuenta con un sitio de desarrollo que evitará generar problemas como en los días antes de la migración.

Por ahora está usando uno de mis servidores esperando la migración final a uno propio, aproveché de ayudarlo con algunas cosas, entre otros habilitando WP Super Cache, que ayudaría a bajar la carga que se lleva el servidor sobre todo en este fin de semana que jugó Chile contra Paraguay (2-0).

Pero uno de los grandes temas que le preocupaba a Norman era no tener paginación para los comentarios, que fácilmente sobrepasan los 500 en algunos artículos, por lo que me puse a buscar algún plugin que ayudara en esta tarea, probé varios, ninguno cumplía con lo requerido, algunos cambiaban la forma en que se mostraban inclusive los comentarios, por lo que opté por buscar una solución “a mano”, y me encontré con la grata sorpresa de que era más simple de lo que pensaba.

Es así como encontré la función paginate_comments_links de muy simple uso, bastaba ir dentro del template que están usando a comments.php y agregar esta función, en este caso sobre y bajo los post para facilitar el acceso a los usuarios.

<div class="navigation">
<span>Páginas:</span>
<?php paginate_comments_links(); ?>
</div>
<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>
<div class="navigation">
<span>Páginas:</span>
<?php paginate_comments_links(); ?>
</div>

y agregando un poco de estilo con css

.navigation{
clear:left;
margin:1em 0;
padding:1em;
height:21px;
}

.navigation span{
border:1px solid #FFFFFF;
display:block;
float:left;
margin-right:0.1em;
padding:0.2em 0.5em;
}

.navigation a{
border:1px solid #FFFFFF;
display:block;
float:left;
margin-right:0.1em;
padding:0.2em 0.5em;
}

.navigation .page-numbers{
border:1px solid #9AAFE5;
text-decoration:none;
}

.navigation a:hover{
background:#2E6AB1 none repeat scroll 0 0;
border:1px solid #2E6AB1;
color:#FFFFFF;
font-weight:bold;
}

.navigation .current{
background:#2E6AB1 none repeat scroll 0 0;
border:1px solid #2E6AB1;
color:#FFFFFF;
font-weight:bold;
}

.navigation .next{
font-weight:bold;
}

.navigation .prev{
font-weight:bold;
}
.navigation .dots{
border:0;
}

con esto obtenemos para un post de 9 páginas

Paginación Ejemplo 1

Pero el espacio útil para mostrar páginas es más ancho, entonces me puse a buscar como poder controlar para esta función la cantidad de páginas a mostrar, así fui a la función que utiliza paginate_comments_links para generar la paginación que es paginate_links, que tal como se explica en la documentación, puede ser útil para crear listado de páginas de cualquier área dependiendo de los argumentos que se le pasen a la función.

Para lograr controlar la cantidad de páginas debíamos definir dos variables, end_size y mid_size.

end_size, es la cantidad de páginas que se muestran antes o luego de los puntos suspensivos que se muestran cuando la cantidad de páginas antes y/o despues de la actual supera el valor definido en mid_size.

mid_size, que permite definir cuantas páginas van junto a la página actual, si definimos por ejemplo este valor en 4 antes de la página actual tendremos máximo 4 páginas y luego de la página actual un máximo de 4 páginas.

Como ejemplo cuando nos encontramos con 9 páginas si definimos end_size = 2 y mid_size = 4 veríamos lo siguiente al estar en la página 8:

Ejemplo Paginación 2

Al estar en la página 2:

Ejemplo Paginación 3

Para controlar esto hacemos la siguiente modificación en el código anterior y pueden cambiar los valores a su gusto.

<div class="navigation">
<span>Páginas:</span>
<?php
$pcl_args = array('end_size' => 2,'mid_size' => 4);
paginate_comments_links($pcl_args);
?>
</div>
<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>
<div class="navigation">
<span>Páginas:</span>
<?php paginate_comments_links($pcl_args); ?>
</div>

Como ejemplo en caso de confusión, si quiero que se muestren un máximo de 13 páginas siempre tendríamos según los ejemplos ya mostrados, end_size = 2 y mid_size = 4, esto nos lleva a una formula:

cantidad_de_paginas = ( end_size * 2 ) + ( mid_size * 2 ) + 1

Y obtendríamos para 15 páginas cuando estamos ubicados en la página 8 algo como esto:

Ejemplo Paginación 4

PHP.JS funciones en PHP portadas a Javascript

Muchas veces desarrollando en Javascript echo de menos algunas funciones de PHP, en ocasiones existe un símil o directamente he tenido que portar desde PHP a Javascript.

Ayer buscando un símil de una función de PHP en Javascript me encontré con una excelente iniciativa “Porting PHP to Javascript“, una librería con 133 funciones de PHP portadas a Javascript, pueden descargarla en una versión normal o Namespaced.

¿Que tiene de especial la versión Namespaced?

Es que las 133 funciones vienen agrupadas en un solo objeto, es más fácil extender una esta librería y evita conflictos con funciones ya existentes, como por ejemplo, obtener el valor absoluto de un número en Javascript Math.abs(-4.5), utilizando PHP.JS abs(-4.5) y con PHP.JS Namespaced $P.abs(-4.5).

El Autor Kevin van Zonneveld además ha puesto a disposición un tester online de las funciones.

Pueden encontrar más información acerca de Namespace en Wikipedia.

Sesiones que funcionan en FireFox pero no en Internet Explorer

Escribo este artículo a pedido de Miguel Michelson y el resto del equipo de OXUS.

Hoy durante el día, decidí revisar el sitio de uno de nuestros clientes, una aplicación que pronto saldrá a producción, en FireFox, Internet Explorer 7 e Internet Explorer 6, principalmente por los temas de diseño y ver que hacks deberían aplicar para nuestro querido Internet Explorer 6.

Comienzo a revisar cada paso y me doy cuenta de que algunas interacciones con AJAX no producen los resultados esperados en ninguna de las versiones de Internet Explorer antes mencionadas, pero si en FireFox, lo que ya había pasado la etapa de Q.A. para ambos navegadores por lo que me extrañó, luego de un rato de conversarlo con Miguel nos dimos cuenta de que era un problema con las sesiones, estas se regeneraban en las llamadas con AJAX por lo que se perdía toda la información guardada en ellas, lo que dejaba el sistema inutilizable ( NOTA: Todo esto probando en un servidor local ).

Continue reading ‘Sesiones que funcionan en FireFox pero no en Internet Explorer’

Crear gradientes en PHP y Javascript

Mientras trabajábamos en un proyecto para un cliente de OXUS se nos ocurrió implementar una solución parecida a una nube de tags para orientar al usuario en la elección sobre distintas opciones. Luego pensamos en agregar colores a los distintos tamaños generados en la nube, pero para esto debíamos tener una forma simple de generar un gradiente de un color a otro, comencé buscando códigos en php y javascript, finalmente encontré uno muy bueno en php, pero me di cuenta que no servía de mucho, ya que dinámicamente dependiendo de la selección del usuario la nube se iba modificando, por lo que me puse a portar este código de php a javascript.

Continue reading ‘Crear gradientes en PHP y Javascript’