Forum: Rails-ES Seo urls: permalink_fu o friendly_id

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.
Miguel angel C. (Guest)
on 2008-10-14 14:06
(Received via mailing list)
Hola, para el nuevo proyecto que tengo que hacer quiero meter urls
amigables. En otros proyectos he usado permalink_fu y me ha funcionado
correctamente, pero googleando me he encontrado con friendly_id [1],
alguno lo ha probado? qué me recomendais, permalink_fu, friendly_id o
algún otro?

Ahora estoy con rails 2.0, imagino que no habría ningún problema en usar
algún plugin de éstos, es que permalink_fu lo usaba con 1.1.6, imagino
que podré seguir usándolo ahora también.

Gracias, y un saludo

[1] http://agilewebdevelopment.com/plugins/friendly_id
Miguel angel C. (Guest)
on 2008-10-14 14:50
(Received via mailing list)
Miguel Angel Calleja L.
escribió:> Gracias, y un saludo
>
> [1] http://agilewebdevelopment.com/plugins/friendly_id
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
Me ha entrado una duda sobre la construcción de mi url, si tengo:
proyectos/1/pages/1/items/1

Con algún plugin de éstos podría pasar a:
proyectos/kk/pages/plantillas/items/admin_be_001

Mi duda es si puedo convertir esta última url en algo como
así:proyectos/kk/plantillas/admin_be_001

Había pensado en crear pages como controdalores individuales, estaría
bien si pages no variara pero pueden aumentarse con el tiempo. Se puede
hacer algo? Gracias
Ricardo M. (Guest)
on 2008-10-14 14:56
(Received via mailing list)
2008/10/14 Miguel Angel Calleja L. <removed_email_address@domain.invalid>:
>> Gracias, y un saludo
>
> Con algún plugin de éstos podría pasar a:
> proyectos/kk/pages/plantillas/items/admin_be_001
>
> Mi duda es si puedo convertir esta última url en algo como así:
> proyectos/kk/plantillas/admin_be_001
>
> Había pensado en crear pages como controdalores individuales, estaría
> bien si pages no variara pero pueden aumentarse con el tiempo. Se puede
> hacer algo? Gracias

Yo use Resource Hacks [1] para esto en un proyecto. Funcionó, aunque
tuve algunos líos con los url helpers cuando estaba activo.

[1]
http://archive.jvoorhis.com/articles/2006/08/01/an...

--
--
¡Falta Uno! - http://www.falta-uno.com.ar/
Ricardo M.
Miguel angel C. (Guest)
on 2008-10-14 15:23
(Received via mailing list)
Ricardo M.
escribió:>>> algún plugin de éstos, es que permalink_fu lo usaba con 1.1.6, 
imagino
>>>
>> hacer algo? Gracias
>>
>
> Yo use Resource Hacks [1] para esto en un proyecto. Funcionó, aunque
> tuve algunos líos con los url helpers cuando estaba activo.
>
> [1] http://archive.jvoorhis.com/articles/2006/08/01/an...
>
>
Aha, podría hacer algo como
así?1)
map.resources :proyectos do |proy|
        proy.resources :pages, :member_path =>
'/proyectos/:nombre_proyecto/:permalink' do |page|
             page.resources :items, :member_path
=>'/proyectos/:nombre_proyecto/:permalink/:id'
        end
  end

Las rutas que podría generar serían:
/proyectos/kk/plantillas -> todo el CRUD lo hace en el controlador pages

/proyectos/kk/plantillas/admin_be_001 -> iría al controlador items

2)
Si no, se me ocurre tal como hacía con el permalink, crear rutas, lo que
pasa es que pueden ser muchas y mi routes podría ser inmenso.
map.connect 'proyectos/:nombre_proyecto/:permalink', :controller =>
'pages', :action => 'index'
map.connect 'proyectos/:nombre_proyecto/:permalink/:id', :controller =>
'items', :action => 'show'

Lo primero estaría correcto? Muchas gracias
Jaime I. (Guest)
on 2008-10-14 15:32
(Received via mailing list)
2008/10/14 Miguel Angel Calleja L. <removed_email_address@domain.invalid>

> Hola, para el nuevo proyecto que tengo que hacer quiero meter urls
> amigables. En otros proyectos he usado permalink_fu y me ha funcionado
> correctamente, pero googleando me he encontrado con friendly_id [1],
> alguno lo ha probado? qué me recomendais, permalink_fu, friendly_id o
> algún otro?


Yo estoy contento con sluggable_finder:

http://wiki.rubyonrails.org/rails/pages/sluggable_finder
Francesc E. (Guest)
on 2008-10-14 15:52
(Received via mailing list)
On Tue, Oct 14, 2008 at 1:31 PM, Jaime I. <removed_email_address@domain.invalid>
wrote:

> Yo estoy contento con sluggable_finder:
>
> http://wiki.rubyonrails.org/rails/pages/sluggable_finder

No tiene ni un test [1].

-1

[1]
http://code.estadobeta.com/plugins/sluggable_finde...
Ceritium (Guest)
on 2008-10-14 17:10
(Received via mailing list)
Es cierto no tiene ni un test, pero me gusta como trabaja.

De todas formas para lo que Miguel Angel necesita es algo más de
configurar
bien el routes.rb que otra cosa.

Para lo de las paginas no te he entendido bien Miguel Angel, dices de
crear
un controlador por cada página?

Yo tengo un controlador para todas las paginas, y haría algo como

/pages/la-pagina
:controller => "pages", :action => "show", :id => "la-pagina"


On Tue, Oct 14, 2008 at 1:51 PM, Francesc E. <
Miguel angel C. (Guest)
on 2008-10-14 17:51
(Received via mailing list)
Ceritium
escribió:> /pages/la-pagina
>     >
>     removed_email_address@domain.invalid <mailto:removed_email_address@domain.invalid>
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>

Hola de nuevo, me explico, en mi routes tendría ésto:

map.resources :proyectos do |proy|
        proy.resources :pages do |page|
             page.resources :items
        end
end

Pero lo que no quiero es que salgan rutas
así:
proyectos/:id/pages/:id/items/id

A parte de usar un plugin para seo si que tengo que configurar también las
rutas para que quede
así:
proyectos/kk/plantillas/admin_be_001 por ejemplo, quitar el pages y el
items de la ruta.


Entonces, gracias al consejo de Ricardo, usando Resource Hacks, no se si
podría hacer algo
así:
map.resources :proyectos do |proy|
        proy.resources :pages, :member_path =>
'/proyectos/:nombre_proyecto/:permalink' do |page|
             page.resources :items, :member_path
=>'/proyectos/:nombre_proyecto/:permalink/:id'
        end
  end

Las rutas que podría generar serían:
/proyectos/kk/plantillas -> todo el CRUD lo hace en el controlador pages

/proyectos/kk/plantillas/admin_be_001 -> iría al controlador items

No se si sería correcto...

O bien, como he hecho alguna vez en otros proyectos y con permalink_fu
tratar las rutas, lo que pasa es que si hago ésto me veo un routes enorme.

map.connect 'proyectos/:nombre_proyecto/:permalink', :controller =>
'pages', :action => 'index'
map.connect 'proyectos/:nombre_proyecto/:permalink/:id', :controller =>
'items', :action => 'show'


Si alguien ha hecho algo parecido o cómo soleis hacerlo, agredecería mucho
vuestra ayuda. Gracias
Adrián Mugnolo (Guest)
on 2008-10-14 18:49
(Received via mailing list)
On Oct 14, 2008, at 10:38 AM, Miguel Angel Calleja L. wrote:

> Hola de nuevo, me explico, en mi routes tendría ésto:
>
> map.resources :proyectos do |proy|
>        proy.resources :pages do |page|
>             page.resources :items
>        end
> end

El bueno de Jamis B. tiene una máxima [1] citada en Rails Way y por
todas partes que dice: casi nunca está bien anidar recursos más de un
nivel.

La idea es que la relación que representa la ruta REST (por ejemplo,
para un has_many) en realidad existe entre padre-hijo y no entre
abuelo-padre-hijo (no hay información de los nietos en los abuelos, si
no a través de los padres).

Quedaría algo
así:
map.resources :projects, :as => "proyectos" do |project|
   project.resources :pages, :as => "paginas"
end
map.resources :pages, :as => "paginas" do |pages|
   pages.resources :items
end
map.resources :items

Saludos

1. http://weblog.jamisbuck.org/2007/2/5/nesting-resources
Adrián Mugnolo (Guest)
on 2008-10-14 19:12
(Received via mailing list)
On Oct 14, 2008, at 11:49 AM, Adrián Mugnolo wrote:

> La idea es que la relación que representa la ruta REST (por ejemplo,
> para un has_many) en realidad existe entre padre-hijo y no entre
> abuelo-padre-hijo (no hay información de los nietos en los abuelos, si
> no a través de los padres).

Fe de erratas: quise decir precisamente lo contrario. :-)

No hay información de los abuelos en los nietos si no a través de sus
padres.
Miguel angel C. (Guest)
on 2008-10-14 19:38
(Received via mailing list)
Adrián Mugnolo
escribió:>>
> Quedaría algo así:
>
> 1. http://weblog.jamisbuck.org/2007/2/5/nesting-resources
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
Aha, he leido, así las url serían más cortas pero perdería toda la
información que quiero mostrar en la url, el proyecto, la página y el
item, se que entre abuelo y nieto no hay relación, pero me interesa que
se muestre el proyecto para saber en dónde estoy mientras que si lo hago
de esa forma perdería ese dato y no pretendo éso, quiero mostrar toda la
información posible en la url

Quizás si hago un

map.resources :projects, :as => "proyectos" do |project|
   project.resources :pages, :as => "paginas"
end


map.with_options :path_prefix => '/proyectos/:proyecto' do |proy|

proy.resources :pages, :as => "paginas" do |pages|
   pages.resources :items
end

end

Haría lo mismo que en la anidación, al final y al cabo me interesa que
se muestre
así:
proyectos/kk/plantillas/admin_be_001 donde,

kk es el nombre del proyecto
plantillas es el nombre de la página
admin_be_001 es el nombre del item

en vez de:
proyectos/kk/pages/plantillas
pages/plantillas/items/admin_be_001
items/admin_be_001

o

proyectos/kk/pages/plantillas/items/admin_be_001

Hacerlo de una u otra forma me daría igual siempre y cuando mostrase los
3 datos en la url para tener constancia de dónde se está, pero en vez de
ser tan larga recortarla como quiero, me gustaría saber si puedo
convertir esta ruta:

proyectos/kk/pages/plantillas/items/admin_be_001
en

proyectos/kk/plantillas/admin_be_001

Imagino que podría hacer algo como:
map.connect '/proyectos/:proyecto/:pagina', :controller=>'paginas',
:action=>'index'
map.connect '/proyectos/:proyecto/:pagina/:item', :controller=>'items',
:action=>'show'

Bueno, no se si estoy haciendo el burro o qué... se puede, hay alguna
manera sencilla?
Adrián Mugnolo (Guest)
on 2008-10-14 21:04
(Received via mailing list)
On Oct 14, 2008, at 12:38 PM, Miguel Angel Calleja L. wrote:

> Aha, he leido, así las url serían más cortas pero perdería toda la
> información que quiero mostrar en la url, el proyecto, la página y el
> item, se que entre abuelo y nieto no hay relación, pero me interesa
> que
> se muestre el proyecto para saber en dónde estoy mientras que si lo
> hago
> de esa forma perdería ese dato y no pretendo éso, quiero mostrar
> toda la
> información posible en la url

Si lo que dice la url es muy importante para tu aplicación, está
perfecto así.  Sólo que para ser consistente tal vez deberías
asegurarte de que todos los niveles sean válidos:

/proyectos/123/paginas/456/items/789

@project = Project.find(params[:project_id]) # 123
@page = @project.pages.find(params[:page_id]) # 456
@item = @page.items.find(params[:id]) # 789

¡Amén! :-)

Hace poco vi un ejemplo parecido con ciudades:

/paises/argentina/provincias/rio-negro/ciudades/bariloche

En mi opinión, es más claro, flexible y hasta más relevante tener:

/paises
/paises/argentina
/paises/argentina/provincias
/paises/argentina/provincias/rio-negro
/provincias/rio-negro/ciudades
/provincias/rio-negro/ciudades/bariloche

De paso, también se puede tener:

/provincias (todas las provincias, no importa el país)
/ciudades (todas las ciudades, no importa el país ni la provincia)

Si es por el SEO, cuantos más términos pongas en la url, menos
"pesará" cada uno.

En parte, lo "amigable" de las urls también pasa porque sean
relativamente cortas, de un largo manejable por los usuarios, etc.
Según Jakob Nielsen las urls desde siempre fueron parte de la IU de la
web [1].  ¿Quién no pasó alguna vez por la odisea de pegar una url en
un email, que se corte, que después no se pueda hacer clic, o que haya
que "pegarla", etc.?

1. http://www.useit.com/alertbox/990321.html
Xavier N. (Guest)
on 2008-10-14 23:24
(Received via mailing list)
Yo no uso plugins para esto, redefino #to_param y las rutas van solas
sin necesidad de tocar routes.rb. Anidadas, etc. Vaya que va solo.
Adrián Mugnolo (Guest)
on 2008-10-15 01:01
(Received via mailing list)
On Oct 14, 2008, at 4:24 PM, Xavier N. wrote:

> Yo no uso plugins para esto, redefino #to_param y las rutas van solas
> sin necesidad de tocar routes.rb. Anidadas, etc. Vaya que va solo.
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es

Xavier,

Eso funciona si puedes mantener el id numérico en el to_param.  En
algunos casos (por ejemplo, si no quieres que la competencia sepa
cuántos clientes registrados tienes en tu aplicación) conviene
directamente evitar el acceso por id numérico.  Friendly_id permite
eso sobrecargando el método find de acuerdo a una implementación de
to_param.

class Member < ActiveRecord::Base
   has_friendly_id :login
end

Member.find("xavier")
Member.find("123-xavier") # es "backwards-compatible"
Member.find(123) # idem

redirect_to @member # "/members/xavier"

Saludos
Sergio Gil Pérez de la Manga (Guest)
on 2008-10-15 01:28
(Received via mailing list)
2008/10/14 Xavier N. <removed_email_address@domain.invalid>:
> Yo no uso plugins para esto, redefino #to_param y las rutas van solas
> sin necesidad de tocar routes.rb. Anidadas, etc. Vaya que va solo.
> _______________________________________________

Yo estoy contigo Xavi, muchas veces parece que la posibilidad de usar
un plugin nos "atonta" un poco, es algo que resuelves con 4 líneas,
defines to_param, y cambias

find(params[:id])

por

find(:first, :conditions => { :loquesea => params[:id] }) || raise
RecordNotFound

(o algo parecido).

Además yo soy mucho de usar una técnica que creo que también te leí a
tí, definir un método target o scope con eso, así que eso, es sólo una
vez.

Otra cosa es que muchos recursos de nuestra aplicación quieran usar
URLs guays y nos queramos definir un par de métodos en /lib que nos
definan ese par de cosas, pero sinceramente, tardas menos en
implementarlo (son 5 líneas que escribes en 10 minutos) que en
estudiar qué plugin te convence más y en instalarlo.

Aunque para gustos, colores =;-)


--
Sergio Gil Pérez de la Manga
e-mail > removed_email_address@domain.invalid
blog > http://www.lacoctelera.com/porras
now > http://twitter.com/porras
Francesc E. (Guest)
on 2008-10-15 01:38
(Received via mailing list)
Que por cierto en Rails 2.2 tendremos algo como:

Model.find_by_something!(params[:id])

Que tirará un RecordNotFound en vez de mil.

On 14/10/2008, at 23:27, "Sergio Gil Pérez de la Manga"
<removed_email_address@domain.invalid
Guillermo (Guest)
on 2008-10-15 02:51
(Received via mailing list)
2008/10/14 Francesc E. <removed_email_address@domain.invalid>

>
> Que por cierto en Rails 2.2 tendremos algo como:
>
> Model.find_by_something!(params[:id])
>
> Que tirará un RecordNotFound en vez de mil.


Hasta ahora hacía esto.

Model.find_by_something(params[:id]) or raise ActiveRecord::NotFound

Como sigan metiendo tantas facilidades, algún día será tan fácil que
será
aburrido, y harás la aplicación en apenas 20 lineas.
Emili P. (Guest)
on 2008-10-15 11:37
(Received via mailing list)
Yo como comentan Xavi y Porras no me complico la vida con plugins, o
redefino #to_param o uso una libreria que me hice hace tiempo que
añade el método to_url a la clase String y así convierto los títulos
de los posts, articulos etc. en permalinks en plan rápido-guarro-
funcional y andando, me va de fábula.



> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Emili
Parreñowww.eparreno.com
www.abecedata.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrés G. (Guest)
on 2008-10-15 11:58
(Received via mailing list)
Hola cracks, espero que lo que voy a preguntar no lo considereis morro
ni
off-topic. Pero se está hablando de redefinir #to_param y en cinco
lineas
dar solucion al problema. Sería posible que alguien expusiese esta
solución
al completo. Asi yo y el resto de gente que leemos este hilo podremos
hacer
las url tan guays como vosotros. Esto que pido creo que es algo
razonable,
que no es algo que venga en uno de esos tuto de haz tu app en 15min. En
fin,
sobretodo gracias

El 15 de octubre de 2008 9:36, Emili Parreño 
<removed_email_address@domain.invalid>
escribió:
Emili P. (Guest)
on 2008-10-15 12:20
(Received via mailing list)
Aqui tienes varias opciones, como siempre Google nos abre las puertas
del maravilloso mundo del conocimiento :)

http://www.notsostupid.com/blog/2006/07/07/urls-on-rails/
http://www.seoonrails.com/to_param-for-better-looking-urls
http://www.jroller.com/obie/entry/seo_optimization...


El 15/10/2008, a las 9:58, Andrés gutiérrez escribió:

> Yo como comentan Xavi y Porras no me complico la vida con plugins, o
> www.eparreno.com
>
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Emili Parreño
www.eparreno.com
www.abecedata.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Francesc E. (Guest)
on 2008-10-15 12:21
(Received via mailing list)
A ver, el plugin friendly_id, aporta más funcionalidades de las que
aporta sobrescribir to_param, por ejemplo, si dos entradas tienen el
mismo título, les mete un identificador para diferenciarlas,
sobreescribe el método find, tiene compatibilidad hacia atras con los
otros sistemas que se hayan utilizado para garantizar que si se cambia
el esquema de la URL continuará funcionando.

En fin, que yo diria que son más que 5 lineas de código[1].

[1] http://github.com/norman/friendly_id/tree/master/l...
[1] http://github.com/norman/friendly_id/tree/master/lib/slug.rb
[1]
http://github.com/norman/friendly_id/tree/master/t...

2008/10/15 Andrés gutiérrez <removed_email_address@domain.invalid>:
Francesc E. (Guest)
on 2008-10-15 12:26
(Received via mailing list)
2008/10/15 Emili Parreño <removed_email_address@domain.invalid>:

> añade el método to_url a la clase String y así convierto los títulos
> de los posts, articulos etc. en permalinks en plan rápido-guarro-
> funcional y andando, me va de fábula.

Has testeado ese to_url con bastantes casos para verificar que
funciona correctamente?

Comentar que en Rails Edge ahora se dispone de "parameterize" que
ayudará a generar estas friendly url si necesidad de nuestros
experimentos con "to_url" ... ;)
Andrés G. (Guest)
on 2008-10-15 12:32
(Received via mailing list)
Aqui tienes varias opciones, como siempre Google nos abre las puertas
del
maravilloso mundo del conocimiento :)
http://www.notsostupid.com/blog/2006/07/07/urls-on-rails/
http://www.seoonrails.com/to_param-for-better-looking-urls
http://www.jroller.com/obie/entry/seo_optimization...

Gracias Emili :-)


El 15 de octubre de 2008 10:21, Francesc E. <
removed_email_address@domain.invalid> escribió:
Borja Martín (Guest)
on 2008-10-15 12:32
(Received via mailing list)
yo la solución rápida que utilizo cuando no importa que vaya el id en la
url es algo así(evidentemente se podría mejorar para hacer algo más
reutilizable):

class Activity < ActiveRecord::Base

  before_save :set_clean_title

  def to_param
    "#{self.id}-#{self.clean_title}"
  end

  private
  def set_clean_title
    converter = Iconv.new('ASCII//TRANSLIT', 'UTF-8')
    self.clean_title = converter.iconv(self.title).gsub(/ /,
'-').gsub(/[^a-z\-]/in, '').downcase
  end

end

La parte para limpiar la cadena está sacada de The Ruby Way

Salud!

Andrés gutiérrez escribió:
javier ramirez (Guest)
on 2008-10-15 13:08
(Received via mailing list)
> dar solucion al problema. Sería posible que alguien expusiese esta
> solución al completo. Asi yo y el resto de gente que leemos este hilo
> podremos hacer las url tan guays como vosotros.
Yo tengo, por ejemplo, este método definido en un modelo

def to_param
    unless id.blank? || title.blank?
      "#{id}-#{StrNormalizer.normalize_for_url(title)}"
    end
  end

normalize_for_url es un método que tengo que borra/cambia caracteres no
ascii por caracteres ascii para que vayan bien en una URL

El formato del "to_param" que quieras sacar es el que quieras, con la
única condición de que empiece por el ID. Rails cuando ejecuta un find
por id,  hace un .to_i implícito, y como en Ruby cuando haces un to_i de
una cadena que empieza por números, convierte hasta el primer carácter
no numérico, te va perfecto.

Es decir, para una url tal que

    /users/1-javier-ramirez-gomara

en la que el id es "1-javier-ramirez-gomara", cuando haces un

    User.find(params[:id])

realmente lo que busca es

    User.find(1)

saludos,

j

--
javier ramírez

..i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
..you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez
Andrés G. (Guest)
on 2008-10-15 13:11
(Received via mailing list)
def to_param
   unless id.blank? || title.blank?
     "#{id}-#{StrNormalizer.
>
> normalize_for_url(title)}"
>    end
>  end



Por alusiones :-) Gracias javier

El 15 de octubre de 2008 11:08, javier ramirez
<removed_email_address@domain.invalid>escribió:
Miguel angel C. (Guest)
on 2008-10-15 13:44
(Received via mailing list)
Adrián Mugnolo
escribió:>> toda la
> @page = @project.pages.find(params[:page_id]) # 456
> /paises
>
> 1. http://www.useit.com/alertbox/990321.html
> _______________________________________________
> Ror-es mailing list
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
Aha, quizás me estaba rompiendo demasiado la cabeza, la verdad es que el
Seo me es muy importante y si cuanto más corta sea la url me ayuda a
tener un buen posicionamiento en buscadores quizás debería hacerlo como
me dices:
/proyectos/kk/pages/plantillas
/pages/plantillas/items
/pages/plantillas/items/admin_be_001

Yo pretendía tenerlo todo en la url quitando el nombre del controlador,
pero si una url más corta es más SEO que una más larga y si la mayoría
lo hace así y no toca routes será que está bien hecho así entonces, con
controladores mostrándose. Yo más que nada lo preguntaba para tener así
varias opiniones sobre cómo lo hace la gente y hacer las cosas de manera
correcta y tener un buen SEO.

En algún proyecto he definido también el to_param en algún modelo, asi
que bueno, os doy las gracias por todas las respuestas que me habeis
dado, ya tengo cosas que investigar y ver qué me merece más la pena, si
plugin o definiendo to_params. Voy a ver las posibilidades que me habeis
servido y si tengo alguna duda escribo de nuevo :-). Muchas gracias a
todos
Xavier N. (Guest)
on 2008-10-15 14:33
(Received via mailing list)
2008/10/15 Andrés gutiérrez <removed_email_address@domain.invalid>:

> off-topic. Pero se está hablando de redefinir #to_param y en cinco lineas
> dar solucion al problema. Sería posible que alguien expusiese esta solución
> al completo. Asi yo y el resto de gente que leemos este hilo podremos hacer
> las url tan guays como vosotros. Esto que pido creo que es algo razonable,
> que no es algo que venga en uno de esos tuto de haz tu app en 15min. En fin,
> sobretodo gracias

Yep, por ejemplo

class Customer < AR::Base
  def to_param
    "#{id}-#{MyAppUtils.normalize_for_url(name)}"
  end
end

normalize_for_url es un metodo propio que normaliza la cadena para que
quede limpia en una URL:

  def self.normalize(str)
    return '' if str.nil?
    n = str.chars.downcase.strip.to_s
    n.gsub!(/[àáâãäåāă]/,    'a')
    n.gsub!(/æ/,            'ae')
    n.gsub!(/[ďđ]/,          'd')
    n.gsub!(/[çćčĉċ]/,       'c')
    n.gsub!(/[èéêëēęěĕė]/,   'e')
    n.gsub!(/Æ’/,             'f')
    n.gsub!(/[ĝğġģ]/,        'g')
    n.gsub!(/[ĥħ]/,          'h')
    n.gsub!(/[ììíîïīĩĭ]/,    'i')
    n.gsub!(/[įıijĵ]/,        'j')
    n.gsub!(/[ķĸ]/,          'k')
    n.gsub!(/[łľĺļŀ]/,       'l')
    n.gsub!(/[ñńňņʼnŋ]/,      'n')
    n.gsub!(/[òóôõöøōőŏŏ]/,  'o')
    n.gsub!(/Å“/,            'oe')
    n.gsub!(/Ä…/,             'q')
    n.gsub!(/[ŕřŗ]/,         'r')
    n.gsub!(/[śšşŝș]/,       's')
    n.gsub!(/[ťţŧț]/,        't')
    n.gsub!(/[ùúûüūůűŭũų]/,  'u')
    n.gsub!(/ŵ/,             'w')
    n.gsub!(/[ýÿŷ]/,         'y')
    n.gsub!(/[žżź]/,         'z')
    n.gsub!(/\s+/,           ' ')
    n.delete!('^ a-z0-9_/\\-.')
    n
  end

  def self.normalize_for_url(str)
    # normalize and convert whitespace, slashes, and dots to hyphens
    normalize(str).tr('^a-z0-9_', '-')
  end
Andrés G. (Guest)
on 2008-10-15 14:48
(Received via mailing list)
class Customer < AR::Base
 def to_param
   "#{id}-#{MyAppUtils.normalize_for_url(name)}"
 end
end

MyAppUtils es una clase dentro de /lib ?


El 15 de octubre de 2008 12:33, Xavier N. <removed_email_address@domain.invalid> 
escribió:
Francesc E. (Guest)
on 2008-10-15 14:55
(Received via mailing list)
2008/10/15 Andrés gutiérrez <removed_email_address@domain.invalid>:

> class Customer < AR::Base
>  def to_param
>    "#{id}-#{MyAppUtils.normalize_
> for_url(name)}"
>  end
> end
>
> MyAppUtils es una clase dentro de /lib ?

Una pregunta de novato. ¿Que ventaja tiene meterlo como una
clase/modulo en vez de extender la clase String?

Yo lo tengo metido como una extension de la clase string:

http://github.com/fesplugas/simplified_permalink/t...

Con sus tests ...

http://github.com/fesplugas/simplified_permalink/t...
Guillermo (Guest)
on 2008-10-15 15:06
(Received via mailing list)
2008/10/15 Francesc E. <removed_email_address@domain.invalid>
>
> > MyAppUtils es una clase dentro de /lib ?
>
> Una pregunta de novato. ¿Que ventaja tiene meterlo como una
> clase/modulo en vez de extender la clase String?
>
> Yo lo tengo metido como una extension de la clase string:


Ya que habláis de donde poner este código, creo que sería interesante
extender extlib, <http://github.com/sam/extlib/tree/master> que es un
conjunto de extensiones a los objetos básicos de ruby, en la que tal vez
sería interesante estos métodos. Para quien no la conozca extlib empezó
con
DM <http://datamapper.org/> (Datamapper es la competencia de
ActiveRecord) y
ahora mismo también lo usa merb (la competencia sin magia, chula
eficiente y
rápida de rails).

PD. Perdón por el partidismo implícito.
Francesc E. (Guest)
on 2008-10-15 15:16
(Received via mailing list)
Empezó todo con preguntas sobre un plugin para hacer urls "bonitas",
alguien comentó que eso eran 5 lineas de código, y ahora empezamos a
hablar de una extlib que son unas cuantas lineas más que 5. ;)

2008/10/15 Guillermo <removed_email_address@domain.invalid>:
Andrés G. (Guest)
on 2008-10-15 15:40
(Received via mailing list)
A ver otra de novato:
Esto lo he sacado del link que me ha pasado Francesc [1]
simplified_permalink / lib / simplified_permalink / string.rb

class String

  def normalize
    ActiveSupport::Multibyte::Handlers::UTF8Handler.normalize(self,:d).split(//u).reject
{ |e| e.length > 1 }.join
  end

  def to_url
    self.normalize.gsub(/\W+/, ' ').strip.gsub(/\ +/, '-').downcase
  end

end

Aquí habría qe meter lo que he preguntado MyAppUtils como un metodo
más? si no es asi es que no lo pillo

[1]
http://github.com/fesplugas/simplified_permalink/t...


El 15 de octubre de 2008 13:16, Francesc E.
<removed_email_address@domain.invalid>
escribi
Francesc E. (Guest)
on 2008-10-15 15:47
(Received via mailing list)
2008/10/15 Andrés gutiérrez <removed_email_address@domain.invalid>:

> A ver otra de novato:
> Esto lo he sacado del link que me ha pasado Francesc [1]
> simplified_permalink / lib / simplified_permalink / string.rb

> Aquí habría qe meter lo que he preguntado MyAppUtils como un metodo
> más? si no es asi es que no lo pillo

Eso es una extension de la clase String.

    >> "A ver otra de novato".to_url
    => "a-ver-otra-de-novato"
David A. (Guest)
on 2008-10-15 15:48
(Received via mailing list)
2008/10/15 Andrés gutiérrez <removed_email_address@domain.invalid>:
>  def normalize
>    ActiveSupport::Multibyte::Handlers::UTF8Handler.normalize(self,:d).split(//u).reject
> { |e| e.length > 1 }.join
>  end

Sin haber probado este método ¿no descarta los caracteres multibyte?

Yo utilizo este método que no descarta esos caracteres, algo mejor para
SEO:

class String
  def to_permalink
      (Iconv.new('US-ASCII//TRANSLIT', 'utf-8').iconv
self).gsub(/[^\w\s\-\â€"]/,'').gsub(/[^\w]|[\_]/,'
').split.join('-').downcase
  end
end


--
David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman

http://simplelogica.net  #  (+34) 98 522 12 65
Xavier N. (Guest)
on 2008-10-15 16:05
(Received via mailing list)
2008/10/15 Andrés gutiérrez <removed_email_address@domain.invalid>:

> class Customer < AR::Base
>  def to_param
>    "#{id}-#{MyAppUtils.normalize_
> for_url(name)}"
>  end
> end
>
> MyAppUtils es una clase dentro de /lib ?

En mis proyectos suelen haber cosillas que son un poco como
"transversales", las suelo agrupar en un modulo MyAppUtils definido en
lib/my_app_utils.rb.

En cuanto a reabrir String... es otra opcion. Yo prefiero reabrir solo
cuando veo claro que esa es la mejor opcion por algun motivo. Es
decir, aumentar la API de una clase estandard en mi caso es la segunda
opcion y ha de ganarse con el sudor de su frente que tire por ahi (a
veces lo he hecho). Por defecto un modulito con cuatro o cinco
utilidades es lo que uso en este caso.

Lo abultado ahi es la normalizacion. La hago a mano porque la
controlo. La libreria iconv se comporta de manera distinta en
distintas maquinas, y la tecnica de la normalizacion Unicode pierde
algunos caracteres que quiero soportar... no se is la "ç" por ejemplo.
Hubo un thread reciente en la lista.

BTW ya que estamos, hay que tener en cuenta tb en estos slugs que si
te meten un nombre en arabe posiblemente resulte la cadena vacia (no
lo he probado). Si asumes unicidad ha de ser unicidad de la cadena
normalizada.
Francesc E. (Guest)
on 2008-10-15 16:12
(Received via mailing list)
On Wed, Oct 15, 2008 at 1:48 PM, David A. <removed_email_address@domain.invalid> 
wrote:

> Sin haber probado este método ¿no descarta los caracteres multibyte?

Si, los descarta. Pero es que algo has de hacer con ellos no?

He probado lo que has mandado y a mi no me funciona, quizas el
copy/paste no ha funcionado bien. Puedes actualizar el ejemplo que
subo con lo que crees que deberia funcionar.

http://pastie.textmate.org/private/yesbvzc9rkw3z0he2kvsq
Francesc E. (Guest)
on 2008-10-15 16:17
(Received via mailing list)
2008/10/15 Xavier N. <removed_email_address@domain.invalid>:

> En cuanto a reabrir String... es otra opcion. Yo prefiero reabrir solo
> cuando veo claro que esa es la mejor opcion por algun motivo. Es
> decir, aumentar la API de una clase estandard en mi caso es la segunda
> opcion y ha de ganarse con el sudor de su frente que tire por ahi (a
> veces lo he hecho). Por defecto un modulito con cuatro o cinco
> utilidades es lo que uso en este caso.

Yo normalmente tiro por extender la clase porque una de las cosas que
me gusta de Ruby es la preciosidad de código que queda.

    >> "Pero que cosa más bonita".to_url
    => "pero-que-cosa-mas-bonita"

    vs.

    >> MyAppUtils.normalize_for_url("Con lo bonito que podria ser esto")
    => "con-lo-bonito-que-podria-ser-esto"

No se, ya hay bastantes cosas feas en el mundo como para añadir más. ;)

(Ojo, es una opinión/opción personal, el dia que se me solapen las
cosas me acordaré de Xavier)
Andrés G. (Guest)
on 2008-10-15 16:21
(Received via mailing list)
Off-topic::::::::::

Bueno, una de ego para mi francesc. Aun siendo novato, que lo soy
tenia razon en como pensaba que lo habia hecho xavier noooo?
No pasa nada,nadie es perfecto y acepto tus disculpas :-))))

Off-topic ::::::::::::

El día 15 de octubre de 2008 14:17, Francesc E.
<removed_email_address@domain.invalid>
escribió:> 2008/10/15 Xavier N. <removed_email_address@domain.invalid>:
Xavier N. (Guest)
on 2008-10-15 16:24
(Received via mailing list)
2008/10/15 Francesc E. <removed_email_address@domain.invalid>:

> Yo normalmente tiro por extender la clase porque una de las cosas que
> me gusta de Ruby es la preciosidad de código que queda.
>
>    >> "Pero que cosa más bonita".to_url
>    => "pero-que-cosa-mas-bonita"

Si desde luego que es una opcion valida.
Adrián Mugnolo (Guest)
on 2008-10-15 17:04
(Received via mailing list)
On Oct 15, 2008, at 7:33 AM, Xavier N. wrote:

> normalize_for_url es un metodo propio que normaliza la cadena para que
> quede limpia en una URL:
>
>  def self.normalize(str)
>    return '' if str.nil?
>    n = str.chars.downcase.strip.to_s
>    n.gsub!(/[àáâãäåāă]/,    'a')
>    n.gsub!(/æ/,            'ae')
>    n.gsub!(/[ďđ]/,          'd')
>    n.gsub!(/[çćčĉċ]/,       'c')

Xavier,

En tiempos de Unicode, ahora que hay puntos de código, caracteres,
composiciones, descomposiciones, etc. creo que hacer eso "a mano" tal
vez no sea la mejor recomendación.

Saludos
Xavier N. (Guest)
on 2008-10-15 17:30
(Received via mailing list)
2008/10/15 Adrián Mugnolo <removed_email_address@domain.invalid>:

> En tiempos de Unicode, ahora que hay puntos de código, caracteres,
> composiciones, descomposiciones, etc. creo que hacer eso "a mano" tal
> vez no sea la mejor recomendación.

Te refieres a que el input puede venir en distintas normalizaciones?
Adrián Mugnolo (Guest)
on 2008-10-15 17:38
(Received via mailing list)
On Oct 15, 2008, at 10:30 AM, Xavier N. wrote:

> Te refieres a que el input puede venir en distintas normalizaciones?

Sí, eventualmente.

Un método como ese (que también los vi posteados por ahí) necesitaría
de mucho testing para dormir tranquilo.  Quiero decir, eran cosas que
se hacían y estaban bien en tiempos de ISO-8859-1 adonde sabías
positivamente cuáles (y cuántos) eran todos los casos posibles. :-)
Xavier N. (Guest)
on 2008-10-15 19:35
(Received via mailing list)
2008/10/15 Adrián Mugnolo <removed_email_address@domain.invalid>:
> On Oct 15, 2008, at 10:30 AM, Xavier N. wrote:
>
>> Te refieres a que el input puede venir en distintas normalizaciones?
>
> Sí, eventualmente.
>
> Un método como ese (que también los vi posteados por ahí) necesitaría
> de mucho testing para dormir tranquilo.  Quiero decir, eran cosas que
> se hacían y estaban bien en tiempos de ISO-8859-1 adonde sabías
> positivamente cuáles (y cuántos) eran todos los casos posibles. :-)

Sí en eso tienes razon.

Las regexps en Ruby 1.8 saben algo de Unicode, pero no creo que tenga
soporte completo para equivalencias. No me consta ningun problema en
los dos años que hace que uso esa transliteracion, pero no es prueba
de que sea robusta ante cualquier input. De hecho tratare de buscar un
contraejemplo porque creo que debe haberlo.
Francesc E. (Guest)
on 2008-10-15 19:37
(Received via mailing list)
2008/10/15 Xavier N. <removed_email_address@domain.invalid>:

> Las regexps en Ruby 1.8 saben algo de Unicode, pero no creo que tenga
> soporte completo para equivalencias. No me consta ningun problema en
> los dos años que hace que uso esa transliteracion, pero no es prueba
> de que sea robusta ante cualquier input. De hecho tratare de buscar un
> contraejemplo porque creo que debe haberlo.

Eso lo teneis testeado?
Xavier N. (Guest)
on 2008-10-15 19:48
(Received via mailing list)
2008/10/15 Francesc E. <removed_email_address@domain.invalid>:
> 2008/10/15 Xavier N. <removed_email_address@domain.invalid>:
>
>> Las regexps en Ruby 1.8 saben algo de Unicode, pero no creo que tenga
>> soporte completo para equivalencias. No me consta ningun problema en
>> los dos años que hace que uso esa transliteracion, pero no es prueba
>> de que sea robusta ante cualquier input. De hecho tratare de buscar un
>> contraejemplo porque creo que debe haberlo.
>
> Eso lo teneis testeado?

No con todas las normalizaciones posibles.
Xavier N. (Guest)
on 2008-10-15 20:43
(Received via mailing list)
2008/10/15 Xavier N. <removed_email_address@domain.invalid>:
>
> No con todas las normalizaciones posibles.

Visto. Habia tres caracters en los que la normalizacion de la
aplicacion dependia de la normalizacion Unicode del input, eran: ą, į,
ij.

He añadido ligaduras y la letra ß a la transliteracion. He factorizado
tambien la tabla para poder automatizar esto sin repetirla en el test
(es posible que en codigo final cachee las regexps en lugar de
interpolar).

Os paso el modulo y el test abajo, son 120 aserciones.

-- fxn

# test/unit/normalization_test.rb
require 'test_helper'

class NormalizationTest < ActiveSupport::TestCase
  def test_normalization
    MyAppUtils::TRANSLITERATIONS.each do |from, to|
      expected = to * from.chars.length
      ActiveSupport::Multibyte::NORMALIZATIONS_FORMS.each do |f|
        normalized_from = from.chars.normalize(f)
        assert_equal expected, MyAppUtils.normalize(normalized_from)
      end
    end
  end
end

# lib/my_app_utils.rb
module MyAppUtils
  TRANSLITERATIONS = {
    "àáâãäåāăą"   => 'a',
    "ß"          => 'ss',
    "æ"          => 'ae',
    "ďđ"         => 'd',
    "çćčĉċ"      => 'c',
    "èéêëēęěĕė"  => 'e',
    "Æ’"          => 'f',
    "ff"          => 'ff',
    "fi"          => 'fi',
    "fl"          => 'fl',
    "ffi"          => 'ffi',
    "ffl"          => 'ffl',
    "ſt"          => 'st',
    "ĝğġģ"       => 'g',
    "ĥħ"         => 'h',
    "ììíîïīĩĭį"  => 'i',
    "ij"          => 'ij',
    "ıĵ"         => 'j',
    "ķĸ"         => 'k',
    "łľĺļŀ"      => 'l',
    "ñńňņʼnŋ"     => 'n',
    "òóôõöøōőŏŏ" => 'o',
    "Å“"          => 'oe',
    "ŕřŗ"        => 'r',
    "śšşŝș"      => 's',
    "ťţŧț"       => 't',
    "ùúûüūůűŭũų" => 'u',
    "ŵ"          => 'w',
    "ýÿŷ"        => 'y',
    "žżź"        => 'z',
  }

  def self.normalize(str)
    return '' if str.nil?
    n = str.chars.downcase.strip.to_s
    TRANSLITERATIONS.each do |from, to|
      n.gsub!(/[#{from}]/, to)
    end
    n.gsub!(/\s+/, ' ')
    n.delete!('^ a-z0-9_/\\-.')
    n
  end
end
Xavier N. (Guest)
on 2008-10-15 20:47
(Received via mailing list)
Ah, dandole vueltas al tema veo que quiza podria cambiar esta
aproximacion por usar el truco de la normalizacion Unicode +
tratamiento de excepciones a mano. Con este test como base vere lo que
supondria, os cuento las pesquisas.
Guillermo (Guest)
on 2008-10-15 20:51
(Received via mailing list)
2008/10/15 Xavier N. <removed_email_address@domain.invalid>

> Jeroglíficos raros.


Acabo de descubrir nuevas letras. Me faltaría saber como se pronuncian.
Para los pocos casos en los que se da (salvo en el lenguaje cani, donde
los
chavales encuentran no se como una rosa en el utf-8), o me como el
caracter
o informo al usuario de las limitaciones. (al margen de tildes cedillas,
etc... que obviamente si convierto).

Por cierto, te falta este:
"" => "apple"

:-P
Francesc E. (Guest)
on 2008-10-15 20:53
(Received via mailing list)
2008/10/15 Guillermo <removed_email_address@domain.invalid>:

> Por cierto, te falta este:
> "" => "apple"

Y este ☃ => 'snowman'

http://☃.net/
Xavier N. (Guest)
on 2008-10-15 23:37
(Received via mailing list)
2008/10/15 Guillermo <removed_email_address@domain.invalid>:
> 2008/10/15 Xavier N. <removed_email_address@domain.invalid>
>>
>> Jeroglíficos raros.
>
> Acabo de descubrir nuevas letras. Me faltaría saber como se pronuncian.
> Para los pocos casos en los que se da (salvo en el lenguaje cani, donde los
> chavales encuentran no se como una rosa en el utf-8), o me como el caracter
> o informo al usuario de las limitaciones. (al margen de tildes cedillas,
> etc... que obviamente si convierto).

Eso para algunas aplicaciones esta OK y naturalmente es una decision
que te corresponde y esta bien.

Yo lo hago de otro modo porque el nombre de una persona es muy
importante para mi y trato de respetarlo en la interfaz lo maximo
posible. Si se registra alguien con apellido Łos o Weierstraß
intentare por todos lo medios que su nombre aparezca lo mas entero
posible. Por eso que trato de tener una tabla controlada sabiendo lo
que mapeo (modulo la prueba que os dije antes que hare).

Para que se entienda la posible percepcion del usuario, en WWR salvo
que lo hayan cambiado se cepillan letras acentuadas. Si uno ve que su
URL es 34-ngel-lpez pues... coño no esta fino eso para mi gusto. Es
algo tecnico pero yo prefiero que veas 34-angel-lopez en la medida de
lo posible, eso llevado a caracteres que se usan en otros paises
europeos.
Guillermo (Guest)
on 2008-10-16 01:09
(Received via mailing list)
2008/10/15 Xavier N. <removed_email_address@domain.invalid>

> > o informo al usuario de las limitaciones. (al margen de tildes cedillas,
> > etc... que obviamente si convierto).
>
> Eso para algunas aplicaciones esta OK y naturalmente es una decision
> que te corresponde y esta bien.
>
> Yo lo hago de otro modo porque el nombre de una persona es muy
> importante para mi y trato de respetarlo en la interfaz lo maximo
> posible.
>

Depende del tipo de aplicación/cliente. A mi los usuarios me han
demostrado
que suelen pasar de la url. Creo que prueba de ello es el tono gris que
toma
todo lo que no es el dominio en google chrome. Al margen si es correcta
o no
esa filosofía, es una realidad que el usuario por sencilla que sea la
url,
va ha acabar copiando y pegando. 34-ngel-lpez, 34-angel-lopez o
34-%C3%81ngel-L%C3%B3pez, para al final, arrastrar el icono del
navegador al
email/messenger.

El otro motivo que podría existir es SEO. Pero la verdad, me parece que
se
le ha dado más importancia de la que tiene. Hace mil veces más un buen
contenido que el mejor de los seo.

Desde el punto de vista purista, te doy toda la razón del mundo, pero
siguendo las guías de diseño de apple (por poner algunas), utilizo la
regla
del 80/20. Cualquier funcionalidad válida solo para el 20% no me merece
la
pena. Me centraré en el 80% de los españoles que no tienen tílde en su
nombre (y eso que me discrimino). A lo que voy, que con poner solo las
tíldes y cedillas, ya soluciono el problema a mi 80% de usuarios. Al
resto,
sinceramente. ¡que les den!

Espero que mi respuesta no haya quedado muy hostil.

Un Saludo.
Xavier N. (Guest)
on 2008-10-16 01:13
(Received via mailing list)
Vale, hecha la prueba con

  n = str.chars.downcase.normalize(:kd).to_s
  n.gsub!(/[^\x00-\x7F]+/, '')

segun el test analogo al que envie antes se borra algun caracter de
cada una de estas asignaciones (12 sobre 30):

    #'ß'          => 'ss',
    #'æ'          => 'ae',
    #'ďđ'         => 'd',
    #'Æ’'          => 'f',
    #'ĥħ'         => 'h',
    #'ıĵ'         => 'j',
    #'ķĸ'         => 'k',
    #'łľĺļŀ'      => 'l',
    #'ñńňņʼnŋ'     => 'n',
    #'òóôõöøōőŏŏ' => 'o',
    #'Å“'          => 'oe',
    #'ťţŧț'       => 't',

Entre esto y que el mapping es explicito creo que seguire usando el
mapping.
Raul M. (Guest)
on 2008-10-16 01:34
(Received via mailing list)
El día 15 de octubre de 2008 23:08, Guillermo
<removed_email_address@domain.invalid>
escribió:> Depende del tipo de aplicación/cliente.

Tienes razón en esto, hay usuarios con un perfil muy distinto al de
los tuyos: al migrar los usuarios de una web anterior hemos tenido
varios casos en los que nos pedían actualizar el nombre de usuario y
además (explícitamente) el identificador de sus URLs.

Yo creo que además la URL gana peso en cuanto la sacas del navegador a
otro medio. Hay gente que aloja su web en algún servicio online y
siempre preferirá aparecer en sus tarjetas de visita o en las
reseñasde medios impresos como:

  artistas.com/angel-lopez

en lugar de:

  artistas.com/C3%81ngel-L%C3%B3pez
Ceritium (Guest)
on 2008-10-16 03:52
(Received via mailing list)
Mi opinión sobre las urls y el seo es...

    Las url cuanto mas cortas y mostrando menos palabras no
significativas
mejor, por lo que quizás el tema de:
      /category/pelis/post/los-supervillanos-de-texas/  sea peor que
/pelis/supervillanos-de-texas

  Luego viene el tema de las stop-words :P

  La primera opción suele ser la más habitual para como trabajamos
normalmente en rails, pero si nos curramos un poco el routes y
redefinimos
algunos metodos como ya se ha comentado pueden quedar urls más simples
como
la segunda.


Todo esto depende de cual sea tu objetivo, si necesitas buen
posicionamiento
apuesta por la segunda, todo lo que valla detrás del login, es decir,
que no
sea público no tendría necesidad de configurar las url, a menos que sea
por
una elección estética o por mantener alguna coherencia que tu veas
necesária.



2008/10/15 Miguel Angel Calleja L. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.