RSS .92| RSS 2.0| ATOM 0.3
  • Inicio
  • Correo Web
  •  

    Kohana Framework: Service Module

    Abril 26, 2008 @ 7:54
    Alex Sancho

    En mi lucha contra el insomnio llevo unos días escribiendo un nuevo modulo para kohana, la función de este es la de integrar una interfase que permita consumir diferentes API de servicios web.

    Por el momento he incluido los drivers necesarios para trabajar con:

    Si se os ocurre alguno más no dejéis de comentarlo.

    Descargar codigo fuente: Service module

    Comentarios (0) | | Digg It! | | ma.gnolia |


    Kohana Framework: multilingual inflector

    Abril 5, 2008 @ 17:07
    Alex Sancho

    Últimamente estoy totalmente volcado en aprender todo lo posible sobre kohana, trabajar con este framework hace que programar sea pura diversión.

    Ayer estuve un par de horas escribiendo un reemplazo para el helper “inflector”, mas que nada por ver si podía adaptar estas ideas Improved pluralizing in PHP, ActionScript, and RoR, AkInflexor.phps, sustituyendo los métodos para crear el plural y singular ya que el que viene en el framework solo soporta el ingles y de una manera bastante básica.

    Después de probar unas cuantas ideas, creo que el resultado final es bastante satisfactorio. He creado una librería independiente que utiliza el sistema de drivers de Kohana. De esta forma puedo aplicar diferentes reglas dependiendo del lenguaje.

    Aquí os dejo la librería y la extensión del helper, estaré encantado de leer cualquier comentario que ayude a mejorar la idea.

    inflector.tar.gz

    Comentarios (0) | | Digg It! | | ma.gnolia |


    Temper: Kohana Template Parser

    Marzo 24, 2008 @ 19:44
    Alex Sancho

    Tan solo anunciar la disponibilidad de temper, un motor de plantillas para kohanaphp, basado en Using a Stack to Parse HTML with PHP5. La idea principal del modulo es la de proveer de un lenguaje de plantillas sencillo, intuitivo y seguro.

    El modulo sigue las características del framework, por lo que resulta totalmente extensible y aprovecha el sistema de ficheros en cascada.

    Sintaxis

    Temper soporta varios tipos de sintaxis dentro de las plantillas, para ello usa tres tipos de delimitadores, {}, {{}}, <prefix:tag></prefix:tag>

    Variables

    • {=variable} se convierte en <?=$variable;?>
    • {=variable|funcion} se convierte en <?=funcion($variable);?>
    • {foo.variable} representa un objeto o matriz
    • {/path/to/} se convierte en http://example.com/path/to/
    • {/path/to/=variable/} se convierte en http://example.com/path/to/<?=$variable;?>

    Funciones

    • {{echo({%foo})}} se convierte en <?php echo($foo);?>
    • {{class::method({%foo}, ‘arg’, ‘arg’)}} se convierte en <?= calluserfunction_array(array(‘class’,’method’), array(‘arg’,’arg’));?>

    Tags

    En temper los tags están representados como objetos, lo que nos permite añadir tags personalizados o incluso deshabilitar los que no necesitemos para mejorar el rendimiento del modulo.

    La sintaxis de cada etiqueta varia dependiendo de los argumentos que acepta.

    Por ejemplo, para incluir un bloque condicional (if elseif else)

    <ko:if var="a" eq="a">a
                <ko:elseif var="a" eq="b" />b
            <ko:elseif var="a" neq="">set
                <ko:else />not set</ko:if>

    La documentación del modulo aun es algo así como inexistente, pero creo que con los ejemplos que incluye y dando una ojeada al código es suficiente para entender su funcionamiento.

    El compromiso para los próximos días es añadir algo de documentación al proyecto y algún ejemplo mas “real”.

    Comentarios (2) | | Digg It! | | ma.gnolia |


    Menu > #current

    Febrero 5, 2008 @ 8:49
    Alex Sancho

    Diferenciar el enlace actual dentro de un menú es una tarea relativamente fácil, básicamente solo tenemos que comparar los enlaces del menú con la url actual y añadir una id al enlace en el caso de que coincidan.

    La siguiente técnica intenta facilitar este proceso, la idea es procesar un bloque de html mediante php y encontrar la coincidencia,

    el menú

    como ejemplo usare una lista desordenada para la estructura del menú

    $menu = '
            <div class="menu-container">
                <ul id="menu">
                    <li><a href="http://example.com/path/seccion1/">Seccion 1</a></li>
                    <li><a href="http://example.com/path/seccion2/">Seccion 2</a></li>
                    <li><a href="http://example.com/path/seccion3/">Seccion 3</a></li>
                </ul>
            </div>';

    Como podéis ver, la estructura del menú no presenta ninguna limitación, en este caso utilizo una lista, pero podría utilizar cualquier tipo de contenedor para el propósito.

    la función

    Creo que el método de uso no tiene secreto, pasamos nuestro menú a la función menu_current($menu);

    <?php
        funcion menu_current($menu)
        {
            $lines = split("\n", $menu);
            foreach($lines as $line)
            {
                preg_match('/href="([^"]+)"/', $line, $url);
                if (isset($url[1]))
                {
                    $section = end(explode("/", trim(parse_url($url[1], PHP_URL_PATH), '/')));
                    $request = explode("/", trim($_SERVER["REQUEST_URI"], '/'));
    
                    if(in_array($section, $request))
                        $line = str_replace('<a h', '<a id="current" h', $line);
                }
                $array[] = $line;
            }
            echo implode("\n", $array); 
        }
        ?>

    Comentarios (0) | | Digg It! | | ma.gnolia |


    Profiling PHP

    Noviembre 9, 2007 @ 14:21
    Alex Sancho

    Siempre es una buena practica el controlar los tiempos de ejecución de nuestros scripts a medida que vamos avanzando en el proceso de programación.

    Y que mejor manera de hacerlo que desde las propias entrañas del interprete.

    En el caso de PHP, dispone de varias extensiones que se encargan de este cometido, dos de ellas son xdebug y APD (Advanced PHP Debugger).

    Personalmente no he utilizado APD, puesto que aunque no me da ningún error de compilación no he sido capaz de obtener resultado alguno. En cambio xdebug presenta un informe totalmente detallado de la ejecución del script.

    Aunque ninguna de ellas es parte integral del interprete, su instalación y funcionamiento es muy sencillo. Por ejemplo, para instalar xdebug,

    1. pecl install xdebug
    2. añadimos al php.ini las siguientes lineas
    zend_extension="/ruta/al/modulo/xdebug.so"
        xdebug.profiler_enable = 1
        xdebug.profiler_output_dir = "/tmp"

    Finalmente, para poder leer los informes, necesitamos algún programa que soporte el formato cachegrind, en linux tenemos kcachegrind, supongo que para el resto de SO existen soluciones similares.

    Comentarios (1) | | Digg It! | | ma.gnolia |