Feeds:
Entrades
Comentaris

He considerat oportú canviar les URL d’una tenda desenvolupada en Cake per una actualització recent que hi estic aplicant, ja que segons com em podien donar certs problemes.

Així doncs volia passar d’unes URL com ara

domini/name-of-category-c-11.html
domini/name-of-product-p-234.html

on -c- indica que és una categoria i -p- un producte, identificats pel valor numèric, a:

domini/categories/11/name_of_category.html
domini/products/234/name_of_product.html
Continua llegint »

És fàcil que a l’hora d’instal·lar un cake ens trobem amb servidors que no tenen activat el mòdul mod_rewrite i per tant les urls netes, del tipus “www.nomweb.com/controlador/accio” no funcionen.

La primera recomanació és demanar que ens l’activin, ja que fer servir aquest tipus d’URLs fa l’aplicació més elegant i és molt útil pels buscadors.

Si pel motiu que sigui no és possible que ens l’activin, no desesperem. Cake contempla aquesta possibilitat i té una alternativa, utilitzar les “pretty URLs”. Canviant un parell de configuracions podrem fer que l’aplicació funcioni amb l’única diferència que les URLs seran del tipus “www.nomweb.com/index.php/controlador/accio”.

Continua llegint »

Els components CakePHP et poden facilitar enormement la vida en algunes tasques comunes en les aplicacions web. A més dels components inclosos al nucli de CakePHP, existeixen multitud de components “extra” que poden resultar molt útils -a mi m’ho han estat- i que aniré repassant a mesura que vagi tenint alguns moments.

Començaré per un de molt senzill que, no obstant, acaba sent molt pràctic quan es tracta amb usuaris en una aplicació web. Per aquest aspecte ja comptem amb el AuthComponent de CakePHP, inclòs al nucli i que gestiona l’autenticació d’usuaris. Però, i si volem afegir la opció d’identificar-se automàticament (el típic, “recorda’m la pròxima vegada”)? Doncs podem implementar-ho nosaltres mateixos utilitzant cookies o bé simplement utilitzar un component desenvolupat per Miles Johnson, l’AutoLogin Component.

En un tres i no res els nostres usuaris podran comptar amb la opció de visitar la nostra aplicació web i automàticament iniciar sessió amb el seu usuari. Tot amb una instal·lació molt fàcil i la possibilitat de configurar diferents aspectes com la durada de la cookie.

Ben tornat de les vacances, ja torno a ser aquí per anar deixant cosetes que em semblin interessants. I com no, continuem amb el framework CakePHP.
CakePHP incorpora entre els seus components el component Auth, que si ho desitgem s’encarrega de la identificació d’usuaris de manera fàcil i ràpida. Fins ara només l’havia utilitzat en una aplicació web ja que el component es va incorporar amb la versió 1.2 i les altres aplicacions on havia requerit d’identificació van començar a desenvolupar-se amb la versió 1.1 i utilitzant altres components semblants que feien la mateixa funció i que he conservat encara que les hagi adaptat a noves versions.
Doncs bé, el fet és que m’he trobat amb un petit problema editant la informació d’un usuari que ja havia iniciat sessió a l’aplicació.

Errors estúpids

Definiré com errors estúpids aquells que arriben a tocar els ous, normalment perquè m’han fet perdre el temps de manera estúpida, buscant solucions cada cop més rebuscades, quan la causa de l’error era una ximpleria.

allowEmpty, en què quedem?

Inauguro aquests errors estúpids amb un de validació. La propietat allowEmpty en una regla de validació marca si aquell valor pot deixar-se en blanc, independentment de la validació aplicada. En versions anteriors la propietat era ignorada si definies la teva pròpia regla de validació per un camp, de manera que s’havia de controlar a la nova regla definida. Però això va canviar -no sé ben bé en quin moment- i em va donar una estona de mals de cap. Així doncs, a vigilar que la propietat allowEmpty i la regla de validació que es defineixi no siguin contradictòries.

Una de les novetats que vaig veure revisant la documentació de la versió 1.2 no fa massa va ser que l’associació belongsTo incorporava un nou paràmetre: counterCache. El paràmetre counterCache permet mantenir un atribut amb el comptador de quants models té associat a través de hasMany.

Com utilitzar counterCache?

Precisament em va anar perfecte perquè tenia un sistema de noticies amb comentaris i volia mostrar el número de comentaris de les noticies a la portada, així que m’estalvio de fer una consulta amb count o recuperar tots els comentaris amb una join per saber quants comentaris en total té cada noticia. Tenint els següents models:

Noticia hasMany Comentari
Comentari belongsTo Noticia

Al model Comentari la relació belongsTo es defineix amb counterCache com a true.

var $belongsTo = array(
    'Noticia' => array(
            'className' => 'Noticia',
            'counterCache' => true,
     )
);

Afegim el camp comentari_count a la taula de la BD noticies i llestos. Cada cop que s’insereixi (o s’esborri) un comentari, cake s’encarregarà d’actualitzar el camp comentari_count. Fàcil no?

Estic adaptant a la nova RC3 de cakephp una aplicació web realitzada per la versió 1.1 del framework i, aplicant les noves regles de validació en un model, m’he trobat amb un aspecte amb el que fins ara no m’hi havia topat. A la versió 1.1 hi havia 4 regles que ara estan marcades com a deprecated:

  • VALID_NOT_EMPTY
  • VALID_NUMBER
  • VALID_EMAIL
  • VALID_YEAR

L’equivalent de la primera amb la nova validació de la versió 1.2 és ‘notEmpty’, la segona ‘numeric’, la tercera ‘email’ i la quarta…ei! la quarta com?

La meva primera idea ha estat provar sense èxit amb la regla date

‘year’ => array(‘rule’ => array(‘date’, ‘y’))

Però no accepta un format amb només l’any. Llavors he acabat recorrent a l’expressió regular

‘rule’ => array(‘custom’, ‘/^[12][0-9]{3}$/’)

‘rule’ => array(‘date’, null, ‘/^[12][0-9]{3}$/’)

Ambdues opcions fan exactament el mateix –date ignora el segon paràmetre si se li passa una expressió regular-, però potser sembla que passant l’expressió regular a date queda més clar.

Alguna opció millor?

A través d’un dels meus feeds de CakePHP he descobert una aplicació semblant a l’aplicació que vull pel meu projecte anomenada ModelBaker, que pinta molt bé tot i ser només per Mac. De moment es poden veure algunes imatges i un parell de screen casts que donen una idea de les funcions del programa.

Tot i tenir una idea similar no és exactament el mateix que el meu PFC. Podriem dir que ModelBaker afegeix una interfície gràfica molt amigable per construir aplicacions CakePHP, com el bake de consola que proporciona el mateix cakephp però amb GUI (i més opcions per personalitzar també).

La meva idea vol arribar al mateix punt però des d’un punt de partida diferent, a partir d’un esquema conceptual UML. Però no seria mala idea afegir un pas intermig similar al que fa ModelBaker per pulir les opcions del codi a generar segons el framework. I és que una de les intencions és no restringir-ho a un framework concret però certament, aquest punt està per veure. El que no crec que pugui aconseguir pas és una interfície tan clara i ordenada.

Aprofitaré el bloc per anar deixant constància dels avenços que pugui realitzar amb el meu Projecte de Final de Carrera, per tal d’acabar l’enginyeria informàtica a la FIB. El PFC que vaig proposar realitzar tracta de desenvolupar una aplicació que, a partir d’un diagrama UML, generi l’esquelet d’una aplicació web.  

Què vol dir això?
Doncs bàsicament una eina CASE específica per a aplicacions web que et generi codi per començar un projecte a partir d’esquemes UML. Però parlar d’aplicació web és massa genèric ja que en realitat el codi generat serà per a un framework PHP.  

Un framework PHP?
Si, concretament per a CakePHP. CakePHP és un framework que evidentment està desenvolupat en PHP i agafa moltes idees de Ruby On Rails. A més aplica patrons com ara el patró MVC, és object-oriented, té una llicència MIT i per si era poc, també és el que conec millor. No obstant, l’aplicació pretén ser el màxim modular possible per a acceptar altres frameworks.
Per desenvolupar l’aplicació he decidit utilitzar C++. La interfície gràfica serà en QT 4, on considero que em puc trobar un dels grans problemes per a generar una interfície suficientment intuitiva on realitzar diagrames de classes en UML. Ja veure’m com va. El que tinc clar és que m’esperen dies de picar tecles i esprémer el cervell… Ah, sabeu quin és el títol?

Desenvolupament d’una eina de traducció UML a esquelet d’aplicació web (per a CakePHP).

No estava gaire inspirat aquell dia, no.

Fa uns dies que em vaig adonar -per sort abans que l’empresa rebés cap queixa- que una sèrie de banners flash (SWF) que surten a una sèrie de portals de la feina no enllaçaven amb els webs corresponents que publicitaven; simplement s’ignorava el ‘clic’. Això passava amb tots els navegadors, excepte l’ie 6.0 que continuava funcionant normalment, fet que em va fer pensar que deuria ser un tema de seguretat.

Fins avui no he pogut mirar de resoldre el problema. El cas és que els banners estan continguts en un domini diferent als dels portals i he pensat que el problema podia venir d’aquí. No tinc gaire idea de flash però una simple prova utilitzant un dels banners problemàtics però dins del domini del portal ha confirmat les meves sospites: el banner enllaçava correctament.

Una mica de google i he trobat la raó del problema i la solució.

Entrades anteriors »