vifito.eu

Web Development & Open Source

  • Aumentar o tamaño da fonte
  • Tamaño do texto por defecto
  • Diminuir o tamaño do texto
PHP

Vifito_Filter_Unhyphenate, un filtro de ZF para arrays

A potencia que ofrecen os arrays en PHP non está dispoñible en Javascript. En ocasións vémonos obrigados a facer verdadeiros quebracabezas a hora de transportar datos entre cliente e servidor se traballamos con formularios dinámicos. Co termo "formularios dinámicos" refírome a ese tipo de formularios que poden variar o seu número de campos no lado cliente antes de que sexan enviados. Por exemplo unha situación típica son as liñas dunha factura, os ítems dun pedido, ...

Un exemplo aclarará o que pretendo dicir. Partimos do seguinte formulario:


1
2
3
4
5
<input type="text" id="nome-1" name="nome[]" value="" />
<input type="text" id="nome-2" name="nome[]" value="" />
<input type="text" id="nome-3" name="nome[]" value="" />
<input type="text" id="nome-4" name="nome[]" value="" />
...

 

Estes campos non presentan ningún problema para ser procesados dende PHP (os datos estarán dispoñibles no array $_REQUEST[nome][]), ou para traballar con identificadores javascript (document.getElementById('nome-1') para recuperar un elemento en concreto).

A complicación aparece cando queremos ter unha identificación a nivel de fila tanto no lado cliente como no servidor, entón o código debería incluir no índice do array o identificador correspondente:


1
2
3
4
5
<input type="text" id="nome-1" name="nome[1]" value="" />
<input type="text" id="nome-7" name="nome[7]" value="" />
<input type="text" id="nome-12" name="nome[12]" value="" />
<input type="text" id="nome-40" name="nome[40]" value="" />
...

O funcionamento seguiría sendo válido e funcional, pero estaríamos tendo unha sintase duplicada, tendo en conta que con id="nome-1" é o mesmo que name="nome[1]". Ademáis complicaríase o código javascript na xeración de campos dinámica, xa tería que ter en conta as dúas situacións.

Vexamos agora outro código que almacena información que pode ser enviada ao servidor pero que non emprega formularios:


1
2
3
4
5
6
<ul>
<li id="person-1">Manuel ... #1</li>
<li id="person-2">Perico ... #2</li>
<li id="person-3">Lucas ... #3</li>
<li id="person-4">Agapito ... #4</li>
</ul>

Esta estructura podería ser un menú dinámico, unha lista "sortable", unha árbore, ... que mediante javascript permitise o mantemento da metainformación. Para este caso interesaríame enviar nunha petición Ajax os datos serializados empregando como claves os identificadores (person-1=...&person-2=...&person-3=...) e no servidor dispoñer dunha estructura PHP máis manexable.

Facendo uso do filtro Vifito_Filter_Unhyphenate será posible transformar estes envíos en estructuras máis manexables dende código PHP. Para un dato enviado nunha petición POST tal que:

 

1
$_POST['contenedor-subcont-otro-10-2'] => 'mi valor'

será convertido nun array coas claves aniñadas en función dos guións:

 

1
$array['contenedor']['subcont']['otro'][10][2] => 'mi valor'

Na sección de descargas está dispoñible o código fonte para a súa descarga que inclúe un exemplo de uso con jQuery.

 

Ler máis ...
 

Instalación de PECL runkit en PHP 5.2

Compilación e instalación da extensión runkit en contornos debian/ubuntu.

 

Ler máis ...
 

ZFDebug, unha toolbar para desenvolver con Zend Framework

ZFDebug é un plugin para Zend Framework que inclúe unha pequena, pero moi útil, barra de ferramentas en cada unha das páxinas da aplicación fornecendo información de depuración/desenvolvemento (tempo de execución, uso de memoria, número de consultas a base de datos, info do contorno de desenvolvemento, ...). Este proxecto está inspirado na barra análoga dispoñible en symfony.

Detalle da toolbar

O código atópase en Google Code e pódese descargar sendo moi sinxela a integración nunha aplicación desenvolvida con Zend Framework. Só basta con implementar un método "_initZFDebug" da clase Bootstrap no ficheiro application/Bootstrap.php co o seguinte:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{   
    //... 
    protected function _initZFDebug()
    {
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->registerNamespace('ZFDebug');
 
        $options = array(
            'plugins' => array('Variables', 
                               'File' => array('base_path' => '/var/www/galdic/galdic'),
                               'Memory', 
                               'Time', 
                               'Registry', 
                               'Exception')
        );
 
        if ($this->hasPluginResource('db')) {
            $this->bootstrap('db');
            $db = $this->getPluginResource('db')->getDbAdapter();
            $options['plugins']['Database']['adapter'] = $db;
        }
 
        # Setup the cache plugin
        if ($this->hasPluginResource('cache')) {
            $this->bootstrap('cache');
            $cache = $this-getPluginResource('cache')->getDbAdapter();
            $options['plugins']['Cache']['backend'] = $cache->getBackend();
        }
 
        $debug = new ZFDebug_Controller_Plugin_Debug($options);
 
        $this->bootstrap('frontController');
        $frontController = $this->getResource('frontController');
        $frontController->registerPlugin($debug);
    } 
}
 

O nome do método ten que comezar co sufixo _init, o resto do nome do método non inflúe, véxase a documentación de Zend_Application.

Despois só queda incluir no directorio public/images/ as iconas que veñen no código dentro do directorio debugbar/

Referencias:

 

 

Optimizar as táboas dunha base de datos con Database Transversal API

Facendo uso de Database Transversal API é posible optimizar as táboas de MySQL dunha base de datos cun simple script.

O seguinte código amosa como percorrer nun bucle todas as táboas e executar a sentencia OPTIMIZE TABLE nome_taboa.

 

Ler máis ...
 

GalDic, proxecto do CDWA

GalDicO pasado ano estiven matriculado nun curso de desenvolvemento web avanzado no que tiña que realizar un proxecto fin de curso. Ao meu chameille GalDic (dicionario de galego 2.0). Como se pode supoñer este proxecto é un dicionario de galego vía web. O que non se ve é que conta con servizos web que están dispoñibles para o seu uso. En canto teña tempo publicarei exemplos de código que amosan o seu uso, no entanto, comenzarei unha fase de testeo e viabilidade dunha interface offline empregando google gears as novas características de HTML5.

Mentras tanto o código está dispoñible dende os seguintes enderezos:

 


Páxina 1 de 2