-
Notifications
You must be signed in to change notification settings - Fork 0
Home
#Slug Behavior.
###Enables a model object to sluggable behavior.
Por defecto toma el campo que hayamos definido como displayField, este debera ser un campo uníco en la tabla, el cual sufrira la trasformación slug para ser almacenado como slug_dst
.
<?php
var $displayField = 'titulo';
#esto nos genera
Articulo.titulo = "Este es un articulo sobre el comportamiento Slug"
Articulo.slug_dst = "Este-es-un-articulo-sobre-el-comportamiento-Slug"
#Otra forma de hacerlo es de la siguiente manera
var $actsAs = array('Slug'=>array('slug_src' => 'titulo'));
Cabe mencionar que si definimos el displayField y por otra parte en la configuramos slug_src la opción que tomara sera esta ultima, veamos un ejemplo.
<?php
var $displayField = 'nombre';
var $actsAs = array('Slug'=>array('slug_src' => 'titulo'));
El campo que tomara sera titulo
(por encima de nombre
) ya que de esta forma estaremos diciendo explicitamente que el slug_src
debera ser el campo titulo
.
Este campo tambien debe ser unico en la tabla y sera el resultado de la trasformación slug sobre slug_dst
que sera almacenado en la base de datos automaticamente.
<?php
var $actsAs = array('Slug'=>array('slug_src' => 'seo_url'));
#esto nos genera
Articulo.slug_dst = "Este es un articulo sobre el comportamiento Slug"
Articulo.seo_url = "este-es-un-articulo-sobre-el-comportamiento-slug" .
Longitud máxima que puede llegar a tomar slug_dst.
<?php
var $actsAs = array('Slug'=>array('max_len'=>30));
#esto nos genera
Articulo.slug_dst = "este-es-un-articulo-sobre-el-c"
Separador de palabras wd_separator
(words separator) es el caracter separador de palabras, por defecto(-).
<?php
var $actsAs = array('Slug'=>array('wd_separator'=>'_'));
#esto nos genera
Articulo.slug_dst = "este_es_un_articulo_sobre_el_comportamiento_slug" .
####extension_active:
Por defecto false, si activamos este campo agrega la extensión '.html', reduciendo 5 carácteres el campo max_len (la longitud de '.html').
<?php
var $actsAs = array('Slug'=>array('extension_active'=>true));
#esto nos genera
Articulo.slug_dst = "este-es-un-articulo-sobre-el-comportamiento-slug.html"
Imaginemos que queremos hacer que nuestros articulos que nos gustaria que tuviera urls amigable es decir que sobre el titulo podieramos es decir:
#visualizando un articulo
http://mi-sitio/articulos/ver/algun-articulo.html
#Editando un articulo
http://mi-sitio/articulos/editar/algun-articulo.html
#Borrando un articulo
http://mi-sitio/articulos/borrar/algun-articulo.html
Entonces definimos la siguiente tabla:
CREATE TABLE IF NOT EXISTS `articulos` (
`id` INT( 5 ) PRIMARY KEY NOT NULL UNIQUE AUTO_INCREMENT,
`nombre` VARCHAR( 80 ) NOT NULL UNIQUE,
`slug_dst` VARCHAR( 50 ) NOT NULL UNIQUE,
`contenido` VARCHAR( 150 ) DEFAULT NULL,
`created` DATETIME NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
En nuestro modelo de Articulo definimos el comportamiento slug de la siguiente manera:
<?php
class Articulo extends AppModel{
var $name = 'Articulo';
#campo a mostrar
var $displayField = 'nombre';
#Definición del comportamiento slug
var $actsAs = array( 'slug'=>array('extension_active'=>true));
}
El código anterior hace que el campo nombre(definido como displayField
) sera trasformado con la forma slug
y sera almacenado en el campo slug_dst
para que de esta forma podamos realizar las consultas.
##Uso en el Controller
Finalmente en nuestro controlador podemos llamar a las funciones slug:
<?php
#leyendo un registro a partir del slug
$this->Articulo->readBySlug($slug);
#obteniendo el id del articulo a partir del slug
$id = $this->Articulo->primaryKeyBySlug(($slug));
Para las demas funciones el comportamiento slug realiza las operaciones necesarias por ejemplo si deseamos guardar un registro basta con hacer:
<?php
#agregando
$this->Articulo->save($this->data);
Donde en $this->data
debera existir el campo nombre y automaticamente el comportamiento nos va a generar el slug_dst
slug destino al tiempo que realiza las validaciones necesarias, ¿facil no?.