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.
Page 1 of 1
Duda Con Urls Dinámicas Para Directorio
#2
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:
Saludos
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/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#3
Posted 11 November 2012 - 02:25 PM
robregonm, 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:
Saludos
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.
#4
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:
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.
'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.
#5
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:
o también algo como:
Generalmente utilizo la primera opción (por costumbre) pero sé que como desde la versión 1.1.10 se permite usar la segunda.
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/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
Share this topic:
Page 1 of 1

Help












