Archive for the ‘Symfony 1.4’ Category

01
Nov

Hacer paginación de resultados en Symfony no es muy difícil. Con los siguientes pasos basta y sobra.

Para cualquier módulo que tengamos debemos agregar la instanciación de la clase sfDoctrinePager en la acción. Creamos una “Query” para obtener los registros que necesitamos y se los pasamos al paginador.


<?php 
public function executeIndex(sfWebRequest $request)
{
  $max_per_page = 10;
  $query = Doctrine::getTable('NombreClase')->createQuery('n');
  $this->pager = new sfDoctrinePager('NombreClase', $max_per_page);
  $this->pager->setQuery($query);
  $this->pager->setPage($request->getParameter('pag', 1));
  $this->pager->init();
}

Luego, en el “template”, usamos la lista de objetos como normalmente la usaríamos.


<?php foreach($pager->getResults() as $item): ?>
  [...]
  <?php echo $item ?>
  [...]
<?php endforeach; ?>

08
Jun

En un post anterior, expliqué como utilizar completamente UTF8 con Doctrine en Symfony 1.4, ahora me fue necesario adaptar un sistema para que utilizara LATIN1 (ISO-8859-1) y no funcionó de la misma forma.

Entonces, para setear la codificación que utilizará Doctrine en las tablas y en las transacciones se debe establecer la opcion encoding.

En el archivo: databases.yml

all:
 doctrine:
   class: sfDoctrineDatabase
   param:
     dsn:      mysql:host=********;dbname=********
     username: ********
     password: ********
     encoding: latin1

Esto es muy útil para el problema que se da con el comando automático "SET NAMES 'UTF8'" que ejecuta Doctrine en cada conexión a la base de datos.

Fuente: http://www.symfony-project.org/reference/1_4/en/07-Databases

, , ,

04
Feb

Algo muy útil para nuestras aplicaciones que manejan datos con fechas y horas, es conocer el helper DateHelper para que nos ayude en la tarea de mostrar una fecha de una forma entendible al usuario.

Lo veremos con un ejemplo. Se tiene la fecha “2010/01/01 23:45:00” almacenada en algún lugar, pero nos gustaría que al usuario se le mostrara “Viernes 1 de enero de 2010 23:45”. Para esto cargamos el helper de fechas de Symfony, directamente en el template.

indexSuccess.php

<?php use_helper('Date') ?>

Luego, cuando queremos mostrar la fecha utilizamos la función de formato.

<?php echo format_datetime($fecha, 'g', 'es_CL') ?>

Ahora, la explicación. El primer parámetro es la variable o la fecha que queremos mostrar, el segundo es el formato que le queremos dar a la fecha mostrada (los cuales listaré al final) y por último, se elige la cultura. Los dos últimos parámetros son opcionales, y si se omiten se utilizan los predefinidos.

En la documentación pueden ver qué otras funciones tiene el helper: http://www.symfony-project.org/api/1_4/DateHelper

Tipos de formatos

  • 'd' : Fecha corta
  • 'D' : Fecha larga
  • 'p' : Fecha largo medio
  • 'P' : Fecha completa
  • 't' : Hora corta
  • 'T' : Hora larga
  • 'q' : Hora largo medio
  • 'Q' : Hora completa
  • 'f' : Fecha larga + Hora corta
  • 'F' : Fecha larga + Hora larga
  • 'G' : Fecha corta + Hora larga
  • 'g' : Fecha corta + Hora corta
  • 'i' : yyyy-MM-dd
  • 'I' : yyy-MM-dd HH:mm:ss
  • 'm' ó 'M' : MMMM dd
  • 'r' ó 'R' : EEE, dd MMM yyyy HH:mm:ss
  • 's' : yyyy-MM-ddTHH:mm:ss
  • 'u' : yyyy-MM-dd HH:mm:ss z
  • 'U' : EEEE dd MMMM yyyy HH:mm:ss
  • 'y' ó 'Y' : yyyy MMMM

Espero, como siempre, que esto le sea de utilidad a alguien. Se agradecen los comentarios y/o correcciones.

, , , ,

21
Ene

Hace poco que estoy empezando a utilizar Symfony 1.4, en un nuevo proyecto, y me encontré con que establece la codificación “latin1” en forma predeterminada para la creación de las tablas MySQL, con Doctrine.

Navegando encontré el siguiente código, el cual ya he comprobado, para establecer la codificación de caracteres de la conexión de Doctrine.

Editar el archivo config/ProjectConfiguration.class.php

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->enablePlugins('sfDoctrinePlugin');
  }

  public function configureDoctrine(Doctrine_Manager $manager)
  {
    $manager->setCollate('utf8_unicode_ci');
    $manager->setCharset('utf8');
  }

}

Espero les sirva.

Vía Rajat Pandit

Actualización:
Otra alternativa, que nos llega por nervo en los comentarios:
databases.yml

all:
 doctrine:
   class: sfDoctrineDatabase
   param:
     dsn:      mysql:host=********;dbname=********
     username: ********
     password: ********
     attributes:
       default_table_type:    InnoDB
       default_table_collate: utf8_unicode_ci
       default_table_charset: utf8

Actualización 2:
Otra alternativa, que nos llega esta vez por kaskas en los comentarios:
schema.yml

options:
  collate: utf8_unicode_ci
  charset: utf8
  type: InnoDB
Reblog this post [with Zemanta]

, , ,