Nouveautés sur le blogue

luc
7 juin 2011

Drupal et la page /node

Découverte transmise par les gens de Desjardins: sur une installation Drupal de base, la page /node liste tous les noeuds d’un site. Essayez-le sur le site de Drupal: http://www.drupal.org/node. Il y a peut-être utilité, vous serez aimables de me l’indiquer, mais il y a aussi des inconvénients. D’abord, il ne faut pas oublier de prévoir l’affichage de tout noeud dans cette page et de faire l’intégration en conséquence. Ensuite, cela rend visible du contenu dont on voudrait peut-être limiter la diffusion à seulement ceux qui connaissent l’url (par exemple dans le cadre d’un sondage envoyé dans une infolettre à un public ciblé). Dans la plupart des cas, vous préférerez rendre inaccessible la page /node. Pour ce faire, créez un module et mettez-y la fonction suivante pour que la page /node donne un 404:

function monmodule_menu_alter(&$items){
$items['node']['page callback'] = ‘drupal_not_found’;
}





luc
4 juin 2011

Drupal 6: configuration de Secure Pages

J’ai déjà dit que j’aimais le module Secure Pages pour Drupal 6 qui permet d’implanter le https sur un site: http://onfaitduweb.com/drupal-6/le-lien-entre-le-module-secure-pages-et-imce/. Au fil du temps, on se rend compte cependant que son utilité nécessite des… subtilités. Voici un résumé des éléments de configuration nécessaires.

Supposons que l’adresse du site est http://www.mondomaine.com et que vous désirez que certaines pages servies par Drupal soient accessibles exclusivement sur https://secure.mondomaine.com. Je suppose ici que la configuration du serveur pour servir le domaine sécurisé est faite (autrement dit, si vous placez un fichier test.txt à la racine de votre site, vous pouvez le voir en tapant https://secure.mondomaine.com/test.txt).

Il faut d’abord installer et activer le module Secure Pages. J’ai utilisé la version 6.x-1.8.

Dans le fichier sites/default/settings.php, remplacez la variable $base_url par:

$base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']==’on’) ? ‘https://secure.mondomaine.com’ : ‘http://www.mondomaine.com’);

Cela permet d’éviter d’avoir une erreur d’AJAX interdomaine quand on travaille dans l’admin sécurisé et qu’il y a des appels AJAX, par exemple quand on configure une vue ou qu’il y a de l’autocomplétion d’un champ de type nodereference.

Toujours dans le fichier sites/default/settings.php, assurez-vous que le domaine des cookies est valide autant pour le domaine www.mondomaine.com et secure.mondomaine.com, de cette façon:

$cookie_domain = ‘.mondomaine.com’;

Ajoutez aussi cette ligne, qui est optionnelle mais qui peut vous éviter de chercher un problème qui n’existe pas:

$conf['drupal_http_request_fails'] = FALSE;

Sans cette ligne, lorsque vous visionnerez le tableau de bord (dashboard), Drupal vous indiquera que les appels curl ne fonctionnent pas alors qu’ils fonctionnent probablement.

Dans le fichier .htaccess, pour que la variable $cookie_domain configurée précédemment fonctionne, repérez les lignes suivantes et décommentez/adaptez-les:

# To redirect all users to access the site WITH the ‘www.’ prefix,
# (http://example.com/… will be redirected to http://www.example.com/…)
# adapt and uncomment the following:
RewriteCond %{HTTP_HOST} ^mondomaine\.com$ [NC]
RewriteRule ^(.*)$ http://www.mondomaine.com/$1 [L,R=301]

Plus loin dans le fichier, ajoutez ces lignes pour que https://www.mondomaine.com redirige vers http://www.mondomaine.com et que http://secure.mondomaine.com redirige vers https://secure.mondomaine.com:

# Éviter que la version https des pages soit indexée
RewriteCond %{HTTPS} =on
RewriteRule ^robots\.txt$ robots_ssl.txt [L]

# Éviter que les pages soient accessibles avec http://secure
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} !^www.mondomaine.com$ [NC]
RewriteRule ^(.*)$ http://www.mondomaine.com/$1 [L,R=301]

RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !^secure.mondomaine.com$ [NC]
RewriteRule ^(.*)$ https://secure.mondomaine.com/$1 [L,R=301]

Dans le code précédent vous aurez noté qu’on parle de robots.txt et robots_ssl.txt. En général, on veut que le site principal soit indexé par les moteurs de recherche, mais pas les pages sécurisées. Pour ce faire, laissez intact le fichier robots.txt créé par Drupal mais créez un fichier robots_ssl.txt à la racine avec pour seul contenu les lignes suivantes:

User-agent: *
Crawl-delay: 10 # Ne rien indexer du contenu https. Voir le .htaccess pour la redirection vers le présent fichier
Disallow: /

Ouf! Il ne vous reste plus qu’à retourner dans l’admin de Drupal, menu Construction du site -> Secure Pages et entrer la configuration suivante:

Enable Secure Pages: activé

Switch back to http pages when there are no matches: oui Non-secure Base URL: http://www.mondomaine.com

Secure Base URL: https://secure.mondomaine.com

Make secure only the listed pages: oui

Pages:

node/add*
node/*/edit
user/*
admin*
cart/* [si vous utilisez Ubercart]
n’importe-quelle-autre-page

Ignore pages:

*/autocomplete/*
*/ajax/*
*/imagecache/*
imce*

Videz votre cache et vos cookies, et vous êtes en business.





Édouard Duplessis
15 mai 2011

Charger différentes feuilles de style par page sous WordPress

Ok premier article de blog depuis très longtemps et en plus je me lance a faire un petit tutoriel, donc s.v.p. un peu de compassion… :)

Est-ce qu’il vous est déjà arriver de vouloir charger un certain script et/ou feuille de style seulement lorsque une page est demandé. Exemple une page de contact avec une carte interactive google ou une page de complètement différente de votre site et vous voulez avoir une page de css spécialement pour elle.

Rien de plus simple, il existe un hook qui permet de savoir quel page est charger et ce hook est juste avant « wp_head », donc il vous permet de charger votre script avec wp_enqueue_script() ou wp_euqueue_style().

Pour faire ce petit bijoux de code ouvrer votre fichier functions.php de votre thème.

//ajout d'une function dans le hook 'template_redirect'

add_action('template_redirect','custom_stylesheet');

function custom_stylesheet(){

    if(is_front_page()){

        wp_enqueue_style('homestyle', get_stylesheet_directory_uri().'home.css',false, null);

    }else{

        wp_enqueue_style('style', get_stylesheet_uri(),false,null);

    }

}

Voila c’est aussi simple que ça. Si c’est notre front page on charge la feuille de style home.css qui se trouve dans le dossier de notre thème(child) sans dépendance et sans version. Sinon on charge la feuille de style par défault style.css

Et surtout ne jamais faire ça directement dans votre header.php, utiliser toujours wp_enqueue_style() ou wp_enqueue_scrypt() pour charger vos js et css.





luc
2 mai 2011

Le fast-food des élections

Vite, il ne vous reste que quelques heures pour aller voter aux élections fédérales de 2011! Si vous êtes comme moi et que vous avez de la difficulté à faire votre choix, visitez la boussole électorale sur le site de Radio-Canada. J’ai répondu à une dizaine de questions sur divers enjeux d’actualité et la boussole m’a indiqué quel parti se rapprochait le plus de mes convictions. Ça m’a pris à peine 5 minutes!!!

J’ai réellement sauvé du temps car je n’ai pas eu à décortiquer le blabla des sites web de tous les partis politiques. Par contre, c’est comme le fast-food: c’est pratique et délicieux sur le coup, mais à grande échelle on peut le regretter… Dans un monde idéal, j’aurais dû m’informer davantage, prendre le temps de peser le pour et le contre, en discuter avec des proches car de la discussion jaillit la lumière. C’est le propre de la démocratie: c’est à nous de réfléchir.

N’empêche, j’attends avec impatience l’équivalent du « service au volant »: le vote en ligne!





yannick
19 avril 2011

Recherche apache solr pour drupal 6 sous Ubuntu 10.04

J’ai décidé d’écrire ce petit guide pour l’intégration du module de recherche apache solr sous drupal parce que je devais l’intégrer à un projet et que la procédure expliquée à même le module m’a laissé un peu sur mon apétit. En efftet, si on suit le petit guide, tout se passe bien sauf pour un détail : l’installation du serveur apache solr. Je voulais pouvoir l’installer comme un service et non avoir à le partir directement avec la commande java, ce qui est très peu pratique pour un site web « live ». Seul bémol, cela vous prendra un serveur dédié ou un VPS pour povoir procéder à cette installation sinon, bien sûr, sur votre serveur local.

Installation de java

Tout d’abord, il faut avoir une version d’un java jdk pour rouler le serveur apache solr. Personnellement, j’y ai été avec celle de sun, mais vous pouvez (j’imagine !) utiliser la version qui vous convient.

su root
apt-get install sun-java6-jdk

Assurez-vous que tout s’est bien passé en tapant la commande

java -version

Vous devriez voir des informations concernant la version de java nouvellement installée.

Installation et configuration du serveur solr-jetty

apt-get install solr-jetty

À la fin de l’installation, le serveur ne démarrera pas puisqu’il faut aller éditer le fichier de configuration d’abord.

nano /etc/default/jetty

Voici les paramètres de configuration que j’ai utilisé

#mettre a 0 pour que le serveur puisse démarrer
NO_START=0
#vous pouvez le laisser à 8080, mais par défaut, le module drupal utilise 8983
JETTY_PORT=8983
#mettre le chemin de votre java jdk
JAVA_HOME=/usr/lib/jvm/java-6-sun

Démarrez le serveur solr-jetty

/etc/init.d/jetty start

Vérifier que tout fonctionne bien au http://localhost:8983/solr où 8983 est le numero du port que vous avez mis dans la configuration plus haut. Vous devriez arriver sur une page de bienvenue disant Welcome to Solr avec un lien vers l’admin. Si cela ne fonctionne pas, revérifiez vos paramètres de configuration. Vous pouvez vérifier aussi que tous les droits de lecture sont configurés pour tous sur les fichiers sous /etc/solr/conf et /user/share/solr.

Installation du module Apache Solr Search Integration

Si vous êtes rendu ici, vous n’êtes pas très loin de la réussite. Téléchargez le fichier de la version la plus récente pour drupal 6 à l’adresse http://drupal.org/project/apachesolr et extraire le contenu dossier dans le répertoire /sites/all/modules de votre installation drupal. Téléchargez le client php pour apache solr (la révision 22) comme suit :

cd [/chemin/vers/modules]/apachesolr/
svn checkout -r22 http://solr-php-client.googlecode.com/svn/trunk/ SolrPhpClient

Si vous n’avez pas l’application subversion (pour utiliser la commande svn), vous pouvez l’installer avec

apt-get install subversion

ou tout simplement télécharger le client php pour solr à l’adresse suivante http://solr-php-client.googlecode.com/files/SolrPhpClient.r22.2009-11-09.tgz et extraire le dossier sous le répertoire du module apachesolr.

Normalement, vous devriez avoir un dossier SolrPhpClient dans le répertoire du module apachesolr.

note: Si votre projet drupal est dans un système de révision et que vous utilisez la commande svn pour vous appropriez le client php, n’oubliez pas de supprimer les dossiers .svn avant de faire un commit !

Vous pouvez maintenant procéder à l’installation du module via l’interface de drupal (Apache Solr Framework && Apache Solr Search). Rendez vous à la configuration du module (admin/settings/apachesolr/settings) et normalement, vous devriez voir les messages suivant :

Apache Solr: Your site has contacted the Apache Solr server.
Apache Solr PHP Client Library: Correct version "Revision: 22".

Si vous avez un message d’erreur disant que le site ne peut contacter le serveur apache solr, assurez-vous que le port est bien le même que celui entré dans la configuration de jetty. Normalement, localhost pour l’hôte et /solr comme chemin devrait être correct.

Il ne reste plus qu’une seule étape pour que le tout fonctionne : copier les fichiers schema.xml et solrconfig.xml, disponibles dans le répertoire du module apachesolr dans le dossier de configuration de jetty :

cd [/chemin/vers/modules]/apachesolr/
mv /etc/solr/conf/schema.xml /etc/solr/conf/schema.xml.bak
mv /etc/solr/conf/solrconfig.xml /etc/solr/conf/solrconfig.xml.bak
cp schema.xml /etc/solr/conf/schema.xml
cp solrconfig.xml /etc/solr/conf/solrconfig.xml

le serveur devra aussi écrire dans le répertoire /usr/share/solr pour créer les index de recherche. Il faut donc changer le propriétaire du répertoire pour jetty :

chown -R jetty:jetty /usr/share/solr

et redémarrer le serveur solr-jetty

/etc/init.d/jetty stop
/etc/init.d/jetty start

visitez les pages http://localhost:8983/solr/admin/file/?file=schema.xml et http://localhost:8983/solr/admin/file/?file=solrconfig.xml et assurez-vous que l’attribut name des balise <config> et <schema> contient bien drupal-[version]

Et voilà, vous pouvez maintenant pleinement profiter du pouvoir de la recherche avec apache solr sous drupal 6. J’espère que ce guide a pu vous être utile, n’hésitez pas à y laisser des commentaires !

sudo mv /etc/solr/conf/schema.xml /etc/solr/conf/schema.xml.bak