Dotclear

Blog Dotclear » Archives » juillet 2010

2010 juil. 26

Forum

Cela fait bientôt un an que Dotclear 1 n'est plus officiellement supporté. Le temps est venu de réorganiser le forum de support pour, d'une part, mettre aux archives tout ce qui concerne l'ancêtre — pas tout à fait à la retraite cependant, c'est pour ça qu'on va conserver cet héritage —, et d'autre part de supprimer la section Annonces et de créer une nouvelle section Miscellanées qui contiendra un premier forum intitulé "Événements" tout entier réservé au signalement et à l'organisation d'événements autour de Dotclear (Install Party, etc) et un second forum nommé Digressions où vous aurez le loisir, tout en restant courtois et polis[1], de discuter de ce que vous voulez.

En détail, nous aurons donc dans l'ordre, les catégories suivantes :

  • Dotclear 2
  • Non French speaking users
  • Miscellanées
  • Archives

La première catégorie ne changera pas, la seconde comportera toujours deux forums, un pour les anglophones et un pour les autres langues et dialectes. La troisième contiendra donc un forum pour les événements et un pour les digressions et enfin le dernier possédera un forum de la dernière chance pour les afficionados de Dotclear 1 qui auraient encore des soucis avec cet ancêtre et un second forum en lecture seule regroupant toutes les archives concernant Dotclear 1.

L'idée générale, vous l'avez compris, est de pousser gentiment Dotclear 1 au grenier, d'alléger la structure de la page d'accueil du forum et de vous permettre un peu plus de liberté pour causer entre vous (et nous d'ailleurs parce qu'on va pas se gêner pour l'utiliser).

Côté planning, les changements décrits ci-dessus interviendront dans les jours qui viennent et probablement progressivement, dès que le serveur sur lequel il tourne aura retrouvé une seconde jeunesse, un des disques ayant montré quelques signes de faiblesse.

Notes

[1] Nous serons intraitables sur ces points !

2010 juil. 19

Accessibilité et refonte de l'administration

Comme annoncé récemment par Kozlika, la refonte de l'interface admin en cours a notamment des ambitions d'accessibilité, plus précisément des ambitions "ATAG".

Mais de quoi s'agit-il exactement ?

Lire la suite...

2010 juil. 15

Refonte de l'administration, on passe aux travaux pratiques

Au cas où vous n'auriez pas pris de nos nouvelles depuis plusieurs mois, je tiens à vous informer que nous avons entrepris un chantier de longue haleine pour refondre l'ergonomie de l'interface d'administration de Dotclear sous la houlette de Gautier. Comme nous ne faisons pas les choses à moitié (oui, quitte à y mettre le temps qu'il faut…), nous avons également pour objectif de rendre l'interface parfaitement accessible, et même si possible au respect complet du référentiel ATAG, en nous appuyant sur l'expertise de Laurent Denis. Et puis on va donner un petit coup de frais au design, grâce à Hellgy.

Après les enquêtes, leur dépouillement, leur analyse, la synthèse des conclusions, les choix graphiques, la première analyse de l'accessibilité, nous arrivons au stade de la pose de la première pierre. Les plus curieux d'entre vous verront passer des tickets et des commits[1] sur le Trac de développement (branches/sandboxes/ergo). Pour les autres nous vous tiendrons informés régulièrement de l'avancée des travaux ici même.

C'est un chantier complexe car beaucoup d'évolutions ne modifient pas seulement l'organisation de la page mais nécessitent l'ajout de fonctionnalités. La colle et les ciseaux ne vont clairement pas suffire. Ne vous attendez donc pas à la sortie du nouveau bébé avant un petit moment.

Nous nous sommes organisés de la façon suivante :

  • Xave, chef de projet
  • Kozlika, coordinatrice
  • Gautier, dit l'Ergopathe, expert ergonomie
  • Laurent Denis, expert accessibilité
  • Franck, support technique des outils (cambouis Trac, svn, etc.)
  • Lomalarch, Jean-Michel, Osku, annso, Kozlika : adaptations graphiques, gabarits html, javascript et intégration
  • Philippe : big chief de la mise à jour et de la création des aides en ligne

L'équipe de dev plus particulièrement attachée à ce chantier n'est pas encore fixée mais le travail préparatoire de l'équipe qui réalise les maquettes graphiques et les gabarits html de chaque page leur donne largement le temps de s'organiser !

Nous travaillerons en étapes successives, page par page : réalisation de la maquette graphique, validation par Gautier et Laurent, réalisation du gabarit html et préparation des marqueurs css et du javascript, validation par Gautier et Laurent, identification des développements nécessaires.

Quand les pages les plus significatives seront livrées à l'équipe de dev et qu'ils auront une bonne vue d'ensemble, ils travailleront (toujours dans la sandbox "ergo") sur l'appli pour implémenter les nouvelles fonctions et produire le code définitif des pages.

Après on met tout ça dans un shaker et hop, magie magie.

Mais ça ne sera pas fini car on reprendra alors une boucle de tests utilisateurs, des contrôles des pages par Gautier et Laurent, leur correction, et le balai dans les coins.

Bref, ça va nous bouffer un bon moment notre temps libre. Plaignez nous. Ah ben non en fait, ne nous plaignez pas, on est excités comme des puces et impatients de mettre en musique tout le boulot déjà accompli !

Notes

[1] Ayé, je cause geek presque couramment \o/

2010 juil. 12

Nouveautés de dotclear 2.2 : une histoire de compilateurs

S'il y a bien un point qui a été débattu sur dotclear 2 par rapport à dotclear 1, c'est bien la couche intermédiaire qu'il ajoute pour les développeurs de thèmes, à savoir son moteur de templates.

Pour faire son propre thème, plus besoin de coder des pages en PHP, un nouveau langage intermédiaire a été introduit. Et cela, d'abord pour des raisons de souplesse : ce langage est converti en code php, ce dernier étant stocké en cache. Le theme-designer n'a pas à maîtriser PHP pour faire son thème Ensuite, parce qu'empêcher l'utilisation de PHP, c'est aussi empêcher d'insérer du code potentiellement vulnérable.

Dans le principe, c'est plutôt simple : lorsqu'un utilisateur va sur une page du blog, dotclear va chercher le fichier de template correspondant, le transforme en un fichier PHP, et exécute ce dernier. Le fichier PHP est bien entendu placé en cache afin de ne pas repasser systématiquement par la case compilation.

Je vais essayer de décrire les rouages du compilateur/moteur de templates dans ce billet, ainsi que les évolutions qui lui ont été apportées depuis la 2.1.7.

(Attention, contenu très technique inside)

Lire la suite...

2010 juil. 11

Nouveautés de dotclear 2.2 : balises et behaviors

Après une petite pause, suite des évolutions de dotclear 2.2beta :

  • pour les auteurs de thèmes, les nouveautés côté balises de templates
  • pour les auteurs de plugins, la liste des nouveaux behaviors

Changements côté balises de templates

Peu de changements de ce côté, outre quelques réparations de bugs, si ce n'est une évolution de taille : les critères de tri des balises tpl:Comments et tpl:Entries ont été améliorés.

Il est désormais possible de spécifier plusieurs critères de tri.

Exemple : si on souhaite afficher les billets sélectionnés d'abord, et conserver ensuite le tri par date décroissante, il suffit d'utiliser la structure :

<tpl:Entries sortby="selected desc,date desc">
[...]
</tpl:Entries>

Pour des raisons de compatibilité, l'attribut order permet de spécifier le sens de tri à prendre par défaut s'il n'est pas précisé ("asc" ou "desc") Les critères de tri disponibles pour les billets sont :

  • "title" : tri par titre de billet
  • "selected" : tri par billet sélectionné
  • "author" : tri par auteur
  • "date" : tri par date
  • "id" : tri par id de billet
  • "comment" : tri par nombre de commentaires
  • "trackback" : tri par nombre de rétroliens

Les critères de tri disponibles pour les commentaires sont :

  • "author" : tri par auteur
  • "date" : tri par date
  • "id" : tri par id de billet

Par ailleurs, les auteurs de plugins seront ravis d'apprendre que les critères sont extensibles via le behavior templateCustomSortByAlias créé pour l'occasion. Nous y reviendrons dans un prochain billet.

Les behaviors

Ci-dessous, la liste des nouveaux behaviors introduits, en plus de ceux déjà décrits précédemment. La documentation exhaustive de chaque behavior sera disponible sur le site de documentation

Coté administration

L'administration des commentaires bénéficie désormais de ses propres behaviors

  • adminCommentHeaders : enrichit les headers de la page d'édition d'un commentaire.

La liste des commentaires peut maintenant accueillir des actions personnalisées. Les behaviors définis sont similaires à ceux utilisés pour les actions des billets :

  • adminCommentsActionsCombo : enrichit la liste des actions pour les commentaires.
  • adminCommentsActions : ajoute un traitement particulier pour une action donnée
  • adminCommentsActionsContent : permet l'affichage d'une page intermédiaire lors du traitement personnalisé, avant soumission (ex : saisie d'un champ)

Un petit oublié dans les versions précédentes :

  • adminBeforeCommentDelete : action avant la suppression d'un commentaire
  • adminPostsActionsHeaders :

Et un début de behaviors pour la gestion des utilisateurs

  • adminUsersActionsCombo :enrichit la liste des actions pour les utilisateurs.

Au niveau du core

  • coreBeforeCategoryCreate et coreAfterCategoryCreate : appelés avant et après la création d'une catégorie
  • coreBeforeCategoryUpdate et coreAfterCategoryUpdate : appelés avant et après la mise à jour d'une catégorie
  • coreBeforeLogCreate et coreAfterLogCreate : appelés avant et après la création d'un log
  • coreBeforePostCreate et coreAfterPostCreate : appelés avant et après la création d'un billet
  • coreBeforePostUpdate et coreAfterPostUpdate : appelés avant et après la mise à jour d'un billet

Gestionnaire de médias

  • coreMediaConstruct : appelé à l'initialisation de dcMedia

Partie publique

  • templateCustomSortByAlias : ajout des critères de tri personnalisés
  • urlHandlerGetArgsDocument : permet de modifier très tôt l'URL appelée pour y faire des traitements spécifiques

2010 juil. 10

Nouveautés de dotclear 2.2 : les settings

Autre nouveauté sous le capot de dotclear 2.2, le changement dans la gestion des settings. Le sujet a déjà été traité sur la liste du lab dotclear, mais cela ne fait pas de mal d'en rappeler les principes

dotclear 2.1 proposait regrouper les settings en "namespaces", mais ces namespaces n'étaient pas utilisés directement dans la récupération des settings : pour récupérer un setting, il fallait faire appel à $core->blog->settings-><nomdusetting>.

Conséquence intrinsèque, il était impossible de définir 2 settings de même nom dans 2 namespaces différents

dotclear 2.2 ajoute le nom de namespace dans la récupération des settings. Là où en 2.1.7 on utilise $core->blog->settings->themes_path par exemple, en 2.2 on utilisera désormais $core->blog->settings->system->themes_path

L'ancien mécanisme d'appel des settings sera toujours opérationnel en 2.2, mais il est fortement conseillé de faire évoluer les plugins vers les nouvelles méthodes. Pour ce faire :

  • Remplacer tous les appels à $core->blog->settings->setNameSpace() par $core->blog->settings->addNameSpace()
  • Remplacer les appels à $core->blog->settings->setting par des appels à $core->blog->settings->namespace->setting
  • Remplacer les appels à $core->blog->settings->put() par des appels à $core->blog->settings->namespace->put()

Par ailleurs, les nouveaux nommages des settings incluant le nom du namespace, on peut se passer complètement de l'appel à $core->blog->settings->setNameSpace. L'appel à $core->blog->settings->addNameSpace() n'est obligatoire que dans le cas d'ajout d'un setting, si on n'est pas sûr que le namespace existe déjà

A noter, si votre blog est configuré en mode DEBUG, et uniquement dans ce cas (voir à cet effet les lignes à décommenter dans inc/prepend.php) un NOTICE PHP apparaîtra en cas d'utilisation d'un plugin se basant sur les anciens mécanismes.

2010 juil. 9

Nouveautés de dotclear 2.2 : au revoir Metadata, bonjour Tags

Le passage à dotclear 2.2 est l'occasion de remettre à plat le plugin Metadata.

Jusqu'alors, Metadata avait 2 rôles : la gestion des métadonnées, et la gestion des tags. Metadata fera désormais partie intégrante du core de dotclear, sous la forme du fichier inc/core/class.dc.meta.php.

Les parties spécifiques à la gestion des tags ont été déplacées au sein d'un nouveau plugin livré de base, le plugin Tags.

D'autres améliorations ont été apportées :

  • Maintenant qu'il est intégré au core, il n'est plus besoin d'instancier la classe dcMeta à tout-va. Une instance est désormais systématiquement créée dans $core->meta
  • La méthode $core->meta->getMeta est dépréciée. L'ancienne méthode avait pour signature :
public function getMeta($type=null,$limit=null,$meta_id=null,$post_id=null) {

Il faudra désormais compter sur deux nouvelles méthodes :

public function getMetadata($params=array(), $count_only=false){}
public function computeMetaStats($rs) {}

Concrètement, getMeta avait 2 rôles : récupérer des métadonnées, et calculer les statistiques de ces métadonnées (occurences d'apparition, notamment utilisées par les nuages de tags). Ces 2 rôles sont désormais séparés.

getMetadata récupère les métadonnées en fonction de certains critères. Son mécanisme est très similaire à getPosts de $core->blog. $params peut prendre les attributs suivants :

  • meta_type : récupère les métadonnées d'un type donné
  • meta_id : récupère les métadonnées ayant une valeur donnée
  • post_id : récupère les métadonnées d'un billet donné
  • limit : limite le nombre d'entrées récupérées
  • order : spécifie l'ordre de récupération des métadonnées

computeMetaStats enrichit le résultat renvoyé par getMetadata en y insérant les champs statistiques percent et roundpercent.

En pratique, un ancien appel à getMeta de la forme :

$meta = new dcMeta($core);
$rs_meta = $meta->getMeta($type,$limit,$meta_id,$post_id);

sera à modifier en :

$rs_meta = $core->meta->getMetadata(array(
	'meta_type' => $type,
	'meta_id' => $meta_id,
	'post_id' => $post_id,
	'limit' => $limit));

ou, s'il y a des statistiques à récupérer, en :

$rs_meta = $core->meta->computeMetaStats(
	$core->meta->getMetadata(array(
		'meta_type' => $type,
		'meta_id' => $meta_id,
		'post_id' => $post_id,
		'limit' => $limit)));

L'ancienne méthode getMeta est toujours présente pour des raisons de compatibilité avec l'existant.

2010 juil. 8

Nouveautés de dotclear 2.2 : urlHandlers et gestion d'erreurs

Autant le premier article de la série était tout public, autant celui-là est principalement dédié aux développeurs de plugins.

Dotclear 2.2 introduit de nouveaux mécanismes au niveau des urlhandlers, afin de faciliter la vie des plugineurs.

Nouveaux behaviors

De nouveaux behaviors ont été ajoutés à bas niveau dans la gestion des urlHandlers, ils sont au nombre de 3 : urlHandlerBeforeGetData, urlHandlerBeforeSearchCount et urlHandlerGetArgsDocument.

  • urlHandleBeforeGetData est appelé juste avant de servir un fichier de template. Il permet notamment de changer au dernier moment le fichier à livrer.

Exemple pratique basé sur l'astuce de Pep pour servir un template personnalisé pour une catégorie donnée. Le code à produire devient grandement réduit, et évite de réécrire du code du core :

$core->addBehavior('urlHandlerBeforeGetData',array('myBehaviors','beforeGetData'));
class myBehaviors
{
	public static function beforeGetData($_ctx)
	{
		global $core;
		if ($_ctx->current_tpl == "category.html") {
			$tpl = 'category-'.$_ctx->categories->cat_id.'.html';
			if ($core->tpl->getFilePath($tpl)) {
				$_ctx->current_tpl = $tpl;
			}
		}
	}
}

Le handler en question récupère le contexte en paramètre, et il peut le modifier à sa guise. Dans notre cas, si category-<id_cat>.html existe, alors il est servi en lieu et place de category.html

  • urlHandlerBeforeSearchCount permet d'agir avant d'afficher le nombre de résultats dans la page search.html. avec dotclear 2.1.7, il n'était pas possible de modifier la requête de comptage des billets correspondant à la recherche. Le behavior prend en paramètre le tableau de paramètres ($params) qui sera transmis à la requête getPosts
  • urlHandlerGetArgsDocument permet de modifier les arguments avant l'appel du handler. Le behavior prend en paramètre l'urlHandler courant, dont on peut réaffecter les attributs. On peut imaginer par exemple un plugin extraierait des informations supplémentaires à la fin de l'url d'un billet (ex: /fr, /page/xxx si le plugin gère la pagination de billet), et qui restaurerait l'url attendue par l'urlhandler, ni vu, ni connu.

Gestion des pages d'erreur

Avec dotclear 2.1.7, il n'était pas possible de gérer des pages d'erreurs particulières, en dehors d'une modification de la page 404.html : lorsqu'un urlHandler ne savait pas quoi faire de l'url entrée, ou détectait qu'elle correspondait à une page inexistante, il renvoyait vers la dcUrlHandler::p404(), et rien n'était interceptable à ce niveau-là.

doclear 2.2 introduit une gestion des pages d'erreurs, par le biais la méthode "registerError" ajoutée à clearbricks:

class urlHandler
{
	...
	public function registerError($handler){}
	...
}

Désormais, lorsqu'un urlHandler ne sait pas servir une page donnée (ex: page non trouvée, erreur de traitement, ...), plutôt que de rappeler dcUrlHandler::p404, il lui suffit de lever une exception, avec pour code le code d'erreur http voulu. Pour garder une compatibilité avec les anciens plugins, l'ancienne méthode dcUrlHandler::p404 a été modifiée comme suit :

	public static function p404()
	{
		throw new Exception ("Page not found",404);
	}

A ce niveau-là, doclear intercepte l'exception, et déroule les handlers d'erreur un par un (dernier enregistré, premier servi), jusqu'à ce qu'un handler d'erreur lui indique qu'il a traité la page. En dernier recours, c'est le le handler d'erreur par défaut de dotclear qui sert la page, en l'occurrence l'ancien p404.

Au niveau du plugin, pour enregistrer un nouvel errorHandler, ça se passera au niveau du _public.php :

$core->url->registerError(array('myPublicBehaviors','error'));

class myPublicBehaviors
{
	public static function error($args,$type,$e) {
		// exemple de filtrage pour une erreur 404
		if ($e->getCode() == 404) {
			if (iCanHandleErrorAndServePage) {
				// Traitement spécifiques, et renvoi de la page
				return true;
			}
	}
}

Les paramètres transmis au handler sont :

  • $args contient les arguments transmis à l'urlHandler initial
  • $type contient le type d'urlHandler appelé ('post', 'category', 'archive', ...). Il correspond au type enregistré lors de l'appel à $core->url->register
  • $e contient l'exception levée

Si l'errorHandler retourne true, dotclear arrête de parcourir les errorHandlers et considère le traitement comme OK. Sinon il passe par le handler suivant.

Si vous voulez voir une mise en pratique de ce nouveau mécanisme d'errorHandler, allez faire un tour du coté du plugin meuh, qui intercepte les erreurs pour voir dans une table d'alias si un billet n'avait pas l'url donnée auparavant.

2010 juil. 7

Nouveautés de dotclear 2.2 : les changements visibles

Ils sont peu nombreux, mais ils sont quand même là, coté administration. Ce (court) billet les détaille.

Administration : tableau de bord

Le "billet rapide" est désormais repliable :

billet rapide repliable

Administration : billets/commentaires

  • Gmail a fait des émules : il est désormais possible de sélectionner/désélectionner une plage de billets/commentaires. Pour ce faire, cliquez la case à cocher à coté du premier billet, et shift-cliquez sur la case à cocher à coté du dernier billet à sélectionner...
  • Une option "aucune sélection" fait son apparition dans les listes de billets/commentaires
  • Au niveau de l'édition de billets, l'auto-complétion des tags est active : entrez le début d'un tag, et il proposera les tags déjà existants. Cela fonctionne aussi lors de l'ajout de tags à un ensemble de billets.

autocomplétion des tags

  • Coté tags, au niveau des préférences utilisateurs, il est possible de choisir si on souhaite une liste courte (toutefois extensible via un lien "tous les tags"), ou la liste complète des tags dans la barre de droite de l'édition des billets.

Administration : utilisateurs

Le statut admin/super admin des utilisateurs est visualisable dans la liste des utilisateurs, via une "médaille"

statuts des utilisateurs

Du coté des widgets

  • Si le blogroll est vide, le widget "Liens" ne sera pas affiché
  • Le widget tags propose une nouvelle option, permettant de ne pas afficher le lien "tous les tags"

Et plus généralement

  • jquery passe en version 1.4.2, coté public et administration
  • Si le blog est mis hors-ligne, un message d'erreur explicite s'affiche coté public.

2010 juil. 6

Nouveautés de dotclear 2.2

Maintenant que Dotclear 2.2 est sorti, on a bien remarqué que visuellement rien n'est bien différent. Et pourtant, ce sont nombre de corrections de bugs et de nouvelles fonctionnalités qui apparaissent sous le capot.

Je vais donc essayer de dégrossir les nouveautés au travers de quelques billets thématiques. Ils seront pour la plupart destinés aux développeurs de plugins, afin qu'ils puissent pleinement tirer partie des nouvelles fonctionnalités, mais pas qu'eux... Dans le désordre :

Les différents billets seront postés (et ce billet-ci mis à jour) à raison d'un par jour dans les jours qui viennent.

2010 juil. 1

Dotclear 2.2

Voilà, c'est fait : Dotclear 2.2 est disponible !

Vous retrouverez donc en vrac dans cette version un nouvel assistant d'installation, une meilleure gestion des tags dans l'interface d'administration, qui a par ailleurs été rabotée un peu dans les coins où il restait des traces de bugs. En tant qu'utilisateurs, c'est tout ce que vous verrez à première vue. Mais le meilleur est à venir puisque nous avons fait des réglages un peu partout dans le moteur qui ouvrent un gros paquet de nouvelles possibilités aux créateurs de plugins et de thèmes. Par exemple : tout un tas de chouettes nouveaux behaviours, des nouvelles possibilités au niveau des balises template, des gestionnaires d'erreur pouvant être étendus, des blocs de template pouvant être imbriqués, un JQuery mis à jour, ou encore un meilleur système de gestion des réglages internes.

Les plus administrateurs d'entre vous ne sont pas oubliés, puisque cette version offre une meilleure gestion des ressources du serveur, une plus grande ouverture aux réglages inhabituels de PostgreSQL, des possibilités de réglages plus fins et bien entendu, longtemps réclamé, longtemps repoussé pour faire les choses proprement, une compatibilité PHP5.3, pour installer un Dotclear à jour sur vos Linux à jour.

Alors allez-y, installez cette version, amusez-vous. La plupart des plugins ont été mis à jour et les nouvelles versions peuvent être installées grâce à DAInstaller[1], autant dire que vous n'avez que quelques clics à faire pour que tout fonctionne. Rendez-vous sur ces pages dans les prochains jours pour une série d'articles écrits par DSLS sur ce qui a changé sous le capot.

Notes

[1] Lequel a subi plusieurs modifications pour être pleinement compatible avec Dotclear 2.2 et doit de toutes façons être mis à jour manuellement (voir sa fiche) pour voir les plugins à jour.)

Sites map