Skip to content
Fitorec edited this page Jan 23, 2012 · 7 revisions

#Slug Behavior. ###Enables a model object to sluggable behavior.

Instrucciones de uso.

##1.- Descargar el paquete.

Usted puede descargar la versión mas reciente de esta traduccion desde la siguientes URLs:

Download as .tar.gz Download as .zip

##2.- Descargar el paquete.

Debera agregar el archivo slug.php en su carpeta app/models/behaviors/ en caso de usar cakephp inferior a la versión 2 o en app/Model/Behavior/ en caso de usar versión 2 o superior.

Descripción de argumentos:

slug_src(Slug fuente):

Este es el campo en la BD que que describa un registro en especifico(debera ser un campo uníco en la tabla) y la cual se usara posteriormente para generar el slug_dst que posteriormente es empleado para construir una URL.

Por defecto toma el campo que hayamos definido en su Modelo como displayField, 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'));

El campo que tomara sera titulo (por encima de nombre).

slug_dst:

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" .

max_len:

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"

wd_separator:

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"

Ejemplo de configuración:

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,
		`titulo` 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 ;

##Definiendo el slug_dst:

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));
}

Esto nos define a nuestro slug_src con el campo nombre ya que definimos el displayField.

Cabe mencionar que si definimos el displayField y a la vez configuramos el parametro slug_src en el arreglo de argumentos de nuestro comportamiento slug, la opción que tomara sera esta ultima, ya que lo estaremos estableciendo de forma explicita, veamos el ejemplo:

<?php
class Articulo extends AppModel{
	var $name = 'Articulo';
	
	var $displayField = 'nombre';
	var $actsAs = array('Slug'=>array('slug_src' => 'titulo'));

El código anterior hace que el define el slug_src el cual sufrira una trasformación slug y sera almacenado en el campo slug_dst para que posteriormente podamos generar ls URL amigables que nos permitan acceder a algun registro en especifico.

##Uso en el Controlador

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?.