Date de publication: le Mardi 11 Novembre 2008 à 17h16
Dernière modification: par Pascal BOYER le Mercredi 6 Mai 2009 à 13h37
« Article précédent: eZ Publish : création automatique d'une galerie d'images CSS - Partie I
» Article suivant: eZ Publish : créer un multi-site I
Cet article détaille la mise en oeuvre du lecteur flash créé par Jeroen Wijering.
Ce lecteur a l'avantage d'être libre de droit pour les sites non commerciaux (30 euros par site pour une utilisation commerciale), de proposer le code source, d'être très configurable, et de proposer de nombreuses documentations pour l'adapter à nos besoins.
De plus, ce lecteur contient une liste de lecture (playlist) qu'il est possible d'afficher à droite ou sous le lecteur et pouvant être alimentée par le biais d'un fichier xml. C'est d'ailleurs la solution que j'ai retenue pour l'exemple de cet article.
Cette dernière solution sera l'occasion de visiter quelques solutions techniques intéressantes proposées par eZ Publish.
Ce lecteur est compatible avec les navigateurs suivants:
Les navigateurs et versions cités ci-dessus sont ceux que j'ai effectivement testés.
Je profite de l'occasion pour vous signaler l'existence d'un projet de streaming PHP articulé autour du lecteur JW Desktop Player:
La figure ci-dessous illustre le résultat de la mise en oeuvre du lecteur JW Desktop Player sur un site eZ Publish:
Fig. 1: Exemple de mise en oeuvre du lecteur JW Desktop Player
Pour la suite de l'article, on supposera
Cette classe d'objet est créée afin d'instancier le noeud (la rubrique) qui contiendra les vidéos.
Fig. 2: Description de la classe d'objet rubrique_mediatheque
:
On supposera que le noeud instancié à partir de cette nouvelle classe est situé sous le noeud racine de l'arborescence (de ID=2) et se nomme simplement «Médiathèque».
Cette classe d'objet est créée afin d'instancier les objets vidéos placés sous la rubrique «Médiathèque».
Fig. 3: Description de la classe d'objet flash_video
Description des attributs de la classe flash_video:
Pour le lecteur présenté par cet article, je me suis contenté de prendre un des skins proposé par la page SetupWizard. Il s'agit de l'exemple 6 flvplayer with en rss playlist dont j'ai configuré les options proposées sur cette même page.
Cependant vous pouvez tout à fait créer votre propre skin où en choisir un parmi tous ceux proposés sur cette page.
Tout en conservant le skin que j'ai retenu pour l'exemple de cet article, vous pouvez très facilement en changer les couleurs pour les adapter à votre site.
:
Le choix du lecteur s'est porté sur l'exemple N°6 car il est nativement prévu pour lire une liste de lecture au format xml que je suis en mesure de produire automatiquement et contenant exactement les informations que je souhaite.
Après avoir créé la rubrique Médiathèque et les objets vidéo qu'elle contient, voici à quoi ressemble le menu Contenus de l'interface d'administration:
Fig. 4: Arborescence du menu Contenus de l'interface d'administration
Par défaut, eZ Publish utilise le template design/standard/templates/node/view/full.tpl pour afficher les objets instanciés par de nouvelles classes.
C'est donc ce template qui sera utilisé, par défaut, pour l'affichage du noeud Médiathèque.
Ce template ne convenant pas à notre cas particulier, nous allons commencer par créer une surcharge.
Au tout début du fichier de surcharge settings/siteaccess/plain_site/override.ini.append.php, placez les lignes suivantes:
[full_rubrique_mediatheque] Source=node/view/full.tpl MatchFile=full/dossierMediatheque.tpl Subdir=templates Match[class_identifier]=rubrique_mediatheque
Puis créez, dans le répertoire design/plain_site/override/templates/full/ le template dossierMediatheque.tpl:
Vous trouverez ci-après les lignes nécessaires et suffisantes pour afficher le lecteur JW Desktop Player:
{def $liste_videos=fetch('content','list_count',hash( parent_node_id, $node.node_id,
'class_filter_type', 'include',
'class_filter_array', array( 'video_flash')))}
<div class="content-view-full">
<div class="class-folder">
{if gt($liste_videos,0)}
<div class="ombrePlayer">
<div id="player"></div>{* INDISPENSABLE POUR L'AFFICHAGE DU PLAYER *}
{literal}
<script type="text/javascript" src={/literal}{'flashPlayer/swfobject.js'|ezdesign}{literal}></script>
<script type="text/javascript">
var so = new SWFObject('{/literal}{'flashPlayer/playerListe.swf'|ezdesign(no)}{literal}','mpl','700','480','9');
so.addParam('allowscriptaccess','always');
so.addParam('allowfullscreen','true');
so.addParam('flashvars','file={/literal}{'flashPlayer/liste.xml'|ezdesign(no)}{literal}&backcolor=0B3257&frontcolor=98A7B7&lightcolor=b2c2b9&screencolor=000000&playlistsize=181&streamer=lighttpd&playlist=bottom&autostart=false');
so.write('player');
</script>
{/literal}
</div>{* ombrePlayer *}
{/if}
</div>
</div>
Le fichier swfobject.js (placé dans le répertoire design/plain_site/flashPlayer/) est téléchargeable à partir de cet URI: http://content.longtailvideo.com/files/swfobject.js
Comme je l'ai déjà indiqué précédemment, le lecteur utilisé pour l'exemple de cet article est celui employé par l'exemple 6 de la page Setup Wizard.
Pour télécharger le lecteur, placez-vous dans le répertoire design/plain_site/flashPlayer/ puis lancez la commande suivante:
wget http://content.longtailvideo.com/files/player.swf -O playerListe.swf
Le modèle de fichier xml à produire est donné par le code source de la page suivante: mrss.xml
Pour créer ce fichier, nous allons utiliser le module layout.
Comme l'indique la documentation, le module layout permet de forcer l'utilisation d'un template de mise en page autre que celui utilisé par défaut, à savoir pagelayout.tpl.
La définition de ce nouveau template de mise en page se fait à partir du fichier de configuration de surcharge suivant:
settings/siteaccess/plain_site/layout.ini.append.php
Sont contenu est le suivant:
<?php ini charset="iso-8859-1"? # Le nom de la rubrique, ici xml, devra etre repris dans l'URI de type /layout/set/xml/content/view/ [xml] PageLayout=videoplayer_pagelayout.tpl
Ceci indique au système que l'utilisation d'un URI de la forme http://monsite.com/layout/set/xml/content/view/template_de_vue/ID_du_noeud doit utiliser le template de mise en page videoplayer_pagelayout.tpl.
Afin de reproduire le code source de la page mrss.xml, voici ce que doit contenir le template videoplayer_pagelayout.tpl placé dans design/plain_site/templates/:
<!-- CE FICHIER EST UTILISE EN RAISON DE CE QUI EST INDIQUE DANS settings/siteaccess/plain_site/layout.ini.append.php -->
<rss version="2.0" xmlns:media="http://luxpopuli.fr/">
<channel>
<title>Example media RSS playlist for the JW Player</title>
<link>http://www.jeroenwijering.com</link>
{$module_result.content}
</channel>
</rss>
<!--DEBUG_REPORT-->
Le tableau $module_result contient le résultat de l'exécution du couple module/vue.
Dans l'URI http://monsite.com/layout/set/xml/content/view/template_de_vue/ID_du_noeud, le nom du template de vue (voir ci-après) est défini par /template_de_vue/. Quant au ID_du_noeud qui termine l'URI il vaut bien sûr celui du noeud Médiathèque que vous avez précédemment créé.
Placé dans le répertoire design/plain_site/templates/node/view/, ce template contient le code suivant:
{let $videos=fetch_alias(children,hash( 'parent_node_id', $node.node_id,
'sort_by', array('priority',true()),
'class_filter_type', 'include',
'class_filter_array', array( 'video_flash')),
'depth', 1)}
{foreach $videos as $video}
<item>
<title>{$video.data_map.title.content}</title>
<link>http://linuxorable.fr</link>
<description>{$video.data_map.description.content.input.input_xml}</description>
<media:content url={concat('"http://',ezsys('hostname'),$video.data_map.content.content.filepath|ezroot(no),'"')} type="video/x-flv" />
<media:thumbnail url={concat('"http://',ezsys('hostname'),$video.data_map.thumbnail.content[vignettePlaylist].full_path|ezroot(no),'"')} />
</item>
{/foreach}Ce fichier sera placé, par exemple, dans le répertoire design/plain_site/flashPlayer/
Placez-vous dans ce répertoire et lancez la commande suivante:
wget http://monsite.com/index.php/plain_site/layout/set/xml/content/view/videolist/226 -O liste.xml
--2008-11-12 20:06:05-- http://linuxorable.fr/index.php/plain_site/layout/set/xml/content/view/videolist/226 Résolution de linuxorable.fr... 88.180.9.115 Connexion vers linuxorable.fr|88.180.9.115|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 4870 (4,8K) [text/html] Saving to: `liste.xml' 100%[============================================>] 4 870 --.-K/s in 0s 2008-11-12 20:06:06 (709 MB/s) - « liste.xml » sauvegardé [4870/4870]
...où:
Ce fichier une fois créé, vous pouvez afficher votre player sur votre site.
Si dans le template dossierMediatheque.tpl on indique directement l'URI du fichier liste.xml:
so.addParam('flashvars','file={/literal}http://monsite.com/index.php/plain_site/layout/set/xml/content/view/videolist/226{literal}........
alors on obtient le message d'erreur suivant lors de l'affichage du lecteur:
Fig. 5: Erreur #2048: le fichier liste.xml n'est pas trouvé
...et la liste est vide.
Pour contourner le problème, il suffit d'utiliser une tâche cron qui lancera un exécutable tous les quarts d'heures ou toutes les demi-heures.
Voici un exemple de contenu du fichier creationPlaylist.txt:
#!/bin/bash cd /usr/local/www/design/plain_site/flashPlayer/ rm -f liste*.xml wget http://monsite.com/index.php/plain_site/layout/set/xml/content/view/videolist/226 -O liste.xml chown www-data:www-data liste.xml
Explications:
Le fichier creationPlaylist.txt devant être exécutable, lancer la commande suivante:
chmod +x creationPlaylist.txt
En tant que root, éditer la liste des tâches cron liées à l'utilisateur www-data:
crontab -u www-data -e
...puis ajouter cette ligne au fichier (vous êtes alors dans un environnement Vim):
*/20 * * * * /usr/local/www/monsite.com/creationPlaylist.txt
Cette ligne indique au système d'exécuter le script creationPlaylist.txt toutes les 20 minutes.
:
Le fichier xml ne sera pas valide si le système de débugage est activé car alors le code source des lignes de débugage seront incluses dans le code source du fichier xml.
Commentaires