Archives du mot-clef codage Web

Frameworks de thèmes pour WordPress

Bon, on recommence.

À peine ai-je décou­vert Sand­box et com­mencé à tra­vailler des­sus que je me rends compte que je suis en 2008. Et qu’en 2009, les theme fra­me­work ont beau­coup évolué.

J’ai donc beau­coup cher­ché et hésité. La liste ci-dessous est le résul­tat de mes recherches.

  1. Pre­mière géné­ra­tion : K2. Il intro­duit l’idée de « super-thème » (advan­ced tem­plate) et de thèmes enfant (styles). Il n’a pas été suivi (il conti­nue à être déve­loppé, mais il n’attire pas les foules ou les inspirations).
  2. Deuxième géné­ra­tion : Sand­box. Il devient la base de nom­breux déve­lop­pe­ments et, en fait, est le père de (presque  ?) tous les fra­me­works de thème actuels. Peut-être doit-il son suc­cès à son dépouille­ment, qui incite jus­te­ment à regar­der le fra­me­work comme un fra­me­work, et non comme un thème avec des fonc­tions en plus.
  3. Troi­sième géné­ra­tion : Car­ring­ton (le plus puis­sant appa­rem­ment, il lorgne clai­re­ment sur le CMS, Hybrid, The­ma­tic, Vanilla (mon pré­féré sur le papier), WP Fra­me­work, et plein d’autres. Le terme styles de K2 est désor­mais appelé thèmes enfant (child themes)
  4. Qua­trième géné­ra­tion : The Future of Word­Press Themes 2009.

J’ai hésité à ins­tal­ler Vanilla, qui me semble le plus inté­res­sant (tout comme le logi­ciel de forum épo­nyme), mais il n’est pas fina­lisé. Je sou­hai­tai aussi uti­li­ser Carrington/JAM (une ver­sion dépouillée et amé­lio­rée de Carrington/Blog), mais elle était vrai­ment trop bare­bones pour moi (même le PHP ne marche pas en l’état).

Donc, je pars de Carrington/Blog et je vire­rais la CSS.

WordPress, arrête de penser à ma place !

D’après mes essais (texte mini­mal, fichier CSS vidé), Word­Press force l’affichage des liens en tant que tel, même quand on ne veut pas. Exemple pour le prou­ver, une CSS que je vou­lais don­ner « telle qu’elle appa­raît dans BBE­dit » (mais en conser­vant un vrai lien) :

/* http://david.latapie.name/blog/765-modifications-esthetiques */

[hreflang]:after	{
    background:transparent;
    color:#666;
    content:"\a0[" attr(hreflang)"]";
    font-size:smaller;
    text-decoration:none
}

Voici le code per­ti­nent : <a href="#" style="color:inherit;text-decoration:none">bla</a>

J’ai même essayé avec du !important (ce qui est géné­ra­le­ment une mau­vaise pra­tique), rien n’y fait.

Je vous met au défi d’empêcher Word­Press de pen­ser à votre place. Et je suis pre­neur de tout plugin.

Je suis loin d’être le seul à m’en plaindre (ce lien traite de HTML, pas de CSS, mais j’ai aussi eu ce pro­blème avec du HTML.

Improving Leopress theme for WordPress

I love the Leopress-fr theme (adap­ted from Leo­press 1.0), but it has seve­ral issues, some so fun­da­men­tal I can nei­ther use it nor bug­fix it.
  • back­ground is not fixed. It fixed it (pun inten­ted): html {background:attachment:fixed}
  • I favour justify over left when it comes to text-align. I fixed this too: .post .entry {text-align:justify}
  • not widget-ready. Quite impor­tant for me and I don’t have the pro­fi­ciency to fix it.
  • does not dis­play tags in posts. Very impor­tant for me and I don’t have the pro­fi­ciency to fix it.
  • ignore the a ele­ment in post! Fun­da­men­tal and I don’t know how to fix this.
  • no bul­let for bul­le­ted lists. Strange, since the code is there. I have the intui­tion it comes from the same pro­blem with the lack of anchors. Fun­da­men­tal and I don’t know how to fix this.
The last twos pro­blem may be rela­ted to this theme not being Word­Press 2.8-ready. If, by any chance, you have some spare time…

Individualiser les formats d’entrée dans Drupal

Dans Dru­pal, je croyais que le fil­trage HTML (for­mat d’entrée ; /admin/settings/filters/ pour reprendre la ter­mi­no­lo­gie Dru­pal) ne pou­vait pas être indi­vi­dua­lisé, mais juste per­son­na­lisé. Ainsi, si on active Filtre HTML, seul un ensemble limité de HTML est auto­risé. Là où était mon erreur, c’était de croire que cet ensemble limité était défini pour l’ensemble du site. Que nenni ! Uni­que­ment pour le for­mat d’entrée cou­rant. Joie ! Un exemple pour mieux comprendre :
  1. Texte brut — à la com­men­taires en mode texte de Dotclear
  2. XHTML fil­tré — un poil de HTML est auto­risé — à la com­men­taires wiki de Dot­clear, mais sans wiki­barre :(
  3. XHTML assisté — pour les uti­li­sa­teurs authen­ti­fés ; ils peuvent uti­li­ser tout le XHTML qu’ils veulent (il fau­drait que je véri­fie ce que ça donne par rap­port à l’insertion de styles CSS)
  4. XHTML libre— pareil mais sans les outils plus intel­li­gents que l’utilisateur (ainsi, un retour à la ligne après 72 carac­tères, typique des geeks, ne sera pas inter­prété comme un retour cha­riot). Les gardes-fou (balise non fermée) sont cepen­dant tou­jours présents.
Dans cet exemple, je ne savais pas que l’on pou­vait avoir à la fois 1 (HTML filter/rien) et 2 (HTML filter/<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>). Source : Raw text fil­ter.

Le blog parfait

Ceci est la tra­duc­tion d’un billet d’Anne van Kes­te­ren (déve­lop­peur Opera et gou­rou HTML/CSS), The per­fect weblog sys­tem (der­nière modi­fi­ca­tion : 18 août 2004) — j’ai d’ailleurs contacté l’auteur avec un résumé en anglais de com­ment Dot­Clear se posi­tionne sur tout ça, sans réponse de sa part pour le moment. Au niveau du fond, j’ai mis les balises et attri­buts en minus­cules, com­pacté le bla-bla (si vous pen­sez que j’ai trahi la pen­sée, sui­vez le lien d’origine), ajouté une table des matières et changé le pre­mier niveau de puces par un titre de sec­tion (en XHTML 2, la séman­tique ne serait pas per­due dans l’opération, mais bon…). J’ai aussi ajouté quelques notes au fil du texte et, en seconde par­tie, une com­pa­rai­son avec l’état de ce que fait DotClear2 β3.

Lire la suite

Les chiffres romains Unicode

Plu­sieurs billets de ce blogue uti­lisent des chiffres romains.

ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻ ⅬⅭⅮⅮⅯⅼⅽⅾⅿↀↁↂↃ

À par­tir d’aujourd’hui[1], ce ne sera plus le cas (et, quand j’aurais le temps, je modi­fie­rais rétro­ac­ti­ve­ment les billets incri­mi­nés. Pourquoi ?

Parce que les chiffres romains ne sont pas des carac­tères, mais des glyphes.

Pour rap­pel, un glyphe est une forme gra­phique (voire sonore, tac­tile…), alors qu’un carac­tère est l’unité de sens qu’il y a der­rière. Pour reprendre la ter­mi­no­lo­gie de Saus­sure, un glyphe est un signi­fiant, un carac­tère est un signifié.

Jusqu’à aujourd’hui, je croyais que, pour les chiffres romains, ce n’était pas le cas. Que même si, sur le papier (ou la pierre), un chiffre romain est iden­tique à la lettre latine dont il s’inspire, il s’agissait fon­da­men­ta­le­ment de deux carac­tères dif­fé­rents (le XXe siècle n’est pas le « ixixième » siècle, mais le vingtième siècle). Ceci était d’autant plus jus­ti­fiable qu’un tel cas de confu­sion entre glyphe et carac­tère a des anté­cé­dents : l’alpha majuscule (Α) a généralement le même glyphe que le A majuscule (A). Lire à ce sujet B, В, β, ß.

Voici pour­quoi j’ai changé d’avis :

Lire la suite

Differences between Redirect and Rewrite

  • Because I am cra­ving for this for months;
  • Because I only found kilometres-long texts about use, per­for­mance, advan­ced mani­pu­la­tion… but no simple thing at all;
  • Because I like (use­ful) lists.
Here is a short sum­mary of various redi­rect rules and their uses.

Redirect

(1) Redirect, RedirectTemp, Redirect temporary or Redirect 302
URL 1 is redi­rec­ted to URL 2; it is visible in the address bar[1].
(2) RedirectPermanent or RedirectPermanent or Redirect 301
Same as (1), but per­ma­nent[2].
(3) Redirect Seeother or Redirect 303
Tem­po­rary change, do not change the index. Sel­dom used.
(4) Redirect Gone or Redirect 410
The page has disap­pea­red and nothing will replace it. Think of it as a « volun­tary 404″.
(5) Redirect xxx
Redi­rect with the cor­res­pon­ding code.
(6) RedirectMatch
Same as (1), but with regu­lar expres­sions[3].
(7) RedirectMatch Permanent
Same as both (2) and (6)[4].
Notice how (6) and (7) dif­fer from the other: they do not just send a code, they change the beha­viour of the syn­tax. Conse­quenty, it is not pos­sible (AFAIK) to use regexps with other than 301.

Rewrite

Rewrite is dif­ferent and not neces­sa­rily bet­ter. But in any case, it is more com­plex (and I won’t delve into it for now). The main dif­fe­rences bet­ween Redirect and Rewrite are:
  • Redirect uses mod_alias; Rewrite uses mod_rewrite — except for old Apache ver­sion, where both rules use mod_rewrite. Big deal.
  • Rewrite hides the redi­rec­tion to the user — this means the address stays the same in the address bar. That is the main dif­fe­rence bet­ween Redi­rect and Rewrite.
  • Rewrite is the only one able to cope with dyna­mic URL (you know, those damn ques­tion marks in QUERY STRING). Not even Redi­rect­Match can do it (AFAIK).
Redirect is appro­priate when you want people to remem­ber the new address; You may be sure they will copy the good address and that will save you some CPU cycles in non redi­rec­ting any­more. On the contrary, Rewrite is appro­priate when you want the address to stay the same/not to be visible; A good example is hiding the archi­tec­ture (/wordpress/, /wiki/…). Ulti­ma­tely, using one or the other is not a tech­ni­cal consi­de­ra­tion but more of a human and stra­te­gic one.

Examples

Below are examples I use to change domain.tld/images/foo to domain.tld/dotclear/public/images/foo (I actually only use the fourth one). The lea­ding cir­cum­flex (^) is for for­cing the mat­ching string to be at the begi­ning of the address.
  • Redirect ^/images/(.*)$ http://blog.empyree.orghttp://david.latapie.name/wordpress/wp-content/uploads/$1
  • RedirectPermanent ^/images/(.*)$ http://blog.empyree.orghttp://david.latapie.name/wordpress/wp-content/uploads/$1
  • RedirectMatch ^/images/(.*)$ http://blog.empyree.orghttp://david.latapie.name/wordpress/wp-content/uploads/$1
  • RedirectMatch Permanent ^/images/(.*)$ http://blog.empyree.orghttp://david.latapie.name/wordpress/wp-content/uploads/$1
To be com­ple­tely accu­rate, I must say that Rewrite is able to do most, if not all, of what Redi­rect may do, thank to the flags. But that would be ano­ther topic I pre­fer not to speak of here.
  1. Which is a good idea in some contexts; Error code 302.
  2. Error code 301; search engine should update their index (but Google does not).
  3. Don’t use it if you don’t need it: regexp par­sing requires CPU cycles, even when there is no actual regexp to parse.
  4. That is, the resul­ting regexp-powered redi­rec­tions are per­ma­nent (error code 301).
Ils en parlent mais ne me le disent pas, les petits cachot­tiers :