Logiciels libres, linux, le web...

Aller au contenu | Aller au menu | Aller à la recherche

Tag - mysql

Fil des billets

jeudi, avril 22 2010

Comment éliminer les doublons d'une vue avec Drupal (views)

J'ai utilisé une vue (module views) pour afficher une liste de critères. Mais ces critères correspondaient à un champ CCK. Je n'ai donc pas pu utiliser la fonction "distinct", avec le module views cette fonction ne porte que sur le "nid". J'ai recherché des modules me permettant d'utiliser la clause "group by" de la requête, malheureusement les seuls modules que j'ai trouvé ne pouvait pas l'appliquer au champs mais seulement aux arguments de la vue.

J'ai trouvé une astuce grâce au site drupalfr.org, j'ai un peu modifié la solution proposée par le module de Stephen Musgrave. J'ai retiré la condition sur "current_display" car je voulais que le traitement s'effectue systématiquement sur ma vue.

Le module s'appelle "viewsremoveduplicates" il suffit donc de créer les deux fichiers "viewsremoveduplicates.info" et "viewsremoveduplicates.module" dans un dossier "viewsremoveduplicates" placé dans le dossier sites/all/modules de 'linstallation de Drupal.
Voici le contenu des deux fichiers :

viewsremoveduplicates.info :
name = Views Remove Duplicates
description = Removes duplicate nodes. Requires editing the module file to identify the views you want to affect.
package = "Views"
core = 6.x
dependencies = views


viewsremoveduplicates.module :
function viewsremoveduplicates_views_pre_render(&$view)
{
$used_nids = array();

if ($view->name == 'block_event_dpt')
{

foreach ($view->result as $row)
{
if (!in_array($row->node_data_field_event_dpt_field_event_dpt_value , $used_nids))
{
$new_view_result = $row;
$used_nids = $row->node_data_field_event_dpt_field_event_dpt_value ;
}
}

$view->result = $new_view_result;

}
}

J'applique le traitement seulement pour la vue que je désire, dans ce cas elle s'appelle "block_event_dpt".
Le champ que je sélectionne porte le nom "node_data_field_event_dpt_field_event_dpt_value".
Vous devez modifier ces valeurs afin qu'elle conviennent à votre cas.

La prochaine fois je ferais un module sans utiliser views !

mardi, mai 26 2009

Installation de Drupal avec lighttpd / MySql et les URL simplifiées (Clean URLs)

Drupal est un CMS que j'aime bien, vous pouvez trouver une description d'après le site : Drupal est un logiciel qui permet aux individus comme aux communautés d'utilisateurs de publier facilement, de gérer et d'organiser un vaste éventail de contenus sur un site web. Des dizaines de milliers de personnes et d'organisations utilisent Drupal pour propulser des sites de toutes tailles et fonctions.
Site officiel : http://drupal.org/

Installation

Pour installer Drupal, nous allons utiliser lighttpd avec le support de php et mysql.
Vous devez récupérer l'archive sur le site ici. Si c'est nécessaire vous pouvez télécharger l'archive des traductions en français.
Pour installer lighttpd avec le support de php vous pouvez vous aider de ce tutoriel : http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-lighttpd-et-php-sur-debian-4-0-etch
Nous allons créer un utilisateur et une base de donnée pour drupal, vous pouvez naturellement changer les noms. On peut utiliser les commandes suivantes ou un outil tel que phpMyadmin :

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE drupal;
Query OK, 1 row affected (0.00 sec)

mysql> use drupal
Database changed

mysql> grant all on drupal.* to drupaluser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)

Base de données : drupal / nom d'utilisateur : drupaluser / mot de passe : password

Fichiers de l'application

Il faut extraire les fichiers de l'archive de drupal :
# cd /var/www/
# tar -xzvf /dossier/de/l'archive/drupal-6.12.tgz
Ensuite on peut extraire les fichiers de traductions :
# tar -xzvf /dossier/de/l'archive/fr-6.x-1.0.tgz
Donner la permission au serveur web (pour debian www-data) et créer le dossier des fichiers de drupal :
# mv drupal-6.12/ drupal
# mkdir drupal/sites/default/files
# chown -R www-data:www-data drupal/

Ensuite il faut créer le fichier de configuration et lui attribuer les droits nécessaires pour le modifier :
# cp drupal/sites/default/default.settings.php drupal/sites/default/settings.php
# chmod g+w drupal/sites/default/settings.php


Fin de l'installation


Rendez vous ensuite à l'adresse de drupal http://localhost/drupal/ par exemple et suivez les instructions du programme d'installation. Pour la base de données, entrez les valeurs que vous avez choisi lors de sa création (dans cet exemple : drupal / drupaluser / password).


Mise en place des URL simplifiées avec Lighttpd (Clean URLs)

Cette technique pour mettre en place les URL simplifiées est basé sur cet article. L'auteur met en pièce jointe un script qui permet d'adapter les règles de réécriture correctement.
Le script est disponible ici : http://more.zites.net/morefiles/lighty-drupal-lua-conf.tar.gz.

Préparation de lighttpd

Nous allons utiliser le module magnet de lighttpd, pour l'installer on peut entrer les lignes suivantes dans un terminal :
# apt-get install lighttpd-mod-magnet

Une fois le module installé, il faut l'activer à l'aide des commandes suivantes :
# lighty-enable-mod magnet
Available modules: auth cgi fastcgi magnet proxy rrdtool simple-vhost ssi ssl status userdir
Already enabled modules: fastcgi
Enabling magnet: ok
Run /etc/init.d/lighttpd force-reload to enable changes
# /etc/init.d/lighttpd force-reload

Il faut ensuite installer le paquet lua qui va nous permettre d'interpréter le script de l'article cité plus haut. Sous debian vous pouvez utiliser la commande suivante :
# apt-get install lua50

Mise en place des scripts

Nous pouvont maintenant extraire les scripts dans le répertoire de lighttpd (/etc/lighttpd/) :
# tar xvzf lighty-drupal-lua-conf.tar.gz
# chmod +x drupal-lua-conf.sh
Il ne reste plus maintenant plus qu'à ajouter ces lignes au fichier /etc/lighttpd/lighttpd.conf :

 $HTTP["host"] =~ "localhost" {
   include_shell "./drupal-lua-conf.sh drupal"
 }

Le paramètre du script (ici "drupal") correspond au dossier dans lequel drupal est installé.
et après avoir redémarré lighttpd rendez vous dans la section Administrer / Configuration du site / URL simplifiées pour activer le tout.