Date de publication: le lundi 4 juin 2007 à 23h57
Dernière modification: par Pascal BOYER le samedi 21 juillet 2007 à 20h01
« Article précédent: Random Anti-Spam Image - Image anti-spam aléatoire
» Article suivant: ezjaxx
ezstats : comment afficher la popularité des articles
Cette extension, développée par Konrad Mazurkiewicz (Pologne), permet d'afficher de différentes façons la popularité, c'est à dire le nombre de fois qu'un objet a été vu, d'un ou de plusieurs nœud de eZ publish:
- popularité d'un nœud,
- popularité d'une liste de nœuds,
- popularité en fonction de la classe d'objet,
- popularité en fonction du temps: mois, année,
- popularité en fonction des utilisateurs,
- etc...
Cette extension fonctionne parfaitement avec les versions 3.3 à 3.8.6 de eZ publish et très certainement avec les versions 3.9 (ceci restant tout de même à confirmer).
ezstats peut être téléchargée sur le site officiel de eZ publish dans la section réservées aux contributions relatives aux plugins de templates: page de ezstats
ezstats : versions de l'extension
A la date de rédaction de cet article, la version de ezstats en téléchargement sur le site ez.no est la version 0.4
Vous pouvez cependant accéder à la version de développement (future version 0.5) directement à partir du serveur svn de Konrad:
Pour récupérer la version de développement, tapez cette commande:
~$ svn co svn://svn.sam24.pl/extensions/stats/trunk
Si vous testez cette version de développement vous pouvez envoyer vos retour d'expérience à l'auteur.
ezstats : installation de l'extension
Une fois l'archive téléchargée, désarchivez-la dans le répertoire extension/ placé à la racine de eZ publish:
~# tar xfv stats_0.4.tar.gz -C extension/
Il vous faudra vraisemblablement devenir super-utilisateur pour avoir les droits d'écriture dans le répertoire extension/
Il faut ensuite que vous modifiez le propriétaire et groupe propriétaire du contenu du répertoire extension/stats/ nouvellement créé. Vous pouvez par exemple prendre pour valeurs celles des deux directives User et Group du fichier de configuration de votre serveur Apache (sous Debian ces deux directives ont par défaut la même valeur www-data) :
~# chown -R www-data:www-data extension/stats/
ezstats : activer l'extension
Pour activer l'extension, vous pouvez soit éditer le fichier de surcharge globale:
settings/override/site.ini.append.php
et ajouter cette ligne à la section [ExtensionSettings] :
ActiveExtensions[]=stats
...auquel cas tous vos siteaccess (dans le cas d'un multisite par exemple) bénéficieront automatiquement de l'extension ezstats.
Ou bien préférer l'activation pour un siteaccess bien précis et auquel cas vous devez ajouter une telle ligne (notez la différence de syntaxe):
ActiveAccessExtensions[]=stats
à la section:
[ExtensionSettings]
du fichier de configuration de surcharge:
site.ini.append.php
de votre siteaccess d'administration.
:
Il n'est pas nécessaire de vider les caches pour que l'extension soit prise en compte.
Créer la nouvelle table ezstats
Avant de pouvoir utiliser votre nouvelle extension, vous devez créer une table qui va recueillir le décompte des clics effectués sur chacun de vos articles/liens.
Pour cela, commencez par vous loguer à votre serveur MySQL (il n'est pas nécessaire d'être root):
~$ mysql -u root -p Enter password: <mot_de_passe_root_de_mysql> mysql>;
Pour lister l'ensemble des bases de données que vous pouvez sélectionner, tapez la requête:
mysql> SHOW DATABASES; +------------------+ | Database | +------------------+ | database_1 | database_2 | database_3 | database_4 | database_5 | ma_base_ezp +------------------+ 6 rows in set (0.06 sec) mysql>
En supposant que votre base de données se nomme ma_base_ezp, vous la sélectionnez avec:
mysql> USE ma_base_ezp; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
Si vous souhaitez afficher l'ensemble des tables constituant votre base de données, utilisez la requête:
mysql> SHOW TABLES; +--------------------------------+ | Tables_in_ez_test | +--------------------------------+ | audio | audiopls | ezapprove_items | ezbasket | ezbinaryfile | ezcollab_group | ezcollab_item | ezcollab_item_group_link | ezcollab_item_message_link | ezcollab_item_participant_link | ezcollab_item_status | ezcollab_notification_rule | ezcollab_profile | ezcollab_simple_message | ezcontent_language | ezcontentbrowsebookmark | ezcontentbrowserecent | ezcontentclass | ezcontentclass_attribute | ezcontentclass_classgroup | ezcontentclassgroup | ezcontentobject | ezcontentobject_attribute | ezcontentobject_link | ezcontentobject_name | ezcontentobject_tree | ezcontentobject_version | ezcurrencydata | ezdiscountrule | ezdiscountsubrule | ezdiscountsubrule_value | ezenumobjectvalue | ezenumvalue | ezforgot_password | ezgeneral_digest_user_settings | ezimage | ezimagefile | ezimagevariation | ezinfocollection | ezinfocollection_attribute | ezkeyword | ezkeyword_attribute_link | ezmedia | ezmessage | ezmodule_run | ezmultipricedata | eznode_assignment | eznotificationcollection | eznotificationcollection_item | eznotificationevent | ezoperation_memento | ezorder | ezorder_item | ezorder_status | ezorder_status_history | ezpackage | ezpaymentobject | ezpdf_export | ezpending_actions | ezpolicy | ezpolicy_limitation | ezpolicy_limitation_value | ezpreferences | ezproductcategory | ezproductcollection | ezproductcollection_item | ezproductcollection_item_opt | ezrole | ezrss_export | ezrss_export_item | ezrss_import | ezsearch_object_word_link | ezsearch_return_count | ezsearch_search_phrase | ezsearch_word | ezsection | ezsession | ezsite_data | ezsubtree_notification_rule | eztipafriend_counter | eztipafriend_request | eztrigger | ezurl | ezurl_object_link | ezurlalias | ezuser | ezuser_accountkey | ezuser_discountrule | ezuser_role | ezuser_setting | ezuservisit | ezvatrule | ezvatrule_product_category | ezvattype | ezview_counter | ezwaituntildatevalue | ezwishlist | ezworkflow | ezworkflow_assign | ezworkflow_event | ezworkflow_group | ezworkflow_group_link | ezworkflow_process +--------------------------------+ 103 rows in set (0.00 sec)
A présent, vous devez créer la nouvelle table ezstats.
Création de la table à la main
Si la version de votre serveur MySQL est inférieure à 4.1 alors créez la table avec l'instruction ci-dessous:
mysql> CREATE TABLE ezstats ( node_id int NOT NULL DEFAULT 0, section_id int NOT NULL DEFAULT 0, remote_address varchar(127) NULL, hit_date timestamp NULL, user_contentobject_id int NULL, entrypage tinyint NULL ); Query OK, 0 rows affected (0.15 sec) mysql>
Par contre, si la version de MySQL est supérieure ou égale à 4.1 alors utilisez cette syntaxe:
CREATE TABLE ezstats ( node_id int NOT NULL DEFAULT 0, object_id int NOT NULL DEFAULT 0, section_id int NOT NULL DEFAULT 0, remote_address varchar(127) NULL, hit_date timestamp NULL DEFAULT CURRENT_TIMESTAMP, user_contentobject_id int NULL, entrypage tinyint NULL );
:
Cette instruction crée des champs qui ne seront pas utilisés par les scripts PHP de la version 0.4 de ezstats mais qui le seront par la prochaine version 0.5
Reste ensuite à créer ces deux index:
mysql> CREATE INDEX IX_node_id ON ezstats(node_id); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>
mysql> CREATE INDEX IX_section_id ON ezstats(node_id); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>
Voilà. La nouvelle table est créée.
Pour quitter MySQL:
mysql> QUIT; Bye
Création de la table avec le script fourni
Placez-vous dans le répertoire contenant le script create_tables.sql:
~# cd extension/stats/doc/
Si vous avez une version de serveur MySQL inférieure à 4.1 alors vous pouvez utiliser le script tel qu'il est fourni. La commande à lancer est la suivante:
mysql -u root -p<mot de passe> <nom_de_la_table> < create_tables.sql
Par contre, si la version de votre serveur MySQL est supérieure ou égale à 4.1 alors, avant de lancer la commande ci-dessus, vous devez remplacer le contenu du fichier create_tables.sql par ceci:
CREATE TABLE ezstats ( node_id int NOT NULL DEFAULT 0, object_id int NOT NULL DEFAULT 0, section_id int NOT NULL DEFAULT 0, remote_address varchar(127) NULL, hit_date timestamp NULL DEFAULT CURRENT_TIMESTAMP, user_contentobject_id int NULL, entrypage tinyint NULL ); GO CREATE INDEX IX_node_id ON ezstats(node_id); GO CREATE INDEX IX_section_id ON ezstats(section_id); GO
ezstats : création du fichier stats.ini
Dans le répertoire extension/stats/settings/ il y a un fichier d'exemple stats.ini.sample. Faites-en une copie:
~# cp -p extension/stats/settings/stats.ini.sample extension/stats/settings/stats.ini
Par défaut, ce fichier contient ces quelques lignes:
[StatsSettings] #Prevent from logging eg. xxx.xxx.xxx.googlebot.com, msnbot.com ExcludeFromLog[]=googlebot ExcludeFromLog[]=msnbot
Ce fichier a pour fonction de lister les robots des moteurs de recherche dont les requêtes ne doivent pas être prises en compte dans le décomptes des visites de vos articles.
Voici une liste de robots fournie par AWStats pour mon site:
MSNBot Googlebot EchO! Yahoo Slurp Alexa (IA Archiver) Nutch Unknown robot (identified by 'bot/' or 'bot-') AskJeeves MSIECrawler Voila W3C Validator W3C jigsaw CSS Validator Asterias Unknown robot (identified by 'spider') findlinks Unknown robot (identified by 'robot') larbin Netcraft
Quelques liens vers des sites spécialisés qui pourront vous apporter une information riche et claire sur la vie des robots, spiders et autres crawlers:
- L'observatoire des robots des moteurs de recherche Google, Yahoo et MSN
- robotstxt.org : base de données des robots du web
ezstats : le template pagelayout.tpl
Pour que chaque clic sur un lien de votre site induise l'ajout d'une ligne dans la nouvelle table ezstats , il faut renseigner le template pagelayout.tpl (ou ses surcharges) de la sorte:
{include uri="design:stats/set_counter.tpl"} {include uri="design:stats/get_counter.tpl"}
La première ligne appelle le fichier:
extension/stats/design/standard/templates/stats/set_counter.tpl
quand la seconde appelle:
extension/stats/design/standard/templates/stats/get_counter.tpl
:
Il est important de ne pas placer ces deux lignes dans un bloc caché ( {cache-block ...}{/cache-block}).
Cependant, il vous faudra vraisemblablement modifier le contenu du template get_counter.tpl car il fait référence à la variable $node qui n'est pas disponible dans le template pagelayout.tpl. Donc soit vous modifiez le template en remplaçant $node.node_id par $module_result.node_id soit vous écrivez directement ces deux lignes dans le template pagelayout.tpl:
{ezstats_count( $module_result.node_id, $module_result.section_id )} Cet article a été vu {ezstats_get_count( hash( 'node_id', $module_result.node_id ) )} fois
Videz les caches puis rechargez la page de votre site public: vous devez être en mesure de voir s'afficher la popularité de la page.
Fonctionnement de la table ezstats
A partir de maintenant, si vous observez le contenu de la table ezstats , vous voyez que chaque clic sur un lien donne lieu à l'ajout d'une ligne dans la table. Et sur la page visitée, le compteur s'incrémente au fur et à mesure des clics.
Donc, si un nœud est visité 7896 alors il y aura 7896 lignes relatives à ce nœud dans la table.
Vous remarquerez également que la table contient dans le champ remote_address l'adresse de la machine qui accède au nœud.
Exclure une machine des statistiques
Si vous hébergez, par exemple, sur votre machine votre site web, vous souhaiterez sûrement exclure votre machine des statistiques. Pour se faire, il vous suffit de repérer la valeur du champ remote_address qui correspond à votre machine puis de recopier l'intégralité de cette valeur dans le tableau du fichier de configuration stats.ini, comme ceci:
ExcludeFromLog[]=www.nomdedomaine.fr
Une fois fait, et sans avoir à vider les caches, vous pouvez contrôler que votre machine n'engendre plus de nouvelles lignes dans la table ezstats .
ezstats : affichage de statistiques complètes
L'extension ezstats propose un template view.tpl qui affiche un tableau relativement complet de la popularité de l'ensemble des objets de votre site.
Interface d'administration
Dans un premier temps, vous pouvez accéder aux statistiques complètes de votre site à travers l'interface d'administration en ajoutant ceci à l'URI:
http://www.monsite.com/index.php/siteaccess_admin/stats/view
...ce qui vous permet d'afficher ceci:
Fig. 1: Vue par défaut des statistiques de popularité des objets du site
L'affichage en fonction du mois ressemble à cela:
Fig. 2: Cumul sur chaque jour du mois de la popularité de l'ensemble des objets du site
La vue qui vraisemblablement vous intéressera le plus est le classement Top100:
Fig. 3: Classement Top 100 de popularité des objets du site
...car comme vous le voyez sur l'image ci-dessus, vous pouvez afficher le classement pour chacune des sections de votre site et/ou pour chaque classe d'objet !
Sur le site public
La description ci-dessous indique la procédure à suivre pour afficher sur le site public l'ensemble des statistiques de popularité de votre site. Certaines informations seront également disponibles: noms des classes d'objets, noms des sections de votre site. Il revient à chacun de juger du bien fondé d'une telle décision...
Pour afficher le tableau de statistiques sur le site public il vous suffit d'ajouter cette ligne à la fin, par exemple, de votre fichier pagelayout.tpl (ou d'une de ses surcharges):
{include uri="design:stats/view.tpl}
Lorsque vous rechargez une page de votre site, vous voyez alors ceci à la suite de votre article:
Fig. 4: Adresse vers laquelle pointe le lien Year:
http://www.linuxorable.fr/ez_publish/index.php/linuxorable/stats/year
Or, par défaut, les utilisateurs anonymes n'ont pas les droits suffisants et nécessaires pour accéder au module stats.
Vous devez donc préalablement accorder au groupe d'utililsateurs auquel vous souhaitez autoriser l'accès à ces statistiques les droits nécessaires.
Si vous souhaitez que tout le monde puisse voir vos statistiques, voici la nouvelle politique de droit que vous devez ajouter au groupe Anonymous:
Fig. 5: Droits devant être assignés au groupe d'utilisateurs Anonymous
Droits à ajouter au groupe d'utilisateurs devant accéder aux statistiques de popularité des objets du site
Les bons droits étant définis, voici ce qui s'affichera alors sur votre site public:
Fig. 6: Affichage Top100 de la popularité des objets du site
Afficher le Top200
Si par hasard le Top100 ne répond pas à vos attentes, vous pouvez bien sûr modifier la valeur 100 pour la remplacer par la valeur de votre choix. Si vous souhaitez afficher la popularité de non pas 100 mais de 200 articles alors vous devez commencer par modifier la valeur 100 de la ligne 74 du fichier extension/stats/modules/stats/ top100.php:
69 $top100 =& $db->arrayQuery( "SELECT ezstats.node_id, COUNT(*) AS hits, ezcontentobject.contentclass_id 70 FROM ezstats, ezcontentobject_tree, ezcontentobject 71 WHERE ezstats.node_id=ezcontentobject_tree.node_id AND 72 ezcontentobject_tree.contentobject_id=ezcontentobject.id AND 73 YEAR(hit_date)=$Year AND MONTH(hit_date)=$Month $where_section $where_class 74 GROUP BY node_id ORDER BY hits DESC LIMIT 100" );
Par exemple:
74 GROUP BY node_id ORDER BY hits DESC LIMIT 200" );
Pour que s'affiche dans l'interface d'administration le lien Top200 à la place de Top100 vous devez modifier le fichier:
extension/stats/design/standard/templates/stats/stats_header.tpl
...comme ceci:
2 <a href={"stats/top100"|ezurl}>{"Top200"|i18n("design/stats")}</a> |
Les deux autres liens Top 200 se trouvent dans le template:
extension/stats/design/standard/templates/stats/top100.tpl
dont il faut modifier les lignes 4 et 50:
4 <h1 class="context-title"> {"Top 200 page statistics"|i18n("design/stats")}: {$monthName} {$year} </h1> .. .. .. ..50 <h2 class="context-title">{"Top 200 pages"|i18n("design/stats")}</h2>
Et vous obtiendrez alors l'affichage suivant:
Fig. 7:
Les modifications sont également valables pour l'affichage du tableau sur le site public
ezstats : aller plus loins
Cet article n'est qu'une introduction à l'utilisation de l'extension ezstats et n'a vocation de présenter que le fonctionnement basique de celle-ci afin de répondre au besoin le plus courant: afficher simplement, comme sur ce site, le nombre de fois qu'un objet a été vu.
Si vous souhaitez personnaliser l'affichage de la popularité de vos objets en fonction de certains critères particuliers, je vous recommande vivement la lecture du fichier:
extension/stats/doc/readme.txt
Ajouter un onglet dans l'interface d'administration
Il serait sympatique de mettre en place dans l'interface d'administration un nouvel onglet sur lequel il suffirait de cliquer pour accéder au tableau de statistique. C'est ce que je vous propose de mettre en œuvre.
Le fichier de surcharge m enu.ini.append.php
La première chose à faire, s'il n'existe pas déjà, est de créer un fichier de configuration de surcharge au fichier menu.ini dans le siteaccess d'administration. Ce fichier doit donc se nommer:
settings/siteaccess/siteaccess_administration/menu.ini.append.php
Ne reste plus alors qu'à définir un nouvel onglet en ajoutant ces ligne dans ce fichier:
<?php /* #?ini charset="iso-8859-1"? ##### Ajouter un nouvel onglet ##### # Le nom qui suit [Topmenu_ sera également renseigné dans la section [TopAdminMenu] # Le nom est totalement libre. Ici j'ai choisi stats. [Topmenu_stats] # Pour NavigationPartIdentifier il faut garder cette structure: ez........navigationpart # Ensuite il faut ajouter ce nom comme clef du tableau Part[] de la section [NavigationPart] NavigationPartIdentifier=ezstatsnavigationpart # Le nom qui fait office de lien et qui s'affichera sur l'onglet: Name=eZ stats # La bulle d'info qui s'affichera lors du survol du lien dans l'onglet: Tooltip=Afficher les statistiques de popularité # On va définir l'URI vers lequel doit pointer le lien dans l'onglet. # La racine de l'URI est implicitement http://www.monsite.com/index.php/siteaccess_admin/ # Il est possible de choisir stats/month ou stats/top100 etc... URL[] URL[default]=stats/view Enabled[] Enabled[default]=false Enabled[browse]=false Enabled[edit]=false Shown[] Shown[default]=false Shown[edit]=false # Par défaut on affiche l'onglet Shown[navigation]=true Shown[browse]=false [TopAdminMenu] # Ici on reprend le même mot que dans [Topmenu_stats] # Il est obligatoire de remplir ce tableau pour que le nom de l'onglet s'affiche. Tabs[]=stats # Cette section ne sert qu'à la traduction éventuelle du nom de l'onglet [NavigationPart] Part[ezstatsnavigationpart]=eZ stats */ ?>
Après avoir rechargé la page de l'interface d'administration, s'affiche ceci:
Fig. 8: Le nouvel onglet eZ stats de l'interface d'administration
Comme vous le voyez sur la capture d'écran ci-dessus, c'est l'onglet Contenus qui est sélectionné alors que c'est sur l'onglet eZ stats que j'ai cliqué. De plus, sous l'onglet Contenus on peut voir le menu Contenus qui appartient au module content et non au module stats.
Le problème vient du fait que, par défaut, le module stats a été défini comme appartenant à:
ezcontentnavigationpart
Il faut donc modifier, dans le fichier de définition du module stats:
extension/stats/modules/stats/module.php
...toutes les occurences du mot ezcontentnavigationpart en ez stats navigationpart. Dès lors, vous verrez ceci:
Le nouvel onglet eZ stats de l'interface d'administration est effectivement sélectionné lorsqu'on clique dessus
Commentaires














