Entradas etiquetadas con código
Integración continua: Automatizando la descarga del código fuente de WordPress, Drupal, etc. y sus plugins, módulos y temas
0Antes de mejorar la automatización de la creación de los repositorios que vimos en el post Integración continua: Automatizando la creación de repositorios con Git y Subversion para poder crear proyectos en WordPress, Drupal, Symfony, o cualquier otro cms o framework, primero necesitamos obtener el código fuente, creando en nuestro servidor una pequeña biblioteca de código fuente desde la que copiaremos lo que necesitamos para los proyectos.
En esta biblioteca guardaremos el código fuente de los cms y frameworks que usemos, además de los módulos, plugins, bundles y temas que utilicemos habitualmente.
Integración continua: PHP Depend, realizando métricas de nuestras aplicaciones
0PHP Depend es una aplicación derivada de JDepend para Java, que genera una serie de gráficos de nuestras aplicaciones para poder realizar un seguimiento sobre la calidad de nuestro software. Para que te hagas una idea, esta aplicación nos permite saber la complejidad de un método, a través de la suma de sus estamentos (if, for, etc.), este dato, comparado con el resto del código, nos permite saber si un método está optimizado o es demasiado complejo y habría que factorizarlo.
Veamos como se instala.
Para instalar PHP_depend primero es necesario que PEAR descubra el canal desde donde se descargará la aplicación.
pear channel−discover pear.pdepend.org
A continuación mostramos una lista de los paquetes disponibles:
pear remote−list −c pdepend
Instalamos:
pear install pdepend/PHP_Depend
Es necesario instalar algunos paquetes más. Primero indicamos a PEAR que descubra el siguiente canal:
pear channel−discover pear.xplib.de
A continuación instalamos el siguiente paquete:
pear install xplib/PHP_CodeSniffer_CommentParser2−0.1.5
Que es necesario para instalar el siguiente paquete:
pear install xplib/PHP_CodeSniffer_Standards_Zeta−0.2.0
Que también es necesario para instalar el siguiente paquete:
pear install pdepend/PHP_CodeSniffer_Standards_PDepend2
Por último instalamos un paquete que se comunicará con el issue tracker (o eso indica):
pear install pdepend/PHP_Depend_Log_Arbit
Para probarlo podéis ejecutar este comando desde la consola:
pdepend −−summary−xml=/tmp/summary.xml −−jdepend−chart=/tmp/jdepend.svg −−overview−pyramid=/tmp/pyramid.svg /usr/local/share/pear/PDepend
Os generará varios gráficos y un archivo xml del código de la misma herramienta, pdepend.
Integración continua: phpcpd, detectando el código duplicado
0PHPCPD es una aplicación que nos permite detectar fragmentos de código duplicado o muy parecido, de tal forma que podamos optimizarlo creando métodos o funciones que eliminen esa duplicidad.
Su instalación es simple:
pear channel−discover pear.phpunit.de pear channel−discover components.ez.no pear channel−discover pear.symfony.com pear channel−discover pear.netpirates.net pear install phpunit/phpcpd
Para ejecutar usamos:
phpcpd −−log−pmd ruta−donde−se−guardará−el−resultado−del−analisis/cpd.xml directorio−o−archivo−a−analizar

WP-SynHighlight, plugin para insertar código en tus post
4Llevaba unos días buscando un plugin que me permitiese añadir trozos de código fuente en los post sobre programación, ya que el que tenía debía trabajar en la vista HTML y, la verdad, es un engorro. Así que buscando y buscando encontré este plugin que permite escribir código fuente en el editor visual.
Este plugin, al igual que la mayoría que permiten añadir código fuente a los post, está basado en Geshi, que es el responsable de procesar el código y darle el formato deseado.
Su instalación es igual que la de cualquier otro plugin de WordPress, pero lo interesante de este plugin es que dispone de un editor visual para añadir el código fuente, donde podrás cambiar muchos aspectos de como se visualizará el código.
Además permite añadir código fuente en los comentarios utilizando para ello los QuickTags de la siguiente manera:
Si quisiéramos añadir código PHP a un comentario escribiríamos lo siguiente:
[*codesyntax lang=»php»]
<?php echo «Hello World!»; ?>
[*/codesyntax]
Eso sí, sin los asteriscos. Así quedaría el fragmento de código:
- <?php echo "Hello World!"; ?>
Geshi permite añadir código de una gran cantidad de lenguajes. Podeis ver un listado en su página principal: http://qbnz.com/highlighter/index.php
Symfony: La vista (I), fragmentos de código
0Debido a que la parte de Symfony que explicaré hoy es bastante densa no podré resumir en un solo post todo el capítulo referente a la Vista, por tanto este será el primero de una serie de post sobre la Vista en Symfony que se explica en el manual de Symfony.
La vista
Como ya he comentado en anteriores post, Symfony sigue el sistema de Modelo-Vista-Controlador (MVC) para que la realización de nuestros proyectos estén mucho mejor estructurados y sean más fáciles de comprender por otros programadores.
Symfony para crear las vistas o implementar el diseño que hemos creado a nuestro proyecto, utiliza plantillas, esto son trozos de código html que se unen para formar la página que ha pedido el usuario.
En Symfony todo el diseño se divide de la siguiente manera:
- Layout: Es la parte del diseño que se mostrará en todas las páginas (cabeceras, pie, menú, etc).
- Elementos parciales: Si el fragmento contiene poca lógica.
- Componentes: Si el fragmento tiene mucha lógica o debe acceder a la base de datos.
- Slots: Si el fragmento va a sustituir a una parte del layout y se mostrará una parte por defecto.
En el libro lo explican bastante bien como se dividen las plantillas, los fragmentos de código que se pueden utilizar, cómo pasar variables desde la acción a los fragmentos de código, y algún detalle más que viene bien conocer. Os dejo el link a los Fragmentos de código.
Normalmente cuando trabajamos con plantillas en nuestros proyectos PHP, utilizamos la instrucción include() y en Symfony podríamos añadir a nuestro código algo como lo siguiente:
<?php include(sfConfig::get(‘sf_app_template_dir’).’/miFragmento.php’) ?>
Pero esta forma de añadir fragmentos de código no es muy limpia y, además, la caché de Symfony no reconoce la instrucción include() con lo que ese fragmento no podría ser cacheado. Aquí es donde entran en juego los fragmentos de código que he comentado anteriormente.
ELEMENTOS PARCIALES
Observa un periódico digital, su portada concretamente, verás que las noticias estan encajadas como en recuadros imaginarios y que cada noticia sigue un patrón: un titular y un pequeño avance de la noticia. Eso es un elemento parcial. Podemos poner ese elemento parcial en cualquier parte de ese periódico digital, ya que siempre será importante que el usuario pueda acceder a otras noticias con un pequeño avance.
Symfony sigue esta misma lógica para los elementos parciales. Estos, al igual que las plantillas, se ubican en la carpeta «templates/» del proyecto y son accesibles desde el módulo en el que se encuentre el archivo, desde otro módulo o desde la carpeta raíz de las plantillas «templates/«. Los elementos parciales se diferencian de las plantillas por llevar un guión bajo al principio del nombre del archivo ( _elementoparcial.php). Veamos como llamar a los elementos parciales desde distintas ubicaciones:
// Incluir el elemento parcial de miaplicacion/modules/mimodulo/templates/_miparcial1.php
// Como la plantilla y el elemento parcial están en el mismo módulo,
// se puede omitir el nombre del módulo
<?php include_partial(‘miparcial1’) ?>// Incluir el elemento parcial de miaplicacion/modules/otromodulo/templates/_miparcial2.php
// En este caso es obligatorio indicar el nombre del módulo
<?php include_partial(‘otromodulo/miparcial2’) ?>// Incluir el elemento parcial de miaplicacion/templates/_miparcial3.php
// Se considera que es parte del módulo ‘global’
<?php include_partial(‘global/miparcial3’) ?>
PASANDO VARIABLES AL ELEMENTO PARCIAL
Primero definimos la variable en la acción del módulo llamado mimodulo (mimodulo/actions/actions.class.php)
class mimoduloActions extends sfActions
{
public function executeIndex()
{
$this->total = 100;
}
}
En la plantilla llamamos al elemento parcial con la función include_partial() y le pasamos la variable en mimodulo/templates/indexSuccess.php.
<p>¡Hola Mundo!</p>
<?php include_partial(‘miparcial’, array(‘mitotal’ => $total)
) ?>
De esta manera podremos usar la variable en el elemento parcial en mimodulo/templates/_miparcial.php.
<p>Total: <?php echo $mitotal ?></p>
COMPONENTES
Los componentes son como los módulos, pero más rápidos. Siguen la misma lógica que los módulos y tienen una estructura de archivos parecida. Para nombrar un componente se utiliza la palabra execute seguido del nombre del componente, por ejemplo:
La clase de los componentes, en modules/news/actions/components.class.php
<?php
class newsComponents extends sfComponents
{
public function executeHeadlines()
{
$c = new Criteria();
$c->addDescendingOrderByColumn(NewsPeer::PUBLISHED_AT);
$c->setLimit(5);
$this->news = NewsPeer::doSelect($c);
}
}
La parte visual de los componentes se crea utilizando los elementos parciales. Para nombrarlos se usa lo mismo que para los componentes solo que sustituyendo la palabra execute por un guión bajo.
El elemento parcial, en modules/news/templates/_headlines.php
<div>
<h1>Últimas noticias</h1>
<ul>
<?php foreach($news as $headline): ?>
<li>
<?php echo $headline->getPublishedAt() ?>
<?php echo link_to($headline->getTitle(),’news/show?id=’.$headline->getId()) ?>
</li>
<?php endforeach ?>
</ul>
</div>
Cada vez que se quiera añadir el componente a una plantilla, sólo será necesario escribir el siguiente código:
<?php include_component(‘news’, ‘headlines’) ?>
Paso de parámetros a un componente y su plantilla:
// Llamada al componente
<?php include_component(‘news’, ‘headlines’, array(‘parametro’ => ‘valor’)) ?>// Dentro del componente
echo $this->parametro;
=> ‘valor’// Dentro del elemento parcial _headlines.php
echo $parametro;
=> ‘valor’
SLOTS
Aquí debería hablaros de los slots que simplemente son una especie de elemento parcial configurable, y para explicároslo solo se me ocurre hacer un copy&paste del libro, así que os dejo el link (al final de la página) y espero que os ayude.
Google sitemap y PHP
0Acabo de terminar de programar, testear y poner en servicio un pequeño script en php, que me permitire generar un archivo xml para que el robot de google lo procese, y así, indexar las páginas de una web mucho más rápido.
No lo utilizo en el blog, por la sencilla razón de que tengo un plugin que lo realiza automáticamente:http://wordpress.org/extend/plugins/google-sitemap-generator/. Este script sirve para webs o bien hechas desde cero sin cms de ningún tipo, o bien para cms modificados que requieran un sitemap especial.