Changer le format d'URL d'un blog sous Typo
Pour des raisons historiques, les URL des billets de Typo, le blogware en Ruby on Rails, sont obligatoirement au format /annee/mois/jour/titre-du-billet. Pour mémoire, cette limitation est due à l’introduction dans la version 4.1 de l’application du module datestamped resources. Ce dernier permet de définir une ressource – par exemple un billet – à partir de sa date de création. Si cela a du sens sur un outil de blog, notamment pour éviter de “perdre” deux billets ayant le même titre, c’est également contraignant quand on souhaite personnaliser le format de ses URL.
Ce n’est pourtant pas impossible en modifiant quelques lignes du code de Typo, afin d’accepter les URL du type /titre-de-votre-billet. La suite en images, et le patch qui va bien pour la 5.1.3 à la fin.
Ajouter les routes qui vont bien
On va commencer par modifier le système de routes dans le fichier config/routes.rb afin de prendre en compte les URL du type /titre-du-billet. Ça se passe ligne 110, juste après le commentaire “Allow neat perma URL”, il faut ajouter les lignes suivantes :
map.connect ':title',
:controller => 'articles', :action => 'show'
map.connect ':title' + '.rss',
:controller => 'articles', :action => 'show', :format => 'rss'
map.connect ':title' + '.atom',
:controller => 'articles', :action => 'show', :format => 'atom'Retrouver nos petits
On va maintenant modifier le modèle Article afin de prendre en compte ce nouveau lien permanent. L’idée originale est d’Éric Daspet, adaptée par mes soins. On va remplacer la méthode find_by_permalink dans app/model/article.rb par celle-ci :
def self.find_by_permalink(year, month=nil, day=nil, title=nil)
unless month
case year
when String
title = year
year = nil
when Hash
year, month, day, title = date_from(year)
when Array
year, month, day, title = year
end
end
conditions = ['permalink = ?', title]
if year
from, to = self.time_delta(year, month, day)
conditions[0] += 'AND published_at BETWEEN ? AND ?'
conditions += self.time_delta(year, month, day)
end
find_published(:first,
:conditions => conditions) \
or raise ActiveRecord::RecordNotFound
endVoilà, c’est presque fini. Il ne nous reste plus qu’à modifier le helper linkto_permalink qui génère les liens permanents dans les vues afin de prendre ces modifications en compte. Ça se passe cette fois dans app/helpers/applicationhelper.rb ligne 17.
Remplacez la ligne :
"<a href=\"#{article_path(item)}#{anchor}\" class=\"#{style}\">#{title}</a>"Par :
"<a href=\"#{this_blog.base_url}#{item.permalink}#{anchor}\" class=\"#{style}\">#{title}</a>"Et voilà, c’est terminé. Pas besoin de modifier votre thème, tout est sensé fonctionner out of the box. Et pour les feignants du copier / coller, vous pouvez utiliser le patch gracieusement fourni en pìece jointe.
2 commentaires sur Changer le format d'URL d'un blog sous Typo »
Trackbacks sur Changer le format d'URL d'un blog sous Typo
Les trackbacks sont fermés pour cause de spam.
Passionné d'informatique depuis l'âge de six ans, je travaille en tant que responsable qualité chez blueKiwi Software, éditeur spécialiste des outils collaboratifs en entreprise. Ma double formation en sciences politiques et en informatique me permet de porter un regard particulier sur les problématiques abordées par mon poste.
pouype about 13 hours later:
Merci Frederic !
J’ai quand même un peu la honte, là (Comprenne qui pourra)
Frederic de Villamil about 16 hours later:
Tu peux oui ;-)
(moi j’ai compris)