Yii Framework Forum: Duda Con Urls Dinámicas Para Directorio - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Duda Con Urls Dinámicas Para Directorio Rate Topic: -----

#1 User is offline   kitune 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 121
  • Joined: 27-February 11

Posted 08 November 2012 - 11:55 AM

Hola a todos, quiero hacer un directorio con Yii y me surgen algunas dudas en cuanto a la forma de construir la estructura.

Se trata de un sitio de bailes, con lo cual podríamos tener una búsqueda por tipo (academias,locales,tiendas, conciertos, congresos, fiestas, bailarines...),otra por estilo (salsa, tango, bachata, sevillanas...) y luego ya las de provincia y población. Pongo unos ejemplos:

dominio.com/academias -> muestra listado de academias en españa
dominio.com/academias/salsa -> muestra listado de academias de salsa en españa
dominio.com/academias/valencia -> muestra academias en valencia
dominio.com/locales/salsa/valencia/sagunto -> muestra locales de salsa en sagunto

La duda que tengo es como montar esa estructura. Los tipos no son muchos y pueden estar cada uno en una tabla diferente, con lo que tendrían un controlador propio para cada uno. El problema me viene con las combinaciones. Por ejemplo si tengo una tabla de academias y un controlador con el mismo nombre:

dominio.com/academias/ -> muestra listado de academias llamando a la función index por defecto.
dominio.com/academias/salsa/ -> ¿Como hago para hacer esto? no habrá ninguna función que se llame salsa. Con lo cual tendría que poner en el urlManager una regla del tipo dominio.com/academias/<estilo:[a-zA-Z0-9-]+> y que redireccionara a la función academias/estilo por ejemplo.

Pero hacer eso por cada controlador y por cada combinación...es una locura.

No sé si me he explicado bien, aclaro lo que haga falta.

Gracias, un saludo.
0

#2 User is offline   robregonm 

  • Expert Yii Developer
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 594
  • Joined: 30-July 09
  • Location:Colombia

Posted 09 November 2012 - 04:11 PM

No sé si me quedó claro, pero si entendí bien, yo haría algo así en el urlManager:
array(
  '<controller:(academias|locales|otro)>/<estilo:\w+>' => '<controller>/filtrar', //Redirige a la acción "filtrar" pasando el valor que hay en GET['estilo']
  '<controller:(academias|locales|otro)>' => '<controller>/index', // Si no, pasa al index
)



Saludos
Ricardo Obregón

YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx 1.7, MySQL(MariaDB & PerconaDB), PostgreSQL 9, Yii 2, CanJS
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   kitune 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 121
  • Joined: 27-February 11

Posted 11 November 2012 - 02:25 PM

View Postrobregonm, on 09 November 2012 - 04:11 PM, said:

No sé si me quedó claro, pero si entendí bien, yo haría algo así en el urlManager:
array(
  '<controller:(academias|locales|otro)>/<estilo:\w+>' => '<controller>/filtrar', //Redirige a la acción "filtrar" pasando el valor que hay en GET['estilo']
  '<controller:(academias|locales|otro)>' => '<controller>/index', // Si no, pasa al index
)



Saludos


El problema es que también se puede dar el caso que sea dominio.com/academias/valencia, con lo que "valencia" no sería un estilo y sin embargo entraría en la primera regla que propones.
0

#4 User is offline   kitune 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 121
  • Joined: 27-February 11

Posted 11 November 2012 - 05:35 PM

De momento he puesto una regla en el urlmanager para que una url admita 4 variables opcionales y que la primera sea academias, locales y tiendas:

'urlManager'=>array(
			'urlFormat'=>'path',
			'rules'=>array(
				'buscador/<var1:academias|locales|tiendas>?(/<var2:[a-zA-Z0-9-]+>)?(/<var3:[a-zA-Z0-9-]+>)?(/<var4:[a-zA-Z0-9-]+>)?'=>'buscador/index',			
				'<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
			),
		),


Luego en el controlador buscador/index recojo las 4 variables y voy buscando una por una en la bbdd para ver si se trata de una categoría, subcat, provincia o población.
0

#5 User is offline   robregonm 

  • Expert Yii Developer
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 594
  • Joined: 30-July 09
  • Location:Colombia

Posted 13 November 2012 - 11:35 AM

Si necesita tal vez hacer alguna validación que sea demasiado compleja para agregarla como regla, recuerde que también puede agregarse una regla en forma de clase o en su defecto extender la funcionalidad CUrlManager...
y podría quedar algo como esto:
'urlManager'=>array(
   'class'=>'application.components.MiUrlManager',
  'rules'=>array(...),
)


o también algo como:
'urlManager'=>array(
  'rules'=>array(
    array(
      'class'=>'application.components.MiRutaPersonalizada'
    )
  )
)



Generalmente utilizo la primera opción (por costumbre) pero sé que como desde la versión 1.1.10 se permite usar la segunda.
Ricardo Obregón

YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx 1.7, MySQL(MariaDB & PerconaDB), PostgreSQL 9, Yii 2, CanJS
Follow me: @robregonm & @obregonco & @1ServerCo.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users