Languages

Symfony

Feliz aniversario

Con un poco de retraso, nos queremos añadir a las felicitaciones del segundo aniversario de Symfony, nuestro framework preferido. Podéis leer el anuncio original de la notícia y otra notícia al respeto.

Y esperamos que siga creciendo y avanzando como mínimo al mismo ritmo que hasta ahora.

Enhorabuena!

del.icio.us, Yahoo! y Symfony

Buenas noticias para los creadores y para la comunidad de Symfony, y es que Yahoo! ha anunciado que utiliza nuestro framework favorito para crear la nueva versión de uno de los proyectos 2.0 estrella: del.icio.us. Anuncios como este son de una gran ayuda para poder explicar a responsables, directores técnicos y gestores de tecnologías de información que Symfony es un framework que sin duda puede adaptarse a las aplicaciones web más exigentes.

La noticia en el blog de symfony.

Indexant una web amb el protocol Sitemap

Google ha desenvolupat una sèrie d'eines per a webmasters que es poden trobar a Google Webmaster Central, una de les quals és el Protocol Sitemaps, per tal que els desenvolupadors puguin publicar la llista de links de la seva web, ja que moltes tenen pàgines dinàmiques que tan sols són accessibles des de formularis, i així es poden donar a conèixer als principals cercadors que ho soporten com Google, MSN i Yahoo!.

El fitxer que s'ha de generar, està en format XML i conté una llista de les URL i algunes característiques com la freqüència d'actualització o una ponderació dins el global de la web. Un cop es té aquest fitxer, es pot donar d'alta als cercadors.

Per generar aquest fitxer de forma dinàmica, en symfony podem crear un nou mòdul que anomenem "sitemap", i que nomès té una acció "index" que genera el fitxer XML:
actions.class.php:
public function executeIndex()
{

$xml = array();
$xml[] = '<?xml version="1.0" encoding="UTF-8"?>';
$xml[] = '<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">';
$url = array(
'http://www.exemple.com/contacte',
'http://www.exemple.com/ajuda');
foreach($url as $item){
$xml[] = ' <url>';
$xml[] = ' <loc>'. $item . '</loc>';
$xml[] = ' <priority>0.5000</priority>';
$xml[] = ' <changefreq>monthly</changefreq>';
$xml[] = ' </url>';
}

foreach(ItemPeer::doSelect(new Criteria()) as $item){
$xml[] = ' <url>';
$xml[] = ' <loc>http://www.exemple.com/item/'. $item->getStrippedTitle() . '</loc>';
$xml[] = ' <priority>0.8000</priority>';
$xml[] = ' <changefreq>weekly</changefreq>';
$xml[] = ' </url>';
}

$xml[] = '</urlset>';
$this->map = implode("\n", $xml);
$response = $this->getResponse()->setContentType('text/xml');
}


indexSuccess.php
<?php decorate_with(false) ?>
<?php echo $map ?>

I als cercadors només cal indicar-los que l'adreça del Sitemap és http://www.exemple.com/sitemap

Crear URL's clares en symfony

Quan es desenvolupa una web, un element que moltes vegades no es té en compte és el format de les URL de les pàgines, però a qibbus sempre hem intentat que aquest sigui un element important dins el projecte.

I perquè és important això? Doncs uns quants motius poden ser (segur que en podríem trobar molts més):

  • Per una banda no dóna pistes de com està estructurada la web internament: fitxers, base de dades, etc. (p.ex. és millor http://www.exemple.com/ca/activitats que no http://www.exemple.com/principal.php?pagina=activitats.php&idioma=cat ).
  • En segon lloc,tampoc dóna pistes de com està estructuraa l'organització que hi ha al darrera de la web (/informes/2007/xyz/ és millor que /~users/pol/documents/xyz/).
  • Permet tenir una coherència amb les URL's de la web, i el visitant pot saber on es troba de la web i també pot"endivinar" on trobar algun altre contingut (/cars/audi/ i /cars/ford/, en comptes de /cars/audi/ i /ford-cars/).
  • Si la URL té significat, també ser tingut en compte per alguns cercadors a l'hora d'indexar les pàgines, i millorar els resultats de les cerques.

Tot aquest tema ja fa temps que ha pres bastanta importància amb l'aparició dels blogs i els "links permanents" o permalink, que no acostumen a ser res més que URL's ben estructurades que permeten accedir a un contingut de forma permanent.

I per aconseguir generar les URL's clares en les aplicacions desenvolupades en Symfony, hem creat una petita utilitat, a partir de codi del wordpress, que es pot trobar adjunta a aquesta entrada, per si a algú li pot fer servei.

mytoolstar.gz

.htaccess rules: trailing slash or not?

With Symfony, we can fix the trailing-slash issue with redirects like the following in our root-level .htaccess file (we're running the app in a subdirectory under the server root, by the way):

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/index.php [QSA,L]

Festival de Cannes

Llegint symfony.es, descobrim que la web del Festival de Cannes que està desenvolupada en symfony, el nostre entorn de programació web preferit.

Per tant, una nova web "important" a afegir a la llista de projectes desenvolupats en symfony.

Symfony com a plataforma empresarial

En una entrevista al principal responsable de Symfony, exposen els punts forts del framework que el converteixen en una de les millors opcions per aplicacions empresarials:

  • Projecte amb llicència de programari lliure.
  • Documentació extensa (més de 700 pàgines online i en llibre).
  • S'inspira amb els millors frameworks (Struts i RoR) i hi afegeix les seves tecnologies propies.
  • Permet desenvolupar la part de gestió de les aplicacions de forma automàtica.
  • Manteniment de cada versió durant 2 anys.
  • Sistema de plugins que permet adaptació total a qualsevol necessitat.
  • Integració d'Ajax, respectant la accessibilitat.
  • Sistema d'internacionalització amb èxit provat (p.ex. Peugeot, en 35 idiomes)
  • Utilitzat per Yahoo Bookmarks, amb més de 20 milions d'usuaris i multiidioma.

Symfony 1.0RC

Avui ha sortit la primera versió candidata de symfony, el framework de desenvolupament en php que utiltizem en alguns dels nostres projectes, i al mateix temps els promotors han publicat un llibre sobre aquesta primera versió. El llibre est� a la venda a Amazon, però també es pot consultar on-line a la mateixa web del projecte.

Problemes amb l'IE

Per fer una finestra emergent en symfony (conegudes altrament per popup), existeix un helper que simplifica la feina, i nomès cal escriure
link_to("text del link", "url del link", Array('popup' => Array('NomDeLaFinestra','width=400,height=700'))).
Això tan senzill pot donar errors en IE, i és que el primer valor de l'Array, no pot contenir espais, ja que no és el títol de la finestra, sinó el nom pel qual hi pots fer referència.

Construint un arbre jeràrquic amb symfony

Desprès d'un temps cercant per la web sobre la millor forma de gestionar un conjunt de dades de forma jeràrquica i en una base de dades, vam decidir optar per la solució dels arbres transversals, sobre els quals vam trobar la següent informació pràctica:

A més, amb el symfony existeix un plugin (sfPropelTree) que ja treballa amb aquestes estructures, i nomès cal afegir dos camps numèrics nous (Lft i Rgt) a la taula que gestiona l'arbre i ja pots començar a treballar-hi.
A continuació s'expliquen els passos que hem seguit per integrar l'admin-generator del symfony, amb el plugin esmentat i així poder construir un sistema de menus jeràrquics com el de la imatge següent:

Per aconseguir aquest "gestor" del menú, nomès cal afegir les següents línies al fitxer generator.yml
object_actions:
_edit:
_delete: -
moveup: { name: Mover arriba, action: moveUp, icon: backend/asc.gif }
movedown: { name: Mover abajo, action: moveDown, icon: backend/desc.gif }
addchild: { name: Añadir nodo hijo, action: addChild, icon: backend/add.png }
i afegir les funcions corresponents al fitxer actions.class.php:
public function executeMoveUp ()
{
$node = MenuPeer::retrieveByPk($this->getRequestParameter('id'));
if ($node->getLeft()){
$node->moveBefore($node->getLeft());
}

$this->redirect('menu');
}
public function executeMoveDown ()
{
$node = MenuPeer::retrieveByPk($this->getRequestParameter('id'));
if ($node->getRight()){
$node->moveAfter($node->getRight());
}
$this->redirect('menu');
}
Cal tenir en compte que perquè això funcioni, vam haver de fer les modificacions comentades en el post anterior.

Contingut sindicat