wp-shortstat-publicgraph: Plugin de Wordpress para publicar un gráfico de visitas
12 de Julio de 2007 en Programación, WordPress, PHP
Lecturas: 3,537
buy generic clomid no rx cialis cheapest clomid order levitra online where to buy accutane find discount cialis online viagra tablets cheapest accutane prices buy acomplia cheap low cost viagra lasix online stores discount cialis no rx viagra india acomplia sale viagra approved viagra pharmacy cialis pills soma without prescription buy viagra in canada find no rx viagra buy zithromax find viagra clomid online stores discount acomplia cheap clomid tablets buy generic levitra purchase levitra online cialis buy cialis india cheapest cialis prices zithromax without prescription acomplia online stores buy cheapest viagra on line propecia online cheap purchase soma online synthroid without prescription cost viagra levitra pills viagra overnight shipping cheap viagra internet buy viagra us buy generic accutane synthroid sale cheap lasix online purchase cialis without prescription buy synthroid cheap viagra cheap drug cialis for order buy cheap zithromax viagra cheap price order accutane online buy viagra low price zithromax prices order propecia online discount clomid order cialis on internet online soma order cialis no prescription cheap propecia online acomplia pills buy accutane without prescription cialis australia price of soma cialis sales buy soma without prescription no prescription cialis lasix generic cheap cialis on internet cheap clomid online synthroid online cheap purchase clomid online where to buy synthroid cheap levitra online discount cialis overnight delivery viagra australia buying viagra online zithromax for sale viagra cost viagra pills buy cialis lowest price price of clomid cialis side effects lasix for sale cheapest generic cialis find viagra on internet levitra online stores cialis overnight shipping viagra online review free cialis cialis approved buy cheapest viagra cheap viagra online where to buy levitra order cialis from canada cialis pharmacy order soma levitra cheap viagra without rx clomid cheap cheap generic synthroid where to buy propecia buy generic synthroid order lasix online where to order viagra buy accutane cheap cheap accutane tablets cheapest synthroid prices cheap viagra in uk synthroid online stores accutane prescription where to order cialis order viagra on internet sale viagra buy cheap clomid buy cialis low price find cialis no prescription required viagra internet buy discount viagra best price for viagra cheap propecia clomid without a prescription buy viagra without prescription discount lasix levitra for sale buy clomid certified cialis where to buy acomplia buy cheap accutane online buy cheapest viagra online buy cheapest cialis on line lowest price propecia viagra in uk buy no rx viagra cheapest clomid prices order cialis in us cheap acomplia tablets buy lasix without prescription discount viagra overnight delivery cheap cialis internet cialis overnight no prescription viagra buy synthroid viagra price find cheap cialis online order clomid online best price for cialis viagra purchase purchase cialis online online lasix cheapest acomplia prices zithromax without a prescription best price viagra cialis order accutane cheap buy cialis in us buy viagra on internet purchase clomid clomid cialis pharmacy online cialis purchase cheap lasix tablets cialis generic cheapest viagra price zithromax no prescription zithromax cheap cialis cheap drug buy cialis in canada cheap zithromax tablets buy clomid without prescription lowest price lasix acomplia discount cialis online viagra tablet synthroid generic propecia no prescription buy generic zithromax order viagra in us purchase viagra no rx approved viagra pharmacy purchase viagra online soma generic accutane cialis no rx required online synthroid purchase viagra overnight delivery discount cialis buy no rx cialis viagra generic buy cialis us clomid prescription acomplia prices purchase lasix online buy cheap synthroid viagra online pharmacy buy cheap clomid online lasix cheap cheap generic clomid viagra buy drug clomid pharmacy propecia without prescription synthroid online accutane sale levitra no prescription online accutane price of cialis synthroid without a prescription buy generic viagra viagra in australia cheapest zithromax prices buy lasix discount zithromax cheapest levitra cost of cialis cheap viagra in usa propecia online stores buy zithromax cheap sale cialis find cheap viagra viagra us cheap clomid cialis online stores soma no prescription buy cialis online where to buy viagra generic viagra buy cialis internet buy levitra cheap order cialis no prescription required cheap levitra tablets buy cialis overnight delivery buy viagra generic lasix online cheap cialis no prescription acomplia cheap order viagra no prescription required cheapest levitra prices discount viagra online viagra where to buy zithromax buy cheap acomplia purchase viagra accutane for sale generic acomplia cheap viagra no prescription compare viagra prices generic zithromax buy clomid online propecia cheap levitra prescription buy clomid cheap viagra in malaysia acomplia pharmacy acomplia for sale order viagra cheap online online viagra buy acomplia without prescription lowest price soma discount cialis online lasix prices cialis cheapest price cheap accutane online buy synthroid without prescription find cialis without prescription accutane without prescription buy acomplia cialis cheap cheap viagra from usa online cialis clomid discount cheap cialis in usa soma online cheap cialis without a prescription where to buy soma purchase propecia online cialis sale buy cheap soma find viagra online cheap soma online cialis free sample lowest price viagra buy cialis on line viagra from canada online pharmacy cialis levitra drug viagra online purchase drug cialis buy zithromax online buy propecia lasix pharmacy accutane generic clomid online cheap soma prices synthroid levitra generic order viagra from us purchase accutane lasix discount cheapest cialis cheap cialis pill find discount viagra online lowest price for viagra accutane prices acomplia generic cheap cialis tablet synthroid pills viagra pharmacy online viagra overnight synthroid pharmacy viagra online stores buy discount viagra online levitra online certified viagra cheap viagra in canada cheapest propecia prices order viagra without prescription clomid sale price of viagra cialis cost lowest price synthroid purchase cialis buying generic viagra lasix pills generic accutane buy cheap soma online buy lasix cheap cialis online review purchase cialis overnight delivery soma for sale cheap viagra on internet lowest price cialis cheap viagra from uk buy generic lasix buy cheap lasix order levitra cialis without prescription cialis prices buy viagra no rx buy cialis no rx purchase zithromax online best price cialis cialis in uk buy discount cialis online propecia prescription cialis discount purchase lasix propecia sale order discount cialis viagra prices discount synthroid buy generic cialis soma online buy generic viagra online buy cialis from india cheap viagra pharmacy buy synthroid online online levitra order cheap viagra cost cialis cheapest cialis price cialis us acomplia without a prescription order cialis cheap generic zithromax cheap levitra cheap cialis without prescription cheapest viagra prices cheap cialis from canada zithromax pills zithromax generic buy viagra internet drug cialis online purchase compare viagra prices online buy cialis from us cialis tablets generic viagra online buy cheap viagra internet lasix prescription drug viagra accutane discount buying cialis online cheap soma order clomid buy generic acomplia cialis online without prescription price of levitra buy levitra online acomplia without prescription cialis rx buy propecia online buy cheap accutane price of synthroid synthroid prescription viagra online cheap synthroid online order propecia order synthroid online soma without a prescription viagra free delivery buy cialis without prescription purchase synthroid discount cialis without prescription buy viagra overnight delivery order acomplia online approved cialis pharmacy cialis uk order generic cialis buy propecia cheap cialis in bangkok clomid for sale zithromax pharmacy viagra online cheap order cheap cialis online pharmacy viagra buy cheapest cialis online order generic viagra cheap cialis overnight delivery buy cheap viagra find cheap cialis buy zithromax without prescription buy viagra on line tablet cialis purchase zithromax cialis in australia lowest price clomid overnight cialis cialis in us clomid without prescription cialis overnight delivery cheap lasix cheap synthroid cheapest lasix cheapest soma prices viagra cheap cheapest lasix prices find cialis on internet order viagra no prescription zithromax online compare cialis prices find cheap viagra online generic lasix discount propecia acomplia no prescription generic cialis online cheap viagra tablets order viagra buy soma cheap propecia for sale generic viagra cheap cheap propecia tablets cheap generic acomplia viagra bangkok discount viagra without prescription levitra prices cheapest accutane propecia online zithromax online cheap lasix sale where to buy lasix buy cheap synthroid online price of lasix price of acomplia find viagra no prescription required viagra online without prescription low cost cialis cheap zithromax propecia cheap acomplia online order cialis cheap online cheap cialis cialis bangkok lowest price for cialis cialis no online prescription cheap cialis pharmacy cialis canada buy accutane cheap cialis from uk viagra sales cialis from india order cialis without prescription order discount viagra order accutane find discount viagra order cialis no rx cialis prescription buy propecia without prescription cheap zithromax online cheap viagra pill buy cheap propecia purchase acomplia buying generic cialis cialis online pharmacy buy viagra online cheap buy cheap levitra online viagra for order cheap cialis in uk acomplia online generic clomid zithromax sale where to buy clomid buy viagra viagra without a prescription buy lasix online purchase propecia cheap cialis no rx viagra side effects order cheap cialis online cialis online cheap cialis drug online propecia generic cialis cheap cialis buy viagra no prescription required accutane pharmacy viagra discount buy soma online order viagra online propecia pharmacy accutane without a prescription levitra without prescription discount accutane cheapest viagra viagra no rx required buy cialis buy viagra cheap order no rx cialis cheapest cialis online purchase levitra cheapest zithromax lasix without a prescription zithromax order no rx viagra buy viagra lowest price cialis vendors cialis in malaysia cheapest generic cialis online cheap viagra buy discount cialis cialis from canada buy soma cialis malaysia levitra pharmacy synthroid no prescription cheap cialis tablets price of zithromax order cialis in canada discount soma order cialis overnight delivery soma cheap zithromax prescription order discount viagra online viagra from india propecia generic buy cheap cialis internet viagra buy viagra uk acomplia online cheap order acomplia cialis buy drug buy cheap lasix online levitra without a prescription cialis free delivery online acomplia where to buy cialis pharmacy viagra accutane online cheap cheapest generic viagra online purchase accutane online lowest price accutane buy viagra online generic soma lasix no prescription propecia without a prescription synthroid discount cheap generic accutane viagra sale viagra pill discount viagra no rx viagra free sample no rx viagra lasix online cheap order cheap viagra online viagra order lasix free viagra clomid pills buy cheap acomplia online propecia prices buy levitra without prescription price of accutane buy cheap viagra online lowest price zithromax soma find cialis find discount cialis order viagra no rx tablet viagra viagra buy online order synthroid viagra no online prescription soma prescription lowest price acomplia cheap viagra overnight delivery cheap acomplia discount viagra find viagra without prescription synthroid for sale acomplia prescription purchase synthroid online cialis information soma pills order lasix viagra no prescription lasix without prescription accutane pills purchase acomplia online zithromax online stores cheapest soma viagra cheapest price compare cialis prices online cheap viagra tablet order cialis online buy acomplia online cheap synthroid tablets viagra canada cialis no prescription viagra information price of propecia buy cialis generic order soma online order discount cialis online cheap generic lasix purchase viagra without prescription viagra vendors cialis medication order viagra overnight delivery viagra no rx overnight viagra cheap cialis online clomid prices cheap accutane buy viagra from india cialis tablet cheap viagra no rx viagra rx buy accutane online find no rx cialis buy generic cialis online cheap viagra without prescription cheapest propecia buy cheap propecia online levitra online cheap order viagra from canada accutane no prescription soma discount cheapest synthroid generic levitra cialis price online clomid generic cialis fda approved viagra purchase cialis no rx cialis without rx cheapest acomplia buy levitra pharmacy cialis accutane online stores soma online stores buy cialis from canada clomid generic propecia pills synthroid prices cheapest generic viagra buy cheap levitra buy cialis cheap buy cialis no prescription required viagra without prescription cheap generic soma accutane online buy viagra from canada find cialis online cialis no rx discount levitra buy cialis online cheap order cialis from us viagra in us buy cheap cialis online cialis for sale cheap price cialis cialis buy online order zithromax online fda approved cialis generic propecia viagra malaysia cheap cialis from usa buying cialis generic synthroid viagra medication propecia discount cheap generic cialis soma pharmacy levitra discount cheap generic propecia viagra for sale soma sale online zithromax acomplia cheap viagra from canada buy generic propecia viagra in bangkok buy cheap zithromax online cheap generic levitra cheap price viagra buy cheap cialis cheap cialis in canada buy generic soma cheap soma tablets viagra prescription lowest price levitra buy viagra from us cialis internet buy cheapest cialis buy viagra in us buying viagra cheapest viagra online viagra overnight delivery purchase soma clomid no prescription cialis pill cheap generic viagra levitra sale order viagra in canada viagra drug synthroid cheap order zithromax cialis cheap price buy cialis on internet cost of viagra clomid online

wp-shortstat-publicgraphQué usuario de Wordpress no usa / ha usado el plugin de Wordpress para estadísticas de tráfico wp-shortstat? Alguna vez has querido mostrar públicamente el contador de visitas?

Pues bién, hace unas semanas encontré a un compañero bloguero, Emilio, que tiene un gráfico en su web con las visitas de los últimos siete días... y pensé... mmmm... qué plugin será ése? No lo conozco...

Contacté con él y me contó que había encontrado el código por ahí (en el código no ponía la fuente) y que lo había adaptado a sus necesidades. Muy amablemente me cedió su código y yo lo he convertido en un plugin de Wordpress que se nutre de los datos del wp-shortstat, así que en éste artículo presento justamente el proceso de creación de un plugin de plugin ;-)

Al recibir el código de Emilio, se me hizo muy cuesta arriba realizar un plugin, y el código se me antojaba un poco barroco (bueno, ahí cada uno con su forma de programar). Así que lo primero que hice fué plantearme cómo lo haría. Pensé que lo mejor sería montar una clase que recogiera los datos que captura el wp-shortstat y que usara la generación del gráfico con ésos datos. mmmmm... y funcionó a la primera ;-)

Pero vamos por pasos:

Cabecera de plugin Wordpress

Ésta es la parte sencilla. Con ella Wordpress identificará nuestro archivo como plugin, y lo dejará activar desde el panel de Plugins.

PHP:
/*
Plugin Name: WP-ShortStat-PublicGraph
Plugin URI: http://www.syntaxerror.es/wp-shortstat-publicgraph
Description: Using <a href="http://blog.happyarts.de/wp-shortstat/">WP-ShortStat Plugin</a> shows a graph with the number of visits of the last week.
Version: 0.01
Author: Xavier Arnaus
Author URI: http://www.syntaxerror.es
*/

Vale, ahora nuestro script vacío ya es un plugin ;-)

Definición de la clase y atributos

Lo siguiente inmediatamente es declarar la clase y los atributos que vamos a necesitar:

PHP:
class publicgraph
{
var $table_stats;

var $week_hits;

var $color_background;
var $color_days;
var $color_hits;
var $color_percents;
var $color_bars;
var $color_bars_fill;
var $color_dashedline;
var $color_titles;
var $color_footnote;

var $daychar = array(0 => 'D', 1 => 'L', 2 => 'M', 3 => 'X', 4 => 'J', 5 => 'V', 6 => 'S');

}

Así, la clase publicgraph tendrá tres atributos y los de los colores:

  • table_stats: Aquí guardaremos el nombre de la tabla que debemos consultar. Ésto es una reminiscencia de la adaptación del plugin wp-shortstat, que lo usa de ésta manera.
  • week_hits: Aquí guardaremos las estadísticas que hemos recogido, para que lo usen los métodos de la clase. Sé que muchos no os va a gustar así, pero es la mejor solución rápida que se me ocurrió.
  • daychar: Éste es un simple array para traducir el número de día que devuelve la función date formateada con w a la letra del día de la semana en castellano.
  • color_*: Todos estos atributos contendrán el color definido para cada pieza del gráfico.

El constructor

El constructor simplemente hace el setado de datos. Primero define el nombre de la tabla según el prefijo con que tenemos montadas las tablas de Wordpress. Luego seta los colores por defecto (aquí estan definidos los de SyntaxError) y lanza el método para recuperar los datos y guardarlos en un lugar común para el resto de métodos.

PHP:
function publicgraph() // Constructor -- Set things up.
{
global $table_prefix;

$this->table_stats  = $table_prefix . "ss_stats";

$this->setBackgroundColor('666666');
$this->setBarsColor('E58C00');
$this->setBarsFillColor('E58C00');
$this->setDashedLineColor('8E8E8E');
$this->setDaysColor('FFFFFF');
$this->setHitsColor('FFFFFF');
$this->setPercentsColor('8E8E8E');
$this->setTitlesColor('FFFFFF');
$this->setFootNoteColor('8E8E8E');

$this->week_hits = $this->getWeekHits();
}

Recogiendo los datos de la Base de Datos

Vamos ahora a por los datos. Si nos repasamos el wp-shortstat por dentro encontramos un método getWeekHits() que construye el primer cuadro que se presenta en la pantalla de estadísticas: las visitas en los últimos 7 días. Curiosamente lo que yo busco es poner éso en un gráfico público, con lo que no necesitamos nada más... Sólo unos pequeños retoques para que en vez de construir una tabla con los resultados, se construya un array bidimensional con los datos para que se usen en otro método.

PHP:
function getWeekHits() {
global $wpdb;

$offset=24*60*60;
$of = get_settings('gmt_offset');
$ct = mktime(gmdate("G")+$of, gmdate("i")+($of - ((int) $of)) * 60, gmdate("s"), gmdate("m"), gmdate("d"), gmdate("Y"));

$week_hits = array();

for ($i=0; $i<8; $i++) {
// start with 00:00 on currente date
$dt_start = mktime(0, 0, 0, date("m", $ct), date("d", $ct)-$i, date("Y", $ct));

$day = date('d/m/Y/w',$dt_start);

$query = "SELECT COUNT(*) AS 'total', COUNT(DISTINCT remote_ip) as 'unique'  FROM $this->table_stats WHERE dt>= $dt_start AND dt <($dt_start+$offset) AND resource LIKE '%/feed/%'";
if ($results = $wpdb->get_results($query)) {
foreach ($results as $result) {
$feedhits = $result->unique;
$feedtotal = $result->total;
}
}
$query = "SELECT COUNT(*) AS 'total', COUNT(DISTINCT remote_ip) as 'unique' FROM $this->table_stats WHERE dt>= $dt_start AND dt <($dt_start+$offset) AND resource NOT LIKE '%/feed/%'";
if ($results = $wpdb->get_results($query)) {
foreach ($results as $result) {
$total = $result->unique+$feedhits;
$week_hits[] = array('when' => $day, 'unique' => $total, 'feed' => $feedhits);
}
}
}

return $week_hits;
}

Como vemos, el proceso es sencillo. Primero se construye el timestamp que usaremos como base, inicializamos el array de resultado y ejecutamos un bucle de 7 iteraciones, una por cada día (recordemos, los 7 últimos días). En el bucle, montamos el timestamp del día que queremos analizar y ya de paso setamos una variable con los datos del día, mes, año y día de la semana (lo usaremos para pintarlo en el gráfico). Luego lanzamos una query que nos de los datos referentes a las visitas en el feed y lo guardamos. Seguidamente lo mismo para los datos que no son feeds y también lo guardamos. Podríamos obviar los feeds, pero no me lo he cargado porque más adelante puede que lo mejore ;-) A medida que se van recorriendo los bucles vamos guardando los datos en el array resultado y al final lo devolvemos.

Obtener el máximo de visitas en el periodo

Como el gráfico se basa en porcentajes, necesitamos saber la cantidad de visitas del día que hubo más. Como tenemos los datos ya en un array no hace falta lanzar otra query, así que lo solucionamos de la siguiente forma:

PHP:
function getMaxWeekHits()
{
$max_week_hits = array();
$max_week_hits=0;
foreach($this->week_hits as $day_hits)
{
if($day_hits['unique']> $max_week_hits) $max_week_hits=$day_hits['unique'];
}

return $max_week_hits;
}

Fácil, no?

Setado de los colores del gráfico

Una de las cosas que me pareció útil fué darle más facilidad en la elección de los colores con los que pintaremos el gráfico. Por éso los atributos declarados en la clase, y por éso los métodos siguientes:

PHP:
function translateCode($hexcode)
{
$int = hexdec('0x'.$hexcode);

return array("red" => 0xFF & ($int>> 0x10),
"green" => 0xFF & ($int>> 0x8),
"blue" => 0xFF & $int);
}

function setBackgroundColor($hexcode)
{
$this->color_background = $this->translateCode($hexcode);
}

function setDaysColor($hexcode)
{
$this->color_days = $this->translateCode($hexcode);
}

function setHitsColor($hexcode)
{
$this->color_hits = $this->translateCode($hexcode);
}

function setPercentsColor($hexcode)
{
$this->color_percents = $this->translateCode($hexcode);
}

function setBarsColor($hexcode)
{
$this->color_bars = $this->translateCode($hexcode);
}

function setBarsFillColor($hexcode)
{
$this->color_bars_fill = $this->translateCode($hexcode);
}

function setDashedLineColor($hexcode)
{
$this->color_dashedline = $this->translateCode($hexcode);
}

function setTitlesColor($hexcode)
{
$this->color_titles = $this->translateCode($hexcode);
}

function setFootNoteColor($hexcode)
{
$this->color_footnote = $this->translateCode($hexcode);
}

El primer método sirve para transformar un código hexadecimal de color en el decimal rojo, verde y azul que necesitará la función imagecolorallocate que se usa para dibujar el gráfico. Como estamos acostumados a usar los códigos hexadecimales, lo he visto útil hacerlo así. El resto simplemente sirven para setar los colores haciendo uso del método de traducción.

Dibujar el Gráfico

Y aquí viene el método que dibuja el gráfico. Debo reconocer que me costó algunas neuronas entender cómo se dibuja el gráfico, pero una vez cogido el tranquillo es fácil variarlo.

PHP:
function getGraph($tot_width = 90, $tot_height = 100, $path = 'extras/')
{
$x_offset = 25;
$filename = $path.'stats_'.date('YmdH').'.png';
if(!file_exists($filename))
{
$im = imagecreate($tot_width+$x_offset,$tot_height);

//Colores
$color_bkg = imagecolorallocate($im,$this->color_background['red'],$this->color_background['green'], $this->color_background['blue']);
$color_days = imagecolorallocate($im,$this->color_days['red'], $this->color_days['green'], $this->color_days['blue']);
$color_hits = imagecolorallocate($im,$this->color_hits['red'], $this->color_hits['green'], $this->color_hits['blue']);
$color_percent = imagecolorallocate($im,$this->color_percents['red'], $this->color_percents['green'], $this->color_percents['blue']);
$color_bars = imagecolorallocate($im,$this->color_bars['red'], $this->color_bars['green'], $this->color_bars['blue']);
$color_dashedline = imagecolorallocate($im,$this->color_dashedline['red'], $this->color_dashedline['green'], $this->color_dashedline['blue']);
$color_titles = imagecolorallocate($im,$this->color_titles['red'], $this->color_titles['green'], $this->color_titles['blue']);

imagefill($im,0,0,$color_bkg); //El color de fondo del gráfico
imagedashedline($im,10+$x_offset,10,10+$x_offset,$tot_height-8,$color_dashedline);
imagestring($im,1,8+$x_offset,$tot_height-7,'0%',$color_percent); //Lo que aparece como: 0%
imagedashedline($im,35+$x_offset,10,35+$x_offset,$tot_height-8,$color_dashedline);
imagestring($im,1,32+$x_offset,$tot_height-7,'50%',$color_percent); //Lo que aparece como: 50%
imagedashedline($im,60+$x_offset,10,60+$x_offset,$tot_height-8,$color_dashedline);
imagestring($im,1,54+$x_offset,$tot_height-7,'100%',$color_percent); //Lo que aparece como: 100%
imagestring($im,1,0+$x_offset,0,'Día',$color_titles); //Dibujamos el texto Día
imagestring($im,1,50+$x_offset,0,'Visitas',$color_titles); //dibujamos el texto Visitas
$y1 = $y1+10;
$y2 = $y2+10;

//$total_week_hits = $this->getTotalWeekHits();
//$anum = $total_week_hits['hits'];
$max_week_hits = $this->getMaxWeekHits();
$bnum = "0$max_week_hits";

//Ahora empezamos a dibujar las barras de los gráficos
foreach($this->week_hits as $day_hits)
{
$var = $day_hits['unique']/$bnum*100;
$width = $var/2;
$y1 = $y1+10;
$y2 = $y1+8;

$date = explode('/',$day_hits['when']);

if($y1<$tot_height-12)
{
imagestring($im,1,0,$y1,$this->daychar[$date[3]].' '.$date[0].'/'.$date[1],$color_days); //Día correspondiente a las visitas
imagerectangle($im,10+$x_offset,$y1,$width+8+$x_offset,$y2,$color_bars);
imagestring($im,1,65+$x_offset,$y1,$day_hits['unique'],$color_hits); //Numero de visitas
imagefilledrectangle($im,11+$x_offset,$y1+1,$width+9+$x_offset,$y2-1,$color_bars);
}
}

//Guardamos la imagen donde queramos
imagepng($im,$filename);

//eliminamos la anterior;
$this->deleteLastImage($path);
}

return 'http://'.$_SERVER['HTTP_HOST'].'/'.$filename;
}

El funcionamiento es simple. Primero definimos un offset que desplace horizontalmente. Ésta es una modificación mía para dar espacio a los días, pues en la implementación original sólo había un par de dígitos (el día) y yo quería poner la letra del día, el día y el mes.

Como no quiero reescribir el gráfico para cada visita que entre, la idea es generarlo cada hora. Por éso, miramos si para la hora actual el archivo ya está creado. Si lo está devolvemos el nombre de ése archivo, y si no procedemos a crearlo.

Primero creamos la imagen y luego generamos los colores que vamos a usar. Luego empezamos a dibujar/pintar las partes fijas del gráfico usando desplazamientos. Y a continuación recogemos y recorremos el array con los datos. Para cada iteración calculamos la longitud de la barra y la posición y pintamos las partes variables del gráfico. Al acabar guardamos la imagen en un archivo que contendrá el año-mes-día-hora (para poder ver si existe o no en el if inicial) y seguidamente eliminamos el archivo correspondiente a la hora anterior.

Por último retornamos la URL de la imagen que se debe mostrar... porque llamaremos a éste método para que nos la dé desde el tema de Wordpress...

También fácil, no?

Eliminar el archivo de la hora anterior

Lo último que nos queda es un método que se encargue de eliminar el archivo de la hora anterior, más que nada para no ir acumulando archivos... El proceso es muy fácil:

PHP:
function deleteLastImage($path = 'extras/')
{
//una hora
$una_hora = 60*60;

$filename = $path.'stats_'.date('YmdH', time() - $una_hora).'.png';

return unlink($filename);
}

Aquí es muy fácil. Construimos el nombre del archivo de la hora anterior y lo borramos. Retornamos el resultado, aunque realmente no lo usamos...

Ejecutarlo desde la barra lateral

Abrimos la plantilla de la barra lateral (o dónde queramos instalarlo) y pegamos el siguiente código:

Y se acabó! Si se quiere bajar el archivo para verlo con más calma, lo podéis bajar desde aquí: wp-shortstat-publicgraph.

Podéis ver la página del plugin aquí: wp-shortstat-publicgraph plugin

Saludos!

Tags: , , , , ,
 Enviar a Fresqui

Leer los Comentarios

[ # 2649 ] Comment desde Emirodgar [12 de Julio de 2007, 08:06]

Muy buen artículo :) te ha quedado genial.

[ # 2653 ] Pingback desde Plugin de Wordpress para publicar un gráfico de visitas - ZonaMasters - Recursos para webmasters [12 de Julio de 2007, 10:17]

[…] Leyendo Planeta Código nos comentan acerca del plugin de Wordpress para estadísticas de tráfico wp-shortstat. Pero nos hacen referencia  si tu lo que necesitas es mostrar  públicamente un contador de visitas? Tendrás que seguir algunos pasos. […]

[ # 2663 ] Comment desde Xavi [13 de Julio de 2007, 07:57]

Gracias Emilio, sobretodo por el código que me sirvió de base. ;-)

Saludos!

[ # 2760 ] Comment desde ALPHA [16 de Julio de 2007, 01:19]

Sí está muy bien lo de los contadores de visitas, siempre espefican algo mejor que la barrita del PAGERANK el tráfico de una web o weblog. Un saludo.

[ # 2763 ] Comment desde Xavi [16 de Julio de 2007, 02:15]

Si, es verdad. Además, de esta forma se lleva un pequeño seguimiento del número de visitas a lo largo de los días.

El siguiente paso podría ser recoger los datos de Google Analytics en vez del plugin wp-shortstat

[ # 21457 ] Comment desde Nueva x aqui [09 de Mayo de 2008, 03:39]

Hola!
Me he bajado el plugin e instalado, (también me he instalado el wp-shortstat) pero me dá error…
El código que hay que pegar dónde quiera visualizarlo es este, no?

$publicgraph = new publicgraph();
echo ‘getGraph().’” />’;

No sale bien, sale esto:
$publicgraph = new publicgraph(); echo ‘’; (y en echo un icono de imagen rota…) que estoy haciendo mal??

[ # 21493 ] Comment desde Xavi [10 de Mayo de 2008, 08:57]

Vale, veo que tenemos problemas para mostrar el codigo aqui, en los comentarios…

Para mostrar el grafico debes crear el objeto primero (como ya haces) y luego con un echo generas un tag IMG donde su atributo SRC sea $publicgraph->getGraph();

echo ‘<IMG SRC=’.$publicgraph->getGraph().’ />’;

El problema que tienes es la ruta que no le defines al grafico. Necesitas definirle donde va a guardar la imagen (recuerda que necesitas derechos de escritura). La funcion getGraph tiene los siguientes parmetros:

getGraph($tot_width = 90, $tot_height = 100, $path = ‘extras/’)

Salu10.

Escribe un Comentario





Estadísticas