Forum: Rails-ES Urls con menú variable

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Aebf4e72990aa0bbfcb782d65bf5200f?d=identicon&s=25 Miguel Angel Calleja Lázaro (Guest)
on 2007-05-09 17:57
(Received via mailing list)
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
0e6c0ba9935b52866fd5c54dd886cf2e?d=identicon&s=25 Jaime Iniesta (Guest)
on 2007-05-09 23:10
(Received via mailing list)
El día 9/05/07, Miguel Angel Calleja Lázaro <mangelcl@yahoo.es>
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"
Aebf4e72990aa0bbfcb782d65bf5200f?d=identicon&s=25 Miguel Angel Calleja Lázaro (Guest)
on 2007-05-10 11:20
(Received via mailing list)
Jaime Iniesta
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...
voy a probarlo a ver si me funciona a la primera y lo configuro bien,
mucha gracias
Aebf4e72990aa0bbfcb782d65bf5200f?d=identicon&s=25 Miguel Angel Calleja Lázaro (Guest)
on 2007-05-10 12:55
(Received via mailing list)
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...
[2]
http://bat.id.au/2007/3/27/search-engine-friendly-...
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (Guest)
on 2007-05-10 13:48
(Received via mailing list)
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.
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (Guest)
on 2007-05-10 14:07
(Received via mailing list)
On May 10, 2007, at 1:46 PM, Xavier Noria 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
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (Guest)
on 2007-05-10 14:11
(Received via mailing list)
On May 10, 2007, at 2:06 PM, Xavier Noria 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
Aebf4e72990aa0bbfcb782d65bf5200f?d=identicon&s=25 Miguel Angel Calleja Lázaro (Guest)
on 2007-05-10 14:13
(Received via mailing list)
Xavier Noria
escribió:
>>>
>>>>  end
>>>>
>>
>>
>_______________________________________________
>Ror-es mailing list
>Ror-es@lists.simplelogica.net
>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
Aebf4e72990aa0bbfcb782d65bf5200f?d=identicon&s=25 Miguel Angel Calleja Lázaro (Guest)
on 2007-05-10 14:39
(Received via mailing list)
Miguel Angel Calleja Lázaro
escribió:
>>>
>>>>>Estoy usando permalink_fu para crear urls, siguiendo este ejemplo
>>>>>
>>>>>
>>>>
>>>
>>
>>
>           result.gsub!(/[ñ]/, 'n')
>Ror-es mailing list
>Ror-es@lists.simplelogica.net
>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...
Aebf4e72990aa0bbfcb782d65bf5200f?d=identicon&s=25 Miguel Angel Calleja Lázaro (Guest)
on 2007-05-10 16:56
(Received via mailing list)
Miguel Angel Calleja Lázaro
escribió:
>Me crea la siguiente url:
>@pagina = Pagina.find(params[:id])
>Ror-es mailing list
>Ror-es@lists.simplelogica.net
>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%>
                <li><%=link_to m.nom_pag, {:controller => 'grupo',
:action => 'ver', :permalink=> m.permalink}%></li>
          <%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
This topic is locked and can not be replied to.