Urls con menú variable


#1

Vereis tengo una dudaza mayúscula,

Estoy haciendo un backend de administración donde el cliente puede crear
nuevas secciones que las grabo como páginas.

Mirando el árbol tendría una cosa así por ejemplo:

  • Portada
  • El Grupo
    • seccion1
    • seccion2
    • seccion3
  • Actividades
    • actividades1
    • actividades2
    • actividades3
  • Contacto

A la hora de mostrar el menú en el frontend me encuentro con un dilema
sobre la url que debería tener. Me explico, si fueran secciones fijas no
habría ningún problema, agruparía controladores vía miweb::grupo,
miweb::actividades, actividades::actividades1,
actividades::actividades2, etc:
miweb
grupo
seccion1 (index, list, edit, …)
seccion2 (index, list, edit, …)
actividades
actividades1 (index, list, edit, …)
actividades2 (index, list, edit, …)

y tendría algo como:

miweb/actividades/actividades1/list
miweb/actividades/actividades2/edit/1

Imagino que si quisiera esta url, tendría que hacer estas agrupaciones,
creo… no se

Pero la cosa es que no son secciones fijas, son variables, cuando saco
el menú recorro las páginas que pertenecen a su página padre, es decir,
me quedaría algo
así:- Portada

  • El Grupo (aquí recorro las páginas pertenecientes a esta sección, voy
    a poner el id página como enlace mejor que el título para que se me
    entienda)
    • 1 (seccion1)
    • 2 (seccion2)
    • 3 (seccion3)
  • Actividades (aquí lo mismo)
    • 4
    • 5
    • 6
  • Contacto

Si quiero ir a seccion1 de “El Grupo”, sólo se me ocurre hacer ésto:
miweb/grupo/ver/1 , en mi controlador grupo tendría un método ver donde
me sacaría la información referente a esa página que me llega como
parámetro y la verdad es que queda bastante fea la url con respecto a
como me gustaría a mi (miweb/grupo/seccion1/list).

Asi que no se, voy aprendiendo rápidamente pero todavía mis
conocimientos de ruby son limitados, de la forma como la tengo que son
páginas variables, sólo se me ocurre esa forma.
Después de toda la parrafada si alguien puede iluminarme se lo
agradecería muchísimo, espero haberme explicado bien. muchas gracias de
antemano


#2

El día 9/05/07, Miguel Angel Calleja Lázaro removed_email_address@domain.invalid
escribió:

- seccion1

A la hora de mostrar el menú en el frontend me encuentro con un dilema
actividades2 (index, list, edit, …)

y tendría algo como:

miweb/actividades/actividades1/list
miweb/actividades/actividades2/edit/1

Imagino que si quisiera esta url, tendría que hacer estas agrupaciones,
creo… no se

Hola Miguel Ángel, creo que te estás haciendo un lío pensando en un
controlador/scaffold distinto para cada una de las secciones, cuando en
realidad es todo lo mismo: páginas. Una página tendrá un título, una
serie
de párrafos, y se relacionará con otras páginas en una estructura
jerárquica
tipo árbol… O sea, que sólo necesitas un controlador para administrar
las
páginas y poder crear nuevas, editarlas y borrarlas, asociarlas… te
quedaría algo como

miweb/paginas/list
miweb/paginas/edit/1

etc…

Eso para el backend de administración… Para la parte pública, de cara
sobre todo a buscadores, te podrá interesar crearte rutas que incluyan
las
palabras clave, por ejemplo los titulos de las páginas, en lugar de algo
como “miweb/paginas/show/1”… Googlea un poco por “rails seo”


#3

Jaime I.
escribió:

- Portada
- Contacto
            seccion1 (index, list, edit, ...)
Imagino que si quisiera esta url, tendría que hacer estas

editarlas y borrarlas, asociarlas… te quedaría algo como
“rails seo”
http://lists.simplelogica.net/mailman/listinfo/ror-es

Aha, pues tienes razón que me estaba liando, googleando me he encontrado
con este link:
http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu
voy a probarlo a ver si me funciona a la primera y lo configuro bien,
mucha gracias


#4

On May 10, 2007, at 12:54 PM, Miguel Angel Calleja Lázaro wrote:

|

The PermalinkFu plugin will convert the string so it is suitable to be
placed in the url, it uses Iconv to do a unicode translation to ascii.
This means strings such as |café| get translated to |cafe
|

|Si grabo la página como “café”, el permalink lo graba como “caf”

No he probado el plugin pero nos hemos encontrado con que la
transilteracion con iconv varia entre maquinas (sin llegar a
investigar por que la tabla de transliteracion es distinta, nos ha
pasado entre Mac y Linux, quiza iconv no fuera el mismo, no miramos).
Si fuera el caso sucede que TRANSLIT no encuentra mapping y aplica
IGNORE.


#5

Estoy usando permalink_fu para crear urls, siguiendo este ejemplo [1],
tengo un problema cuando se crea el permalink en la base de datos, las
cadenas que contengan acentos no las coje. Según [2], si se pone:

|
def to_param
“#{id}-#{PermalinkFu.escape(name)}”
end
|

The PermalinkFu plugin will convert the string so it is suitable to be
placed in the url, it uses Iconv to do a unicode translation to ascii.
This means strings such as |café| get translated to |cafe
|

|Si grabo la página como “café”, el permalink lo graba como “caf”

|

Alguien lo ha probado?

[1] http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu
[2]
http://bat.id.au/2007/3/27/search-engine-friendly-urls-with-ruby-on-rails


#6

On May 10, 2007, at 2:06 PM, Xavier N. wrote:

This means strings such as |café| get translated to |cafe

Si lo hace entonces descartaria que estuviera ahi el tema.

Y mas, recuerdo que la solucion basada en normalizacion unicode
tampoco funcionaba igual en todas partes. Por lo que en realidad se
trata de ver como tira el plugin a ASCII y ver si funciona en local.
Nosotros al final hemos terminado usando un mapping hecho a mano a
base de gsubs.

– fxn


#7

On May 10, 2007, at 1:46 PM, Xavier N. wrote:

def to_param

|Si grabo la página como “café”, el permalink lo graba como “caf”

No he probado el plugin pero nos hemos encontrado con que la
transilteracion con iconv varia entre maquinas (sin llegar a
investigar por que la tabla de transliteracion es distinta, nos ha
pasado entre Mac y Linux, quiza iconv no fuera el mismo, no miramos).
Si fuera el caso sucede que TRANSLIT no encuentra mapping y aplica
IGNORE.

Vaya, la cosa seria grabar en UTF8 (trabajas en UTF8?) esto

$KCODE = ‘u’
require ‘iconv’

puts Iconv.conv(“ascii//IGNORE//TRANSLIT”, “UTF8”, “áéíóú”)

y ver si echa

'a’e’i’o’u

Si lo hace entonces descartaria que estuviera ahi el tema.

– fxn


#8

Xavier N.
escribió:

end


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Pue si, lo tengo en UTF8, no he podido probar lo que me has dicho de
iconv, al final he visto un ejemplo basado en gsubs y me ha funcionado:
def to_param
result = self.nom_pag.downcase
result.gsub!(/[áàäâå]/, ‘a’)
result.gsub!(/[éèëê]/, ‘e’)
result.gsub!(/[íìïî]/, ‘i’)
result.gsub!(/[óòöô]/, ‘o’)
result.gsub!(/[úùüû]/, ‘u’)
result.gsub!(/[ýÿ]/, ‘y’)
result.gsub!(/[ñ]/, ‘n’)
result.gsub!(/[ç]/, ‘c’)
result.gsub!(/[’"]/, ‘’)
result.gsub!(/[^a-zA-Z0-9-]/, ’ '); #result.gsub!(/W/, ’ ')
result.gsub!(/ +/, '’)
result.gsub!(/(
)$/, ‘’)
result.gsub!(/^()/, ‘’)
self.permalink = result
"#{id}
#{self.permalink}"
end


#9

Miguel Angel Calleja Lázaro
escribió:

Estoy usando permalink_fu para crear urls, siguiendo este ejemplo

      result.gsub!(/[ñ]/, 'n')

Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Voliendo a mi propósito de crear urls bonitas con permalink_fu:
Siguiendo el ejemplo de [1]

in your route file

map.connect ‘grupo/:permalink’, :controller => ‘grupo’, :action => ‘ver’

in your views when linking

link_to menu.nombre, {:controller => ‘grupo’, :action => ‘ver’,
:permalink => menu.permalink}

then in your controller you can use

@pagina = Pagina.find_by_permalink(params[:permalink])

Me crea la siguiente url:
grupo/ver?permalink=filosofia_y_objetivos

Funciona, pero obviamente no debería ser así… no se qué me falta

Si hago ésto:

in your route file

map.connect ‘grupo/:permalink’, :controller => ‘grupo’, :action => ‘ver’

in your views when linking

link_to pag.nombre, {:controller => ‘grupo’, :action => ‘ver’, :id =>
pag}

then in your controller you can use

@pagina = Pagina.find(params[:id])

Me crea esta url: grupo/ver/13_filosofia_y_objetivos, funciona
también pero no se si está aplicando correctamente el plugin permalink_fu,
porque el map.connect si lo quito sigue igual… y me mosquea porque en
realidad debería salir
grupo/13_filosofia_y_objetivos, no?

No se qué estoy haciendo mal, el map no me hace anda, algún consejo?

[1] http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu


#10

Miguel Angel Calleja Lázaro
escribió:

Me crea la siguiente url:
@pagina = Pagina.find(params[:id])
Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Me voy respondiendo a mi mismo, voy progresando:
En el route:
map.connect ‘es/grupo/:permalink’, :controller => ‘es/grupo’, :action =>
‘ver’ (tengo que ponerlo antes, porque si no me dice que el permalink no
existe el método, así se ejecuta éste primero)
map.connect ‘:controller/:action/:id’

En mi vista:
<%for m in @menu_grupo%>

  • <%=link_to m.nom_pag, {:controller => ‘grupo’,
    :action => ‘ver’, :permalink=> m.permalink}%>

  • <%end%>
    En mi controlador:
    def ver
    @pagina = Pagina.find_by_permalink(params[:permalink])
    end

    Y ahora si que me sale como quiero, ej.
    http://localhost:3003/es/grupo/filosofia_y_objetivos

    Perfecto, muchas gracias a todos, jaime y xavier