Faîtes de beaux boutons arrondis pour vos sites

février 11th, 2010 No comments »

Nous allons utilliser la technique dite des « portes coulissantes » avec une seule image. Cette technique est idéale pour vos menus, vos tags, vos formulaires et j’en passe.

objectif

Rendu

Concept

L’idée c’est de faire un <a href="lien"> avec l’image du coté gauche de votre bouton en fond qui contiendra un<span> avec votre texte ainsi que tout le milieu et le coté droit de l’image du bouton en fond :

Concept des portes coulissantes

Concept des portes coulissantes

Voici l’image du fond :

Au format PNG l’image n’est pas très lourde et, dans le cas où un texte un peu long se présenterait, elle doit être suffisament large.

HTML

En HTML, nous faisons un menu classique:

<ul>
    <li><a href="#"><span>Home</span></a></li>
    <li><a href="#"><span>About</span></a></li>
    <li><a href="#"><span>Bug Tracker</span></a></li>
    <li><a href="#"><span>Git</span></a></li>
</ul>

CSS

En CSS, nous faisons en sorte que le menu s’affiche sur une ligne et nous enlevons la petite puce devant chaque <li>

ul {
    list-style-type:none;
}

li {
    display:block;
    float:left;
    padding-left:10px;
}

Attaquons-nous maintenant au fond.

li a {
    background:url(img/button-full.png) no-repeat right;
    height:20px;
    padding-right:6px;
    display:block;
    color:#9fd2ef;
    font-size:11px;
    line-height:19px;
    text-decoration:none;
}

li a span {
    background:url(img/button-full.png) no-repeat left;
    height:20px;
    padding-left:6px;
    margin-left:-6px;
    display:block;
}

Nous affichons l’image de fond du a à partir de la gauche, et l’image de fond du span à partir de la droite.

Pour que le début du a (et surtout son fond) soient visibles, nous mettons padding-left:10px; pour avoir un peu d’espace avant le span. En faisant margin-right:-6px;, le span s’affichera après 4 pixels (la taille du coté gauche à peu près).
Même chose mais avec une valeur positive au padding de droite pour garder le même espacement à la fin et que le texte soit centré dans l’image.

Mots de la fin…

Nous pouvons aussi faire en sorte que quand l’utilisateur passe sa souris au dessus d’un bouton, l’image dans le fond change :

li a:hover {
    background:url(img/button-full-hover.png) no-repeat right;
    color:#efefef;
}

li a:hover span {
    background:url(img/button-full-hover.png) no-repeat left;
}

C’est un petit effet sympa mais qui coûtera une image de plus.

Dans un prochain billet, nous verrons comment faire la même chose grâce à CSS 3, avec et sans image.

Urls esthétiques avec Code Igniter

février 3rd, 2010 No comments »

Dans la série Urls esthétiques, tant que j’y suis, je m’attelle aujourd’hui à Code Igniter, le framework php.

Code Igniter utilise l’architecture MVC (Model-View-Controller) et, de base, les URL on cette forme-ci : exemple.com/index.php/class/function/ID. Nous souhaitons afficher des URL plus agréables, sous cette forme : exemple.com/class/function/title-of-id.

Fichiers de configuration

Dans application/config/config.php :

$config['base_url'] = "http://exemple.com/";
$config['index_page'] = "";
$config['permitted_uri_chars'] = 'a-z 0-9~%éêëèàâäùûüîïç.:_\-'
  1. La première ligne est l’adresse de votre site
  2. On utilisera l’url rewriting donc on vide cette seconde ligne
  3. Ce sont les caractères à accepter dans les URL, vous pouvez enlever ce qui vous paraît inutile ou en rajouter d’autres (mais attention aux failles que cela pout engendrer)

Dans application/config/routes.php :

$route['news/show/:any'] = "news/show/$1";
$route['news/tag/:any'] = "news/tag/$1";

Ici nous spécifions, grâce à ‘:any‘, dans quelles classes et fonctions nous voulons des URL avec des lettres et des caractères spéciaux (et des décimaux bien sûr). Par défaut, l’ID d’une URL avec Code Igniter est ‘:num‘ pour numbers.

Plus de détails dans la doc.

Serveur

Pour finalement complètement enlever ce ‘index.php‘, voici les règles de réecriture pour Lighttpd (piqué sur le wiki officiel)

url.rewrite-once = (
    "/(.*)\.(.*)" => "$0",
    "/(css|files|img|js|stats)/" => "$0",
    "^/([^.]+)$" => "/index.php/$1"
)

Sachant que la ligne "/(css|files|img|js|stats)/" => "$0" vous permet de lister les dossiers qui ne seront pas géré par Code Igniter et qui seront donc accessibles normalement, tout comme le reste de votre site. Ces dossiers sont bien sûr à mettre à la racine de votre host.

Petite note pour la fin :

L’URL Helper a une fonction pour que vos liens prennent la forme d’URL plus humaines.

Pour charger l’Helper :

$this->load->helper('url');

La fonction est :

url_title()

et utilise un tiret pour séparer les mots (mais peut être changé par un underscore _ ).

Un exemple pour par exemple avoir le titre de votre article ou de votre news dans l’URL :

$titre  = "Urls esthétiques avec Code Igniter";
$url = url_title($title);
// Produira : Urls-esthétiques-avec-Code-Igniter

Plus d’infos dans la doc.

Urls esthétiques avec DokuWiki

février 2nd, 2010 No comments »

J’ai vu plusieurs personnes tombés ici en cherchant à rendre les URL de DokuWiki plus esthétiques en transformant http://exemple.com/doku.php?id=php:code_igniter en http://exemple.com/php/code-igniter . Aujourd’hui j’essaie d’y répondre plus complètement que dans l’article précédent sur DokuWiki.

Configurer DokuWiki

Je reprends ce que je disais la dernière fois, connectez-vous en tant qu’administrateur, allez dans Admin -> Paramètres de configuration partie Paramètres avancés :

  1. URLs esthétiques : .htaccess
  2. Utiliser slash comme séparateur de catégorie dans les URLs : Oui
  3. Séparateur de nom de page : - (tiret)

Configuration du serveur

$HTTP["host"] == "wiki.bender-labs.org" {
    var.dokudir = basedir + "dokuwiki/"  
    server.document-root = dokudir  
    static-file.exclude-extensions = ( ".php" )

    $HTTP["url"] =~ "/(\.|_)ht" {
        url.access-deny = ( "" )
    }
    $HTTP["url"] =~ "^" + dokudir + "/(bin|data|inc|conf)/" {
        url.access-deny = ( "" )
    }

    $HTTP["url"] =~ "^" { index-file.names = ("doku.php") }
            url.rewrite = (
              "^" + "/lib/.*$" => "$0",
              "^" + "/_media/(.*)?\?(.*)$" => "/lib/exe/fetch.php?media=$1&$2",
              "^" + "/_media/(.*)$" => "/lib/exe/fetch.php?media=$1",
              "^" + "/_detail/(.*)?\?(.*)$" => "/lib/exe/detail.php?media=$1&$2",
              "^" + "/_detail/(.*)?$" => "/lib/exe/detail.php?media=$1",
              "^" + "/_export/([^/]+)/(.*)" => "/doku.php?do=export_$1&id=$2",
              "^" + "/doku.php.*" => "$0",
              "^" + "/feed.php.*" => "$0",
              "^" + "/(.*)\?(.*)" => "/doku.php?id=$1&$2",
              "^" + "/(.*)" => "/doku.php?id=$1",
            )
}

Polices trop grandes avec Firefox 3.0.x et inférieurs

janvier 19th, 2010 No comments »

Si depuis le 16 Janvier vous vous êtes rendu compte que certains textes et liens sur divers sites n’ont plus leur taille habituelle et sont trop grands, si vous utilisez Firefox 3.0.x ou une version inférieure et que vous utilisez l’add-on NoScript, ne cherchez plus.

Certains autres éléments rencontrent des problèmes, par exemple dans la barre de recherche de Alsacréations, les deux bords sont coupés, et l’image en fond est manquante :

search box bug

C’est la dernière mise à jour de NoScript vers sa version la 1.9.9.36 qui introduit ce bug. Ça a été confirmé ici.

Comment faire en attendant que le bug soit fixé ?

  • Désactiver NoScript momentanément
  • Aller dans la configuration de Firefox (about:config dans la barre d’URL) et mettre une valeur vide pour ce champs : noscript.surrogate.popunder.sources.
  • Ajouter à noscript.surrogate.popunder.exceptions chaque site qui pose problème (hum hum…)
  • Installer une version infériere de NoScript, par exemple 1.9.9.35
  • Passer à une version Firefox supérieure à 3.0.x
  • Faire avec, en attendant un fix. L’auteur ne semble pas savoir d’où ce bug provient cela dit…

Mise à jour 20 Janvier 2009 :

Le problème a été réglé : télécharger la dernière mise à jour

Upgrade vers DokuWiki-2009-12-25c “Lemming” avec Lighttpd

janvier 18th, 2010 No comments »

La semaine dernière, DokuWiki (que j’utilise avec l’ami Ksh) s’est retrouvé avec deux failles de sécurité un peu méchantes, mais heuresement vite fixés.

La première permettait de lister le nom de fichiers arbitraires sur le serveur web (sans accès au contenu même de ces fichiers celà dit). Cette faille venait du ACL Manager et permettait par exemple de se faire une idée de la structure du serveur.

Elle a permit de découvrir la seconde faille : l’ACL plugin ne faisait pas de contrôle contre les attaque CSRF, qui peuvent êtres exploités pour changer les règles d’accès en piégeant l’administrateur connecté et en lui faisant visiter une page web malicieuse qui donnera à l’attaquant tous les droits de l’admin.

Bref, là où je veux en venir, c’est simple : vous venez de vous réveiller, vous découvrez ces bugs, en tant que personne responsable vous mettez à jour votre wiki (vous faîtes un backup comme indiqué parce que vous n’avez pas encore bu votre café et votre vision se trouble à plus de 5 mètres), et BIM votre url rewriting est foutu (les liens ne sont plus bons) !

Deux choix s’offrent à vous :

  • celui de la personne mal réveillée qui a du mal à cette heure-ci
  • celui de la personné éclairé à qui ça prendra 2 secondes

La personne dite « mal réveillée » fera tout un tas de choses inutiles :

  • Lire et relire la conf lighttpd, faire un tour sur divers site pour voir si il y a de nouvelles règles, changer des trucs, sans que rien ne marche mieux.
  • Vérifier les chown et chmod comme un fou pour voir si rien ne cloche (ok, c’est pas si inutile, mais le problème ne vient pas de là si vous ne vous êtes pas planté)
  • D’autres choses que je peine à imaginer

La personne dite « réveillée » ira dans la partie Admin->Configuration, verra que les règles qu’elle avait fait pour son url rewriting n’y sont plus, et remplira ces 3 champs dans Paramètres avancés :

  1. URLs esthétiques : .htaccess (ça dépend de votre conf lighttp tout de même – voir la conf proposé sur le site DokuWiki)
  2. Utiliser slash comme séparateur de catégorie dans les URLs : Oui
  3. Séparateur de nom de page : Ce que vous souhaitez

C’était vraiment basique, mais parfois on manque d’idées claires, on imagine le pire, ou tout simplement on s’occupe rarement de gérer un Wiki du coup son fonctionnement n’est pas évident.