Error de Eclipse en Ubuntu 10.04 con PhpEclipse

La versión de repositorios de Eclipse para Ubuntu nunca ha funcionado perfectamente, siempre hay que ajustar algo.

En Ubuntu Lucid Lynx no vamos a encontrarnos con la excepción.

En mi caso, el error se presentó al querer instalar PhpEclipse. Durante el proceso, recibí un mensaje de error.

Ahora bien, a diferencia de otras veces, me puse a buscar (no puede ser que siempre haya problemas con ésta ide).

Después de leer muchísimos threads y hacer unas cuantas pruebas en más de un desktop, encontré que la forma para solucionarlo era agregando paquetes de Eclipse que por defecto no se instalan.

Para solucionarlo, vamos a buscar si los paquetes eclipse-pde eclipse-jdt eclipse-rcp están instalados.

root@linux:~# aptitude search eclipse-pde eclipse-jdt eclipse-rcp
p   eclipse-jdt                                                            - Eclipse Java Development Tools (JDT)
p   eclipse-pde                                                            - Eclipse Plug-in Development Environment (PDE)
i A eclipse-rcp                                                            - Eclipse Rich Client Platform (RCP)

Continue reading

Creando un nuevo controller en CodeIgniter

Vamos a crear nuestro primer controlador, para luego ir sumando los otros elementos del patrón MVC.

A manera de ejercicio vamos a ir armando, a lo largo de varios posts, una pequeña y sencilla aplicación que nos obligue a loguearnos para que luego podamos realizar alguna tarea (sobre la marcha veremos qué se puede armar).

Siguiendo ésta línea, vamos a crear un controlador que nos obligará a loguearnos. De ésta forma, se convertirá en el controlador por defecto de la aplicación.

Cuando comenzamos a jugar o trabajar con el framework, vamos a ver que nos aparece un mensaje de bienvenida. Justamente, es el controlador Welcome el que se hace presente.

Ahora bien, por qué ese controlador y no otro. Esto se debe a que una de las configuraciones de CodeIgniter nos permite especificar cuál controlador se ejecutará por defecto.

Para saber cuál es o para cambiarlo, debemos acceder al archivo /system/application/config/routes.php y buscar los siguientes valores (serán los únicos no comentados):

$route['default_controller'] = "welcome";
$route['scaffolding_trigger'] = "";

Vamos a cambiar el valor de default_controller a login. Debe quedarnos de la siguiente forma.

$route['default_controller'] = "login";
$route['scaffolding_trigger'] = "";

Entendido esto, creamos nuestro primer controlador. En la carpeta /system/application/controllers tenemos el archivo welcome.php. Ese es el controlador (el único) que vamos a encontrar.

Continue reading

Primeros pasos con CodeIgniter

Ya habíamos visto (hace un tiempo) cómo se compone, mínimamente, la estructura de directorios y archivos que componen CodeIgniter.

Una vez que hayas descomprimido el framework, ya estamos listos para empezar.
Lo primero que deberíamos hacer es comenzar con las configuraciones básicas. Para esto vamos a abrir el archivo /system/application/config/config.php y vamos a cambiar el primer parámetro en la línea 14:

$config['base_url'] = "http://example.com/";

Lo vamos a cambiar por la url completa de nuestra aplicación.
Vamos a suponer que se tratara de este mismo blog, la url quedaría de la siguiente forma.

$config['base_url'] = "http://www.damianculotta.com.ar/";

Como bien dice el manual, si vamos a utilizar base de datos, debemos especificar la configuración en /system/application/config/database.php. Busquemos la siguiente sección:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Y completemos, al menos, los datos de conexión a nuestra base de datos.

Cuando accedamos a nuestra url, veremos el mensaje de bienvenida que es manejado por el controller Welcome del framework.

Con esto ya estamos listos para comenzar a desarrollar nuestra primera aplicación.

Provincias en un formulario de contacto personalizado en Magento

Supongamos que necesitamos armar un formulario de contacto adicional al que ya provee Magento. Supongamos también que necesitamos utilizar datos de la plataforma.

En éste ejemplo vamos a ver cómo invocar las provincias/regiones en nuestro formulario.

La porción de código referente al dropdown que mostrará las regiones se vería, pensando en el skin default, de la siguiente manera:

<div class="input-box">
    <label for="state"><?php echo Mage::helper('customcontacts')->__('State') ?> <span class="required">*</span></label><br />
    <?php $_regions = Mage::getModel('directory/region')->getCollection();?>
    <select name="state" id="state" class="required-entry validate-select">
        <option value=""><?php echo Mage::helper('customcontacts')->__('Select State') ?></option>
        <?php foreach($_regions as $_region): ?>
            <option value="<?php echo $_region->getName(); ?>"><?php echo $_region->getName(); ?></option>
        <?php endforeach; ?>
    </select>
</div>

El resultado de éste código seria el siguiente.

Ahora bien, no buscamos todas las provincias, estados o regiones que tenemos disponibles, sino que vamos a filtrar según un país dado.

En el ejemplo, previo instalación de la extensión Dc_Argentineregions, vamos a buscar obtener sólo las provincias de Argentina.

Para esto, tenemos que hacer un pequeño cambio a nuestro código.

<div class="input-box">
    <label for="state"><?php echo Mage::helper('customcontacts')->__('State') ?> <span class="required">*</span></label><br />
    <?php $_regions = Mage::getModel('directory/region')->getResourceCollection()->addCountryFilter('AR')->load();?>
    <select name="state" id="state" class="required-entry validate-select">
        <option value=""><?php echo Mage::helper('customcontacts')->__('Select State') ?></option>
        <?php foreach($_regions as $_region): ?>
            <option value="<?php echo $_region->getName(); ?>"><?php echo $_region->getName(); ?></option>
        <?php endforeach; ?>
    </select>
</div>

Y el resultado será el siguiente:

Lo que hicimos fue cambiar el método de lectura del modulo y agregarle el método addCountryFilter pasandole el código del país que necesitamos.

Iniciar un proyecto con CodeIgniter

En Php podemos encontrar gran cantidad de frameworks que buscan resolver cuestiones estructurales al momento de plantearnos una aplicación. Uno de ellos, es CodeIgniter.

Este post no trata sobre vender las bondades del framework, sino sobre cómo empezar a usarlo.

Inicializar un proyecto es algo bastante sencillo y rápido.

Lo primero será descargar CodeIgniter.

Una vez descomprimido el paquete (y suponiendo que lo ubicamos en el directorio del proyecto) nos vamos a encontrar con la siguiente estructura.

/
|
+--/ system
|
+--/ user_guide
|
+-- index.php
|
+-- license.txt

Ahora, si apuntamos con nuestro navegador hacia la dirección/carpeta en donde esté el proyecto, tendríamos que ver la siguiente página.

Bienvenida de CodeIgniter

Continue reading

Accediendo a configuraciones de Magento

Hace unos días me tocó armar una extensión en la cual se sobreescribían varios bloques, controladores y modelos de Magento.

El problema con el cual me encontré, era que necesitaba obtener valores de configuración (de los que se almacenan en la tabla core_config_data) en módulos que no eran los originales.

Normalmente, dentro de un módulo que guarda valores en esa tabla, utilizamos algo como ésto para recuperar dicho valor.

<?php
$this->getConfigData('clave_a_buscar');
?>

Ahora bien, con $this sabemos que estamos en nuestro módulo y lo que busca es la calve.

El caso que comento tenía una diferencia: $this no era $this. Es decir, $this es un módulo creado por mi, pero la configuración pertenece a otro módulo.

Para poder solucionarlo, el truco consiste en llamar al método de forma estática y en lugar de pedir sólo la clave que buscamos, tenemos que indicar el path completo.

<?php
Mage::app()->getStore()->getConfig('mi_modulo/mi_clave');
?>

De ésta manera, obtenemos cualquier valor de configuración, en cualquier lugar del código, sin importar el scope.

Opciones de formatDate en Magento

Hace un tiempo ya vimos como empezar a trabajar con el método formatDate.

El mismo se encuentra disponible en casi cualquier phtml, debido a la estructura de herencias de bloques.

La única función que tiene, y no por eso despreciable, es manipular el formato en el cuál se mostrará una fecha proveniente de la base de datos. Si bien lo vamos a usar de manera habitual dentro de nuestros phtmls, es posible utilizarlo también dentro de las plantillas de email.

Vamos a suponer que tenemos un objeto $data en una variable en nuestro phtml, que contiene un registro cualquiera (un producto, una página, etc) y que tiene un campo de fecha (al que vamos a llamar date haciendo honor a la falta de creatividad de ésta hora).

Ahora bien, si quisiéramos mostrarlo y simplemente lo invocamos, obtendríamos la fecha tal cual viene desde la base de datos.

< ?php
echo $data->getDate();
?>

Mostraría

2009-09-03 11:19:31 PM

Claro está que lo que buscamos es hacer presentable ese valor, y que, además, funcione de manera acorde a nuestra configuración regional.

Para lograrlo, recurrimos al método formatDate (que lo pueden encontrar en /app/code/core/Mage/Core/Helper/Data.php).

Continue reading

¿Cómo saber si una constante ha sido definida en Php?

Es posible que ante ciertos escenarios, utilizemos una constante para almacenar algún valor global dentro de nuestro código.

Para definir una constante, basta con la siguiente línea:

<?php
define("CONSTANTE", "Hola mundo.");
?>

Una vez definida, simplemente debemos invocarla para hacer uso de ese valor.

<?php
echo CONSTANTE;
//El resultado en pantalla será "Hola mundo."
?>

Normalmente, damos por sentado que dichas constantes están definidas, pero, ¿y si por algún motivo una constante no se definió?.

Si hacemos uso de esa constante y se diera ése último caso, lo más probable es que el resultado que obtengamos no sea el esperado.

Para controlar si la constante está declara, basta con hacer la siguiente pregunta.

<?php
if (defined('CONSTANTE')) {
    echo CONSTANTE;
} else {
    echo "La constante no ha sido definida";
}
?>

Un tip bastante sencillo, para algunos hasta obvio, pero de seguro útil.

Cambiar formato a un valor de tipo Fecha en Magento

Este post trata de unos pequeños tips o unos pequeños snippets que nos va a permitir manipular correctamente el formato de una fecha cuando estemos armando nuestros módulos en Magento.

Es muy probable que la forma en que quieran mostrar una fecha en un formulario, nada tenga que ver con el formato en que se almacena en la base de datos.

Tenemos tres instancias en las cuales trabajamos con la fecha: el formulario del módulo que nos permite ingresar los valores, el controlador que recibe los valores y los graba, y por último, la impresión directa en un phtml.

Para formatear correctamente el valor en el formulario que usamos para la carga, tenemos que agregarle algunas propiedades adicionales al campo.

< ?php
$fieldset->addField('event_date', 'date', array(
        'label'     => Mage::helper('module')->__('My Date'),
        'name'      => 'event_date',
        'image'     => $this->getSkinUrl('images/grid-cal.gif'),
        'format'    => '%d/%m/%Y',
    ));
?>

Inicialmente sólo tendrían los atributos “label” y “name”.

Con el uso de “image” (más la definición del tipo de campo) vamos a lograr que aparezca un calendario (un icono) a la derecha de nuestro campo, el cual nos permitirá seleccionar de forma visual el valor a ingresar.

Al aplicar “format”, especificamos (si, ya se que se imaginan lo que sigue) el formato que queremos aplicarle, en el formulario, a nuestra fecha.

Con esto tendríamos resuelta la primera parte del proceso. El ingreso de datos.

Continue reading

Debuggear Php en la consola de Firebug

A lo que ya hemos visto sobre el uso de la consola de Firebug, vamos a sumar una segunda extensión (siempre para Firefox), que nos va a permitir aprovechar la consola no sólo para Javascript, sino también para Php.

Esto lo vamos a lograr gracias a FirePHP, que funciona integrándose sobre Firebug, y se compone de dos elementos:

Una vez que hayas instalado la extensión, bajamos la librería (con soporte para Php 4 y 5) y la incluimos en nuestro proyecto.

Continue reading