Niouzes

< Octobre 2021 >
Lu Ma Me Je Ve Sa Di
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Citation

Attention

Certains des exemples que nous fournissons ci-dessous ne sont pas complets. D'emblée, nous nous en excusons, bien sûr. Mais pourquoi diable sont-ils incomplets ?

Ils sont incomplets parce que nous y travaillons en ce moment et que plutôt que de vous faire patienter jusqu'à ce qu'ils soient tous terminés, nous avons préféré vous les livrer dans l'état où ils se trouvent pour que vous puissiez vous faire une idée de ce qu'ils illustrent.

Au fur et à mesure de notre avancement, nous ferons les mises à jour idoines. Nous espérons résorber notre retard au plus vite.

2014-08-06 à 17:05:56 par Patrick Boens

Table Of Contents

  1. Template with patterns, Swipe Simply, cahing pages for bots, … (06/08/2014)
  2. Gestion de redirections, Accept-Language, extrapolation de la langue et du pays, LSContainer et le génome, LSInput et les gènes, utilisation de LSCacheDir, création de propriétés dynamiques de LSPage dans le géorama, … (11/10/2013)
  3. Statistiques d'accès, Site Manager, prefetch, prerender, File Explorer, interactions Ajax … (17/06/2013)
  4. LSTag, LSContentsDatetime, LSContentsCountdown, LSContentsStopwatch, threshold et score, configuration vhosts Apache, génération automatique, LSVStrings.js, LSVDates.js, tracing sur XML des îles, Free User Input Zones, multiple credentials, cookie de dernière visite, LSInput et datalist (10/04/2013)
  5. Tour d'horizon des filtres (23/09/2013)
  6. Messages de service (07/01/2014)
  7. Accès aux propriétés des îles, halt.sem, cookies positionnés dans les îles, filtre 'browsertype', contenus alternatifs, expressions PHP sur les href, gestion de l'expiration, filtre de visite, ... (22/09/2013)
  8. Messages de service, ... (30/10/2012)
  9. Config Apache, LSInput, LSForm, ... (13/03/2013)
  10. LSContentsBooking, Browser Danger Rating, User Agent vides (non spécifiés), filtres sur les paramètres, LSBrowser, ... (11/06/2013)
  11. LSTag('img'), auto pages, nouveaux filtres, audio/video, ... (02/11/2013)
  12. LSGeo, LSFootnotes, LSSourceFile, LSPublication, onfail avec codes de retour HTTP (301, 302, ...), ... (27/06/2013)
  13. LSCache, microformat (lupdate), multicontent, LSContentsTagCloud, LSContentsImageGallery, HTML5 (input zones), ... (15/09/2013)
  14. Check Spamhaus, vos settings dans le géorama, LSContentsMicronews, Switch dans le géorama, LSCursor: des records dans les records, ... (04/12/2012)
  15. Campagnes de pub, TODO list (04/12/2012)
  16. Debugging de page, LSTimeline, le fichier de géorama, LSTag, Glossaire IT, Named colors, Codes langue, ... (23/03/2013)
  17. LSCursor: une revue complète de la classe (12/03/2013)
  18. LSForm, LSInput, … (28/01/2013)
  19. LSContentsBusinessCoordinates, redirection de pages, LSTwitterPost, LSContentsTwitterFollowers, LSContentsShare, calendrier, LSContentsContactForm, LSContentsReview et LSReview, droits sur une page, URLs canoniques, LSPaymentOptions et LSContentsPaymentOptions, Offres d'emploi, LSContentsImageTransition, ... (20/09/2013)
  20. Galerie avec vignettes, RSS, partage d'offres d'emploi, partage de citations, diaporama dewslider, horloge flash, footnotes, ... (01/10/2012)
  21. îles préfixées de texte standard, le paramètre title, le paramètre heading, le paramètre text, le paramètre xsl, LSRegionSubtag, Language Switchers, LSFormEnroll, LSContentsLegal, sitemap, substitution de propriétés, LSSourceFile et LSContentsSourceFile, LSContentsComments, LSContentsCharter, ... (05/11/2013)
  22. LSContentsLoginLogoff, Utilisation de && dans les conditions des îles, LSWidgetOpeningHours et LSContentsBusinessOpeningHours, inclusion de snippets, image bouton de login/logoff, LSContentsBusinessCoordinates, commentaires dans les îles, doctypes, LSImageTrans, calcul de dates, LSWidgetEmailForm, LSContentsMedia, LSContentsIFrame, onload et onunload d'une page, Page settings, ... (22/09/2013)
  23. Dates et heures de publication et/ou d'expiration, PHP expressions, Blocs XHTML avant et après une île, suite de pages, îles valables par domaine, substitutions, envoyer des fichiers au serveur, templates dynamiques, contenus distants, contenus générés en Java, LSCalculator, Gérer des signets (bookmarks), Pages conditionnelles, îles conditionnelles, désactivations, LSContentsMedia, taille du géorama, partager une page entre sites, LSXHtmlImg, île dans la section …, textes latins, Dublin Core, Utilisation de caches, corrections automatiques, In-Place Editing, LSContentsCitation (03/11/2013)
f

Dates et heures de publication et/ou d'expiration 2009-06-30

Si votre contenu n'est valable qu'à partir d'une certaine date et heure, vous pouvez lui adjoindre des caractéristiques de publication. Dans l'exemple suivant, l'île ne sera affichée qu'au 1er janvier 2009, à partir de 3 heures du matin :

<Island id="promo" active="yes" pubdate="20090101030000">
    <param name="storage">/islands/promo.php</param>
</Island>

Si par contre ce contenu n'était plus valable à partir d'une autre date et heure, il suffirait d'adjoindre à l'île un attribut expiry. Dans l'exemple qui suit, l'île n'est plus valable à partir du 31 janvier 2009, à 23:59:59 :

<Island id="promo" active="yes" expiry="20090131235959">
    <param name="storage">/islands/promo.php</param>
</Island>

Il est possible de mêler les deux attributs comme le démontre l'exemple suivant :

<Island id="promo" active="yes" 
    pubdate="20090101030000" expiry="20090131235959">
    <param name="storage">/islands/promo.php</param>
</Island>

Expressions PHP dans les dates et heures de publication et/ou d'expiration 2009-06-30

Il est aussi possible de mentionner des expressions PHP pour les attributs de publication et d'expiration. L'exemple qui suit illustre bien la manière qu'a Vae Soli! de traiter ces infos :

<Island id="promo" active="yes" 
    pubdate=".php= return '20090701000000';">
    <param name="storage">/islands/promo.php</param>
</Island>

Pour l'exemple nous avons pris quelque chose de très simple mais vous pouvez bien évidemment appeler une de vos propres fonctions PHP qui prend en considération une série de paramètres pour finalement indiquer la date et heure de publication. Le même mécanisme existe pour la date et heure d'expiration.

Blocs XHTML avant et après une île 2009-06-09

Vous pourriez avoir besoin d'écrire du code XHTML avant l'inclusion d'une île et après son inclusion. C'était déjà possible avec l'utilisation des blocs pre-rendering-block et post-rendering-block mais c'est aujourd'hui encore plus facile avec les paramètres pre-xhtml et post-xhtml comme le démontre l'exemple suivant :

<Archipelago id="sidebar"       active="yes" category="sidebar">
    <Island id="citation" active="yes" class="LSContentsCitation">
        <param name="storage">/citations/citations.xml</param>
        <param name="keyword"></param>
        <param name="recno">random</param>
        <param name="pre-xhtml"><![CDATA[<div id="MyCitations">]]></param>
        <param name="post-xhtml"><![CDATA[</div>]]></param>
    </Island>
</Archipelago>

Page qui s'inscrit dans une suite de pages 2010-03-16

La balise <link> possède un attribut qui est le plus souvent ignoré : rel. Un autre attribut, un attribut miroir dirions-nous, existe également mais il est encore plus ignoré que ne l'est l'attribut rel. Il s'agit de l'attribut rev !

Pourtant, l'attribut rel possède une réelle valeur qui peut influencer favorablement le classement d'une page dans les moteurs de recherche et également aider ceux-ci à rassembler du contenu qui est, d'une manière ou d'une autre, lié.

Ainsi, l'écriture d'un didacticiel sur le web est un parfait candidat à l'utilisation de la balise <link> et à son attribut rel. La page courante peut dès lors être rattachée à la page précédente et à la page suivante comme le montre l'exemple qui suit :

<head>
    …
    <title>Chapitre 5</title>
    <link rel="prev" href="/chapitre4.php" />
    <link rel="next" href="/chapitre6.php" />
</head>

De cette manière, les moteurs de recherche (et même les navigateurs) peuvent proposer une navigation intelligente améliorant sensiblement le confort de lecture. À cet avantage s'ajoute un ordonnancement des pages permettant de mieux les regrouper.

Revenant à l'exemple du didacticiel, il est intéressant de mentionner à tout moment la première page … ce qui se fera de la manière suivante :

<head>
    …
    <title>Chapitre 5</title>
    <link rel="start" href="/intro.php" />
    <link rel="prev"  href="/chapitre4.php" />
    <link rel="next"  href="/chapitre6.php" />
</head>

Ces trois possibilités vous sont offertes dans Vae Soli!, version 2.0.0009, sous les paramètres LSStartPage, LSPreviousPage et LSNextPage.

Ces fonctionnalités sont loin d'être des broutilles car elles autorisent un confort de navigation accru bien réel. Ainsi le navigateur Opera vous permet de sauter d'une page à l'autre directement. Par exemple, imaginons que nous soyons sur la page Paneb au pays des couleurs — Partie 1, alors l'enfoncement de la barre d'espace (avec Opera !) fait défiler la page. Arrivé au bout de la page, Opera nous fait automatiquement passer à la page suivante, soit Paneb au pays des couleurs — Partie 2 et ainsi de suite jusqu'à la fin de la série de pages liées. Voilà qui est éminemment pratique.

La mise en œuvre de ces paramètres se fait directement dans le géorama comme nous le montrons ci-dessous :

<Land>
    <Defaults>
        <Settings>
            <LSStartPage><![CDATA[http://www.latosensu.be/start.html]]></LSStartPage>
            <LSPreviousPage><![CDATA[http://www.latosensu.be/page1.html]]></LSPreviousPage>
            <LSNextPage><![CDATA[http://www.latosensu.be/page2.html]]></LSNextPage>
        </Settings>
    </Defaults>
    …
</Land>

Vous pouvez également modifier ces propriétés directement dans la page. Voici par exemple une modification entreprise dans le contenu d'une île qui représente la partie 2 d'une suite de pages liées :

<?php $this->szStartPage    = $this->Self;
      $this->szPreviousPage = $this->Self . '?part=1'; 
      $this->szNextPage     = $this->Self . '?part=3';
?>

Îles valables par domaine 2009-04-29

Lorsque plusieurs domaines sont résolus vers le même site, il est possible de n'afficher une île que si un domaine précis est visité. Par exemple, vous pourriez décider de n'afficher un contenu publicitaire que sur la version commerciale d'un site.

Comment vous y prendre ? Tout simplement en mentionnant un attribut landscape sur l'île comme dans l'exemple suivant :

<Archipelago id="sidebar" active="yes" category="sidebar">
    <xi:include href="sidebar.xml" />
    <Island id="citation" active="yes"
            landscape="www.vaesoli.org"
            class="LSContentsCitation">
        <param name="storage">/citations/citations.xml</param>
        <param name="recno">random</param>
    </Island>
    <Island id="clock" active="yes"
            landscape="www.vaesoli.com"
            class="LSContentsMedia">
        <param name="mediatype">swf</param>
        <param name="comment">This will be brought in the XHTML output</param>
        <param name="src">http://www.latosensu.be/media/clock.swf</param>
        <param name="autoplay">true</param>
        <param name="loop">true</param>
        <param name="width">200</param>
        <param name="height">200</param>
        <param name="showcontrols">false</param>
        <param name="embed">true</param>
        <param name="scale">scale"</param>
        <param name="wmode">opaque</param>
    </Island>
</Archipelago>

La première île, citation, ne sera affichée que pour le domaine www.vaesoli.org tandis que la seconde île, clock, sera affichée quant à elle pour le domaine www.vaesoli.com.

Créer des substitutions 2009-04-27

Juste avant que la page ne soit rendue, Vae Soli! est capable de transformer toute une série de mots par d'autres grâce au jeu des « substitutions ».

Ces dernières sont en fait une des fonctionnalités les plus étonnantes de Vae Soli!. Pour que ce soit possible, il faut charger un fichier de substitutions. Cela se fait en mentionnant ledit fichier dans le géorama :

<Georama xmlns:xi="http://www.w3.org/2001/XInclude" version="3.0">
    …
    <Pangaea>
        <Defaults>
            <Settings>
                <LSSubstitutions><![CDATA[/substitutions.xml]]></LSSubstitutions>
                …
            </Settings>
        </Defaults>
    </Pangea>
</Georama>

Par exemple, sur le site de Vae Soli!, chaque fois que « Vae Soli! » est écrit, on fait jouer une substitution pour nous éviter d'écrire le mot en entier. On a en fait écrit "{{{VAE}}}".

Un fichier de substitutions est un fichier XML au format semblable à celui-ci :

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
    <Data key="{{{VAE}}}" active="yes" editable="yes">
        <Value><![CDATA[Vae&#160;Soli!]]></Value>
    </Data>

    <Data key="{{{LS}}}" active="yes" editable="yes">
        <Value><![CDATA[Lato Sensu Management]]></Value>
    </Data>
    …
</Dictionary>

Substitutions en fonction de la langue de la page

Vae Soli! prévoir également des substitutions variables en fonction de la langue de la page. C'est l'intérêt de l'attribut lang d'une substitution :

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
  <Data key="{{{ADRESSE}}}" active="yes" editable="yes">
    <Value lang="fr"><![CDATA[Rue Amédé Bracke, 9 - 1950 Crainhem]]></Value>
    <Value lang="nl"><![CDATA[Amédé Brackestraat, 9 - 1950 Kraainem]]></Value>
  </Data>
  …
</Dictionary>

Substitutions à activer à une certaine date et heure

Il est même possible de prévoir des substitutions qui ne sont valables qu'à partir d'une certaine date :

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
  <Data key="{{{ADRESSE}}}" active="yes" editable="yes">
    <Value pubdate="20090615"><![CDATA[Rue Amédé Bracke, 9 - 1950 Crainhem]]></Value>
  </Data>
  …
</Dictionary>

Substitutions avec expiration

Semblable à la date de publication d'une substitution, on trouve la date et heure d'expiration :

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
  <Data key="{{{ADRESSE}}}" active="yes" editable="yes">
    <Value expiry="20081231"><![CDATA[Rue Amédé Bracke, 9 - 1950 Crainhem]]></Value>
  </Data>
  …
</Dictionary>

Substitutions avec publication et expiration

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
  <Data key="{{{ADRESSE}}}" active="yes" editable="yes">
    <Value expiry="20081231"><![CDATA[Rue Amédé Bracke, 9 - 1950 Kraainem]]></Value>
    <Value pubdate="20090101"><![CDATA[Avenue des fleurs, 44 - 1000 Bruxelles]]></Value>
  </Data>
  …
</Dictionary>

Substitutions par domaine 2009-04-27

Vous pouvez décider de l'activation d'une substitution en fonction du domaine sur lequel le visiteur surfe. Par exemple, plusieurs domaines peuvent être résolus par le même site (e.g. www.vaesoli.net, www.vaesoli.org et www.vaesoli.com). Dans ce cas, certaines substitutions doivent être traitées d'une manière ou d'une autre.

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
    <Data key="{{{COMPANY}}}" active="yes" editable="yes">
        <Value landscape="www.domain.com"><![CDATA[Ma belle entreprise]]></Value>
        <Value landscape="www.domain.org"><![CDATA[Ma belle société]]></Value>
    </Data>
    …
</Dictionary>

Substitutions par adresse IP 2012-03-15

Depuis l'opus "4.5.0100"

Les substitutions peuvent également être applicables sur une adresse IP bien particulière. C'est bien pratique lorsque vous testez un site en mode local par rapport à un mode serveur par exemple.

<?xml version="1.0" encoding="utf-8"?>
<Dictionary active="yes">
    <Data key="{my-message}" active="yes" editable="yes">
        <Value ip="127.0.0.1"><![CDATA[Hello, me!]]></Value>
        <Value><![CDATA[Hello, you!]]></Value>
    </Data>
    …
</Dictionary>

Eviter l'application des substitutions 2010-03-27

Depuis l'opus "2.5.0018"

Il est possible de ne pas appliquer les substitutions via la propriété MustSubstitute. Cette propriété est mise à true par défaut mais vous pouvez très bien, par code, la positionner à false et éviter ainsi que les substitutions prennent place lors de la fin du rendu de la page. C'est particulièrement utile en cas de debugging par exemple.

Code extrait du storage d'une île
---------------------------------

$this->MustSubstitute = false;  /* $this ... représentant la page */

Envoyer des fichiers au serveur 2009-04-09

Désormais, l'édition d'une île vous permet également d'envoyer un fichier au serveur. Vous ne devez rien faire : tout est automatique !

Cette fonctionnalité sera disponible avec la mise à disposition de la version 2.0.0009 de Vae Soli!.

Voilà cette fonctionnalité en œuvre sur le site de Lato Sensu Management:

Illustration du téléchargement de fichier avec Vae Soli! 2.0.0009

Utiliser des templates dynamiques 2009-03-24

Désormais, il est possible de mentionner le template à appliquer de manière dynamique. Qu'est-ce que cela veut dire ? Et bien, plutôt que de mentionner le nom du template de manière statique, on mentionne le nom d'une fonction PHP dont l'objet est de retourner le template qu'il faut utiliser. La fonction peut bien entendu examiner un tas de conditions préalables et rendre son résultat sur base de multiples tests. Une des applications pratiques immédiates est de pouvoir appliquer un template bien précis en fonction du navigateur du client  : particulièrement utile pour rendre, par exemple, des résultats différents sur des appareils mobiles comme les Blackberry, les iPhones et autres  !

Au lieu de …

<LSTemplate><![CDATA[/template/calife.html]]></LSTemplate>

Vous pouvez avoir …

<LSTemplate><![CDATA[.php= return WhichTemplate();]]></LSTemplate>

La fonction WhichTemplate() fournissant le résultat et devant, bien entendu, être accessible dans un des fichiers de procédures/routines indiqués dans :

<LSSetProceduresTo><![CDATA[/code/routines.php]]></LSSetProceduresTo>

Utiliser des contenus distants 2009-03-13

La classe LSContents vous permet d'utiliser des contenus distants, c'est-à-dire des contenus ne se trouvant pas nécessairement sur votre propre site. Ah oui ? Oui … et c'est tout simple :

<Island id="remote" active="yes" class="LSContents">
    <param name="storage">http://www.monsite.com/mon-contenu-distant/</param>
</Island>

Cacher un contenu distant 2009-03-13

L'utilisation d'un cache peut s'avérer un élément extrêmement précieux sur les contenus distants. Cela évite de nombreux va et vient entre votre site et le serveur déservant le site distant auquel vous tentez d'avoir accès.

<Island id="remote" active="yes" cacheTTL="3600" class="LSContents">
    <param name="storage">http://www.monsite.com/mon-contenu-distant/</param>
</Island>

En cela, le cache ne fonctionne pas autrement que sur une île dont le contenu est local.

Integration de contenus générés en Java 2009-03-13

Le contenu qui est intégré dans chaque île ne doit pas nécessairement être généré en PHP. Tout langage web fera l'affaire : Java, asp, …

<Island id="foreign" active="yes" class="LSContents">
    <param name="storage">/islands/myscript.jsp</param>
</Island>

Afficher une calculette 2009-03-09

Avec la version 2.0.0004 de Vae Soli!, il est désormais possible de disposer d'une calculette. L'affichage de la calculette est réalisé par la classe LSCalculator. La présentation de la calculette est laissée aux soins d'instructions CSS … que vous pouvez bien sûr personnaliser.

La gestion des boutons de la calculette est réalisée grâce à un javascript qui implémente une petite classe Calc et qui est disponible dans le script LSVCalculator.js. Pour que la calculette fonctionne, il faut donc que les javascipt soient activés !

Pour en faciliter la mise en œuvre, nous avons également conçu une classe qui implémente une île de ce type : LSContentscCalculator, qui se pratique de la manière suivante…

<Archipelago id="body" active="yes" category="body">
    <Island id="calc" active="yes" class="LSContentsCalculator">
        <param name="name"><![CDATA[oCalc]]></param>
    </Island>
</Archipelago>

Voilà, à titre d'illustration, comment cette calculette se présente :

Vae Soli! Calculator (v 1.0)
0
(frac) (int) Back CE C
7 8 9 / sqrt
4 5 6 * x2
1 2 3 - 1/x
0 +/- . + =

La calculette ci-dessus a été affichée grâce au code suivant :

<?php  $oCalc = new LSCalculator( 'myCalc' );
       $this->EchoOB( $oCalc->Render() );
?>

Tandis que sa présentation, dirigée par CSS, a été établie avec le code suivant :

table.LS_VAESOLI_CALCULATOR
                    {   border              :   1px solid silver;
                        color               :   #ccc;
                        background          :   rgb(240,240,240);
                    }

table.LS_VAESOLI_CALCULATOR caption
                    {   border              :   1px solid silver;
                        border-bottom       :   none;
                        color               :   #000;
                        background          :   rgb(255,128,0);
                    }

table.LS_VAESOLI_CALCULATOR thead tr th
                    {   background          :   #eee;
                        color               :   #000;
                    }

table.LS_VAESOLI_CALCULATOR tr td
                    {   border              :   1px solid silver;
                        background          :   #fff;
                        color               :   #777;
                    }

table.LS_VAESOLI_CALCULATOR tr td.digit,
table.LS_VAESOLI_CALCULATOR tr td.sign,
table.LS_VAESOLI_CALCULATOR tr td.clean,
table.LS_VAESOLI_CALCULATOR tr td.opera,
table.LS_VAESOLI_CALCULATOR tr td.result,
table.LS_VAESOLI_CALCULATOR tr td.frac
                    {   background          :   #fff;
                    }

table.LS_VAESOLI_CALCULATOR tr td.sign:hover,
table.LS_VAESOLI_CALCULATOR tr td.clean:hover,
table.LS_VAESOLI_CALCULATOR tr td.opera:hover,
table.LS_VAESOLI_CALCULATOR tr td.frac:hover
                    {   background          :   #ddd;
                    }

table.LS_VAESOLI_CALCULATOR tr td.digit:hover
                    {   background          :   rgb(255,164,72);
                    }

table.LS_VAESOLI_CALCULATOR tr td.result:hover
                    {   background          :   #800;
                        color               :   #fff;
                    }

Gérer des signets 2009-03-01

Il est possible d'offrir aux visiteurs des sites web que vous créez avec Vae Soli! la possibilité de stocker des signets vers leurs pages les plus prisées de votre site. Cette gestion est entièrement indépendante de celle que les navigateurs Internet offrent avec les "favoris". Dès lors, les signets sont TOUJOURS affichés, quel que soit le navigateur utilisé ce qui n'est pas le moindre des avantages.

La gestion des signets avec Vae Soli! est déclinée en deux temps :

  1. Ajouter un signet
  2. Afficher les signets enregistrés

Ajout d'un signet

Les signets sont sauvegardés dans un cookie : bookmarks

Vae Soli! ne fournit aucun service spécialisé (du moins à ce jour) pour créer un signet. Par contre, l'affichage des signets déjà enregistrés est pris en charge par une île de classe LSContentsBookmarks. Voici un code type qui vous permet de créer un signet :

<?php
  $szRef = '{page='  . base64_encode( $GLOBALS['oApp']->oPage->Self          ) . '}' .
           '{title=' . base64_encode( $GLOBALS['oApp']->oPage->szTitle       ) . '}' .
           '{desc='  . base64_encode( $GLOBALS['oApp']->oPage->szDescription ) . '}' .
           '{guid='  . base64_encode( $GLOBALS['oApp']->oPage->szGuid        ) . '}';

  if ( isset( $_COOKIE['bookmarks'] ) )
  {
      if ( empty( $_COOKIE['bookmarks'] ) )
      {
          $szBookmarks = $szRef;
      }
      else
      {
          $szBookmarks = $_COOKIE['bookmarks'] . '|' . $szRef;
      }
  }
  else
  {
      $szBookmarks = $szRef;
  }

  $szSelf = '{page='  . base64_encode( $GLOBALS['oApp']->oPage->Self ) . '}';

  if ( ! strstr( $_COOKIE['bookmarks'],$szSelf ) )
  {
      $this->EchoOB( "<a href=\"{$this->Self}\" class=\"ADD_BOOKMARK\" "        .
                     "onclick=\"setcookie( 'bookmarks','{$szBookmarks}' );\">"  .
                     "Ajouter un signet personnel vers cette page</a>\n" );
  }
?>

Afficher la liste des signets

L'affichage de la liste des signets est des plus simples. Il suffit de faire appel à une île de classe LSContentsBookmarks.

<Island id="bookmarks" active="yes" class="LSContentsBookmarks">
</Island>

Attention ... cookies

Il faut disposer des fonctions javascript de cookies que fournit Vae Soli! par le biais du fichier LSVCookies.js :

function setcookie( szName,szValue,iDays,szPath,szDomain,bSecure )
/*--------------------------------------------------------------*/
{
    if ( iDays )
    {
    	var dDate = new Date();
    	dDate.setTime( dDate.getTime() + ( iDays * 24 * 60 * 60 * 1000 ) );
    	var szExpires = "; expires=" + dDate.toGMTString();
    }
    else
    {
        var szExpires = "";
    }

    if ( szPath )
    {
        szPath = "; path=" + escape( szPath );
    }
    else
    {
        szPath = "; path=/";
    }

    if ( szDomain )
    {
        szDomain = "; domain=" + escape( szDomain );
    }
    else
    {
        szDomain = "";
    }

    if ( bSecure != null )
    {
        szSecure = ( bSecure == true ) ? "; secure" : "";
    }
    else
    {
        szSecure = "";
    }

    szCookie = szName + "=" + szValue + szExpires + szPath + szDomain + szSecure;

    document.cookie = szCookie;

    return ( true ) ;
}   /* function setcookie( szName,szValue,iDays,szPath,szDomain,bSecure ) */


function getcookie( szName )
/*------------------------*/
{
    var szNameEQ = szName + "=";
    var aCookies = document.cookie.split( ';' );

    for ( var i=0;i < aCookies.length;i++ )
    {
        var szCookie = aCookies[i];

        while ( szCookie.charAt(0)== ' ' )
        {
            szCookie = szCookie.substring( 1,szCookie.length );
        }   /* while ( szCookie.charAt(0)== ' ' ) */

        if ( szCookie.indexOf( szNameEQ ) == 0 )
        {
            return szCookie.substring( szNameEQ.length,szCookie.length );
        }   /* if ( szCookie.indexOf( szNameEQ ) == 0 ) */
    }   /* for ( var i=0;i < aCookies.length;i++ ) */

    return null;
}   /* End of function getcookie( szName ) */


function delcookie( szName )
/*------------------------*/
{
    setcookie( szName,"",-1 );
    return ( true );
}   /* End of function delcookie( szName ) */

Éléments conditionnels

Pages conditionnelles

Il est possible d'indiquer que l'accès à une page est conditionnel. Voici une page qui ne s'affichera que si la fonction IsMember('admin') est satisfaite :

<Land id="index.php" active="yes" editable="yes" group="main"
    condition=".php= return IsMember('admin');">
   …
</Land>

Voilà de quoi restreindre l'accès aux pages de votre site aisément, par exemple les pages de votre Intranet !

Vous pouvez aussi indiquer ce que le framework doit faire si la condition n'est pas satisfaite : la clause onfail

<Land id="index.php" active="yes" editable="yes" group="main"
    condition=".php= return IsMember('admin');">
    onfail="/not-authorized.php"
   …
</Land>

Pages réservées à une adresse IP

Vous pouvez aisément protéger une page en vérifiant l'adresse IP du client qui requiert la page. Si l'adresse IP n'est pas dans la liste fournie, alors c'est la page d'erreur qui, si elle existe, est activée.

<Land id="index.php" active="yes" ip="127.0.0.1;217.130.75.42" >
</Land>

L'exemple précédent ne donnera accès à la page que si le client fonctionne sur la machine locale (127.0.0.1) ou depuis l'adresse IP fixe 217.130.75.42.

Îles conditionnelles

Ce qui est valable pour les pages est valable pour les îles : dans le cas où vous souhaitez n'afficher un contenu qu'en fonction de certaines conditions ...

<Island id="jamais" active="yes" condition=".php= return false;">
    <param name="storage">/islands/promo.php</param>
</Island>

Dans l'exemple ci-dessus, l'île n'est jamais affichée puisque la condition n'est jamais remplie.

Pages répondant à un domaine spécifique

Il est possible de mentionner le domaine auquel une page est liée. Ainsi, si deux domaines sont hébergés physiquement sur le même site, par exemple www.vaesoli.org ou www.vaesoli.com, il est possible de dire qu'une page appartient à un domaine mais pas à un autre … ou alors que les deux pages ont des définitions différentes. Voyez l'exemple qui suit :

<Land id="/intranet/training.php" … landscape="www.vaesoli.org">
    <… définition des archipels et îles>
</Land>
<Land id="/intranet/training.php" … landscape="www.vaesoli.com">
    <… autre définition des archipels et îles>
</Land>

Désactivations

Désactiver une page

Vous pouvez carrément désactiver une page en jouant sur l'attribut active. Dans l'exemple qui suit, la page n'est pas résolue car elle est inactive :

<Land id="/intranet/training.php" active="no" … >
    <… définition des archipels et îles>
</Land>

Dans le cas qui est mentionné, si aucune autre définition de page ne peut entrer en lice, alors Vae Soli! activera la page par défaut … s'il y en a une.

Désactiver une île

Vous pouvez faire la même chose avec une île en jouant sur le même attribut active. Dans l'exemple qui suit, l'île n'est pas affichée car elle est inactive :

<Island id="jamais" active="no">
    <param name="storage">/islands/promo.php</param>
</Island>

Afficher un film QuickTime

Vae Soli! possède de nombreuses classes de contenu. L'une de ces classes est de type media. Ce type permet d'avoir accès à de nombreux sous- types, dont le type QuickTime (qt). En voilà un exemple :

<Island id="video01" active="yes" class="LSContentsMedia">
   <param name="mediatype">qt</param>
   <param name="comment">Endless road</param>
   <param name="src">media/vanishing_point.mov</param>
   <param name="autoplay">true</param>
   <param name="loop">true</param>
   <param name="width">468</param>
   <param name="height">350</param>
   <param name="showcontrols">true</param>
</Island>

Afficher un film Windows Media Movie

Il est tout également possible, en jouant des mêmes paramètres, d'afficher un film wmv :

<Island id="video02" active="no" class="LSContentsMedia">
   <param name="mediatype">wmv</param>
   <param name="comment">Endless road</param>
   <param name="src">media/vanishing_point.wmv</param>
   <param name="autoplay">true</param>
   <param name="loop">true</param>
   <param name="width">468</param>
   <param name="height">350</param>
   <param name="showcontrols">true</param>
</Island>

Jouer un fichier .mp3

Toujours au rang des types de media gérés par la classe LSContentsMedia on retrouve le type mp3. En voilà un exemple :

<Island id="audio01" active="yes" class="LSContentsMedia">
    <param name="mediatype">mp3</param>
    <param name="comment">Music - Bill Labounty</param>
    <param name="src">media/Bill Labounty-Livin'it up.mp3</param>
    <param name="autoplay">true</param>
    <param name="loop">true</param>
    <param name="width">475</param>
    <param name="height">45</param>
    <param name="showcontrols">true</param>
</Island>

Réduire la taille du géorama

Dans le cas de sites importants, le fichier géorama peut rapidement avoir une taille imposante. Dans ce cas, il est utile « d'éclater » le géorama en plusieurs fichiers. Pour ce faire, utilisez l'attribut href des pages comme le démontre l'exemple suivant :

<Pangaea>
    <Land id="/Index.php;/index.php" active="yes" editable="yes" group="main"
          href="/georama/index.xml">
        <Sitemap priority="0.8" frequency="weekly" />
    </Land>
    <!-- ************************************************************ -->
    …
</Pangea>

Dans cet exemple la définition de la page index.php est logée dans un fichier externe, en l'occcurrence /georama/index.xml.

Partager une page entre sites

L'utilisation de l'attribut href permet également d'obtenir la définition d'une page au départ d'un autre site. Voyez par exemple comment la page index.php référence une page provenant du site un-autre-site.com :

<Pangaea>
    <Land id="/Index.php;/index.php" active="yes" editable="yes" group="main"
          href="http://www.un-autre-site.com/syndication/news.xml">
        <Sitemap priority="0.8" frequency="weekly" />
    </Land>
    <!-- ************************************************************ -->
    …
</Pangea>

Afficher une image sans se soucier de ces propriétés

Ne vous souciez plus des largeur et hauteur, ni même, quoique dans une moindre mesure, de l'attribut alt. Voyez l'exemple suivant :

$oImg = new LSXHtmlImg( "/images/WebLogo.jpg" );
echo $oImg;

Insérer une île dans la section <head>…</head>

Pour insérer une île dans la section <head>…</head> du (X)HTML de votre page, vous pouvez utiliser le paramètre with-div de la classe LSIsland dont dépend d'ailleurs la classe LSContents et toutes ses classes dérivées. Ce paramètre évite l'insertion d'une division avant l'insertion de l'île … et nous svaons qu'on ne peut pas retrouver de balise <div>…</div> dans la section <head>…</head> de la page ! Voyez l'exemple suivant :

<Archipelago id="meta" active="yes" category="meta">
    <Island id="meta-page" active="yes" class="LSContents">
        <param name="storage">/template/meta.xml</param>
        <param name="with-div">false</param>
    </Island>
</Archipelago>

Afficher des textes latins at random

<?php   $oLatin = new LSLatin();         /* Créer un objet LSLatin */
        $aPara  = $oLatin->Get( 5 );     /* Générer 5 paragraphes au hasard */

        foreach ( $aPara as $szPara )    /* Insérer chaque paragraphe généré */
            echo "<p>{$szPara}</p>";
?>

Charger des paramètres de page différents en fonction d'un domaine

Voilà le cas qui se présente à vous : plusieurs domaines pointent vers le même site : www.monsite.com, www.monsite.org et www.monsite.net.

En fonction du domaine qui est requis, vous souhaitez charger des paramètres de page différents :

<Land id="/index.php" active="yes" editable="yes" group="main">
    <Defaults>
        <Settings landscape="www.monsite.com;www.monsite.org">
            <LSGuid><![CDATA[GUID 111]]></LSGuid>
            <LSKeyword><![CDATA[homepage]]></LSKeyword>
        </Settings>
        <Settings landscape="www.monsite.net">
            <LSGuid><![CDATA[GUID 222]]></LSGuid>
            <LSKeyword><![CDATA[accueil]]></LSKeyword>
        </Settings>
    </Defaults>
</Land>

Intégrer Vae Soli! et Dublin Core

À partir de la version 2.0.0000 de Vae Soli! l'intégration avec Dublin Core est encore plus grande. Voilà un exemple de metas qui, positionnées par Dublin Core, sont populées par des propriétés spécifiques d'une page. Le tout est programmé comme une île XHTML :

<Island id="meta-generic" active="yes" xhtml="yes">
    <link rel="schema.DC"       href="http://purl.org/dc/elements/1.1/" />
    <link rel="schema.DCTERMS"  href="http://purl.org/dc/terms/" />

    <meta name="DC.title"  xml:lang="{{{CUR-LANG}}}" content="{{{PAGE-TITLE}}}" />
    <meta name="DC.description" xml:lang="{{{CUR-LANG}}}" content="{{{PAGE-DESC}}}" />
    <meta name="DC.publisher" content="{{{COMPANY}}}" />
    <meta name="DC.creator" content="{{{AUTHOR}}}" />
    <meta name="DC.date" scheme="DCTERMS:W3CDTF" content="{{{PAGE-CREATED}}}" />
    <meta name="DCTERMS.modified" scheme="DCTERMS:W3CDTF" content="{{{PAGE-LUPDATE}}}" />
    <meta name="DC.language" scheme="DCTERMS:RFC3066" content="{{{CUR-LANG}}}" />
    <meta name="DC.rights" xml:lang="{{{CUR-LANG}}}" content="{{{PAGE-RIGHTS}}}" />
    <meta name="DC.subject" xml:lang="{{{CUR-LANG}}}" content="{{{PAGE-KEYWORDS}}}" />
</Island>

Comme vous le constatez, ce sont des substitutions qui se chargent de mettre à jour le document final renvoyé au navigateur du visiteur. Voyez comment le fichier de substitutions est réalisé :

<Dictionary active="yes">
    <Data key="{{{AUTHOR}}}" active="yes" editable="yes">
        <Value><![CDATA[John Doe]]></Value>
    </Data>

    <Data key="{{{CUR-LANG}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return $GLOBALS['oApp']->oPage->szLanguage;]]></Value>
    </Data>

    <Data key="{{{PAGE-LUPDATE}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return STR_left( $GLOBALS['oApp']->oPage->Date('lupdate','-'),10);]]></Value>
    </Data>

    <Data key="{{{PAGE-LUPDATE2}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return STR_left( $GLOBALS['oApp']->oPage->Date('lupdate'),8);]]></Value>
    </Data>

    <Data key="{{{PAGE-CREATED}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return STR_Left( $GLOBALS['oApp']->oPage->Date('creation','-'),10);]]></Value>
    </Data>

    <Data key="{{{PAGE-DESC}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return $GLOBALS['oApp']->oPage->szDescription;]]></Value>
    </Data>

    <Data key="{{{PAGE-KEYWORDS}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return $GLOBALS['oApp']->oPage->szKeywords;]]></Value>
    </Data>

    <Data key="{{{PAGE-RIGHTS}}}" active="yes" editable="yes">
        <Value lang="fr"><![CDATA[.php=return empty( $GLOBALS['oApp']->oPage->szRights ) ?
        'Tous les droits sur toutes nos pages sont décrits dans notre page de termes légaux' :
        $GLOBALS['oApp']->oPage->szRights;]]></Value>
    </Data>

    <Data key="{{{PAGE-TITLE}}}" active="yes" editable="yes">
        <Value><![CDATA[.php=return $GLOBALS['oApp']->oPage->szTitle;]]></Value>
    </Data>

    <Data key="{{{COMPANY}}}" active="yes" editable="yes">
      <Value><![CDATA[Lato Sensu Management]]></Value>
    </Data>

    <Data key="{{{VAE}}}" active="yes" editable="yes">
        <Value><![CDATA[Vae&#160;Soli!]]></Value>
    </Data>
</Dictionary>

Utilisation de caches

Utiliser un cache sur une page

Lorsque des pages sont complexes à construire, lorsqu'elles sont composées sur base de multiples requêtes de données par exemple, il peut être intéressant d'en stocker le résultat final. Un autre appel de la même page, dans les mêmes conditions d'accès, pourra dès lors récupérer le résultat directement plutôt que de le recomposer. C'est le système de cache.

Vae Soli! tient compte des conditions d'accès suivantes : liste de paramètres ($_GET), de variables ($_POST), et de cookies ($_COOKIE) (mis à part le PHPSESSID), le nom du domaine et le protocole utilisé.

Pour activer le cache d'une page (notez que c'est bien la page entière qui est mise en tampon), il suffit d'utiliser l'attribut cacheTTL de la page dans le géorama :

<?xml version="1.0" encoding="iso-8859-1"?>
<Georama xmlns:xi="http://www.w3.org/2001/XInclude" version="4.0">
    <…>
    <Pangaea>
        <Land id="/index.php" active="yes" cacheTTL="3600">
            <…>
        </Land>
        <…>
    </Pangaea>
</Georama>

Le cache est exprimé en secondes. L'exemple ci-dessus provoque la mise en tampon de la page pour 3600 secondes, soit 1 heure.

Utiliser un cache calculé sur une page 2009-03-13

Il est possible de mentionner des caches dynamiques sur les pages. Dans ce cas, le cache est calculé : sa valeur est le résultat d'une expression PHP comme dans l'exemple suivant :

<Pangaea>
    <Land id="/index.php" active="yes" cacheTTL=".php= return MyFunc();">
        <…>
    </Land>
    <…>
</Pangaea>

Utiliser un cache sur une île

Ce qui est possible avec les pages est possible avec les îles … et c'est bien pratique car quelques fois il n'est pas possible de cacher TOUTE la page mais seulement une partie de la page : les îles qui la composent.

<Archipelago id="summary" active="yes" category="summary">
    <Island id="core" active="yes" class="LSContents" cacheTTL="86400">
        <param name="storage" lang="fr">/islands/home_core_summary_fr.php</param>
        <param name="storage" lang="en">/islands/home_core_summary_en.php</param>
    </Island>
</Archipelago>

L'exemple ci-dessus cache une île pour une journée entière, 86400 secondes. Veuillez noter que si deux îles différentes portent le même ID, même si elles sont sur des pages différentes, elles auront le même cache ! Ce n'est pas une erreur de conception : c'est fait à dessein afin de permettre de créer le même cache pour des îles qui doivent être reproduites sur des pages différentes. Si vous souhaitez qu'une île ait un cache propre, alors utilisez l'attribut guid et veillez à lui attribuer une valeur unique (ce qu'un GUID suppose) comme l'exemple suivant le suggère :

<Archipelago id="summary" active="yes" category="summary">
    <Island id="core" guid="UNIQUE" active="yes" class="LSContents" cacheTTL="86400">
        <param name="storage" lang="fr">/islands/home_core_summary_fr.php</param>
        <param name="storage" lang="en">/islands/home_core_summary_en.php</param>
    </Island>
</Archipelago>

Activer des corrections automatiques

Il est possible, grâce au système des substitutions, de mettre en oeuvre des corrections automatiques … un peu comme ce que propose MS-Word.

Composez un dictionnaire semblable à ce qui suit dans un fichier que vous appelerez autocorrect.xml :

<?xml version="1.0" encoding="utf-8"?>

<Dictionary active="yes">
    <Data key="coeur" active="yes" editable="yes">
        <Value lang="fr"><![CDATA[c&#339;ur]]></Value>
    </Data>
    <Data key="oeuvre" active="yes" editable="yes">
        <Value lang="fr"><![CDATA[&#339;uvre]]></Value>
    </Data>
    <Data key="(c)" active="yes" editable="yes">
        <Value><![CDATA[&copy;]]></Value>
    </Data>
    <Data key="(r)" active="yes" editable="yes">
        <Value><![CDATA[&reg;]]></Value>
    </Data>
    <Data key="™" active="yes" editable="yes">
        <Value><![CDATA[&#8482;]]></Value>
    </Data>
    <Data key="€" active="yes" editable="yes">
        <Value><![CDATA[&euro;]]></Value>
    </Data>
</Dictionary>

Puis, indiquez que le dictionnaire de corrections automatiques doit être pris en compte sur votre site. Il suffit, pour ce faire, de modifier les paramètres par défaut de votre site de la manière suivante :

<Defaults>
    <Settings>
        <!-- Autres paramètres -->
        <…>
        <LSSubstitutions><![CDATA[%geo-path%/autocorrect.xml]]></LSSubstitutions>
    </Settings>
</Defaults>

… et le tour est joué. Bon amusement.

Permettre l'édition en ligne des îles : In-Place Editing

Vous pouvez modifier, directement sur le site, les îles qui composent une page. Comme il est hors de question d'accepter que quiconque modifie votre site, il convient de vous logguer. Lorsque vous serez loggué, et pour peu que vous fassiez partie d'un groupe à qui sont dévolus des droits d'édition, Vae Soli! vous permettra de modifier les îles qui composent les pages.

<Island id="services" active="yes" class="LSContents">
    <role-mapping role="editor" groups="admin" />
    <param name="storage" lang="fr">/islands/services_core_fr.php</param>
    <param name="storage" lang="en">/islands/services_core_en.php</param>
</Island>

Dès lors, Vae Soli! présente une petite interface de modification des données. En appuyant sur le bouton submit, votre modification sera immédiatement prise en compte.

Disposer d'un backup chaque fois qu'une île est modifiée

L'attribut history permet d'activer un backup chaque fois qu'une île est modifiée grâce à l'In-Place Editing.

<Island id="services" active="yes" class="LSContents" history="yes">
    <role-mapping role="editor" groups="admin" />
    <param name="storage" lang="fr">/islands/services_core_fr.php</param>
    <param name="storage" lang="en">/islands/services_core_en.php</param>
</Island>

Afficher une citation 2010-03-16

Vae Soli! possède une classe réservée à des citations. Bien évidemment, pour en bénéficier, vous devrez vous-même fournir à Vae Soli! un fichier de citations.

Et comme Vae Soli! adore le XML, c'est bien sûr dans le format XML que le fichier de citations devra être construit. Voilà, pour la petite histoire un bref aperçu d'un tel fichier :

<?xml version="1.0" encoding="utf-8"?>

<Citations active="yes">

    <Citation guid="b8b5c828-6175-4a1e-8ad1-36b10e6106a8" active="yes"
              editable="yes" lang="fr" author="Gallance" date="20090125"
              keywords="pensée,aphorisme">
        <Value><![CDATA[Conscience est matière qui résonne, énergie qui vibre,
                        qui réverbère.]]></Value>
        <Source href=""><![CDATA[<!-- Ici, on pourrait mettre la source de la
                   citation, par exemple le livre, sa page, etc. -->]]></Source>
    </Citation>

    <Citation guid="99fcc43a-bf36-4b4b-aa88-eb2ebef0373e" active="yes"
              editable="yes" lang="fr" author="Gallance" date="20090125"
              keywords="pensée,aphorisme">
        <Value><![CDATA[Mon corps est le grimoire de ma vie. Il a enregistré,
                        filtré, digéré, transformé, additionné, mélangé, brûlé, infusé
                        tout ce qui m'a été donné de vivre. Tout cela est
                        imprimé en moi, dans ma chair, mes organes et mon sang.
                        Tout cela est mémorisé dans ma forme, mes plis, des
                        aspérités, mes maladies, mes expulsions et rejets, mes
                        caillots d'émotions et je restitue au monde cette
                        expérience unique dans toutes mes interactions, que ce
                        soit souhaité — souhaitable — ou non, par
                        devers conscience et volonté. C'est la vérité du monde,
                        vu au travers du prisme que je suis. Un jour, il faudra
                        bien nettoyer tout cela. D'autres énergies fulgurantes
                        s'en chargeront.]]></Value>
        <Source href=""><![CDATA[<!-- Ici, on pourrait mettre la source de la
                   citation, par exemple le livre, sa page, etc. -->]]></Source>
    </Citation>

    <Citation guid="798590c9-5c05-49e5-8259-2ea201c792bc" active="yes"
              editable="yes" lang="fr" author="Gallance" date="20090113"
              keywords="pensée,aphorisme">
        <Value><![CDATA[Tout ce qui dépasse, tout ce qui forme aspérité est
            fragile, casse facilement sous la pression. Retirez ces éminences
            et vous perdrez l'art de l'ensemble, sa singularité, son caprice,
            son originalité, son détail ontologique.]]></Value>
        <Source href=""><![CDATA[<!-- Ici, on pourrait mettre la source de la
                   citation, par exemple le livre, sa page, etc. -->]]></Source>

    </Citation>

    <Citation guid="8f0f4d56-18d3-42f6-a96b-62ace616812a" active="yes"
              editable="yes" lang="fr" author="Gallance" date="20081211"
              keywords="pensée,aphorisme">
        <Value><![CDATA[Les rois appartiennent à la gravure, à la sculpture, à un
                        monde matériel fixe; les ministres, les premiers
                        ministres, sont eux de l'ère digitale, de tout temps en
                        mouvement.]]></Value>
        <Source href=""><![CDATA[<!-- Ici, on pourrait mettre la source de la
                   citation, par exemple le livre, sa page, etc. -->]]></Source>
    </Citation>
</Citations>

L'affichage de la citation est incité par une île de classe LSContentsCitation comme le démontre l'exemple ci-dessous :

<Island id="citation" active="yes" class="LSContentsCitation">
    <param name="storage">/citations/citations.xml</param>
    <param name="recno">random</param>
</Island>

C'est tout ce qu'il vous faudra faire pour afficher une citation au hasard provenant de votre fichier de citations. Le paramètre recno dont la valeur ici est mise à random, indique qu'il faut extraire une citation au hasard … mais on pourrait tout aussi bien indiquer QUELLE citation précise on veut afficher.

<Island id="citation" active="yes" class="LSContentsCitation">
    <param name="storage">/citations/citations.xml</param>
    <param name="recno">random</param>
    <param name="guid">99fcc43a-bf36-4b4b-aa88-eb2ebef0373e</param>
</Island>

Dans ce cas précis, le paramètre recno est déconsidéré.

Afficher une citation avec mot-clef2010-03-16

Si vous souhaitez afficher une citation au hasard répondant à un mot-clef bien précis, vous pourrez utiliser le paramètre keyword. Voyez à ce titre l'élément suivant qui sélectionne parmi les citations toutes celles qui contiennent le mot "travail" dans leurs mots-clefs et qui se pose sur l'une d'entre elles :

<Island id="citation" active="yes" class="LSContentsCitation">
    <param name="storage">/citations/citations.xml</param>
    <param name="recno">random</param>
    <param name="keyword">travail</param>
</Island>

Précédent