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.
LSVaesoli
: toute conscience
commence par se rendre compte de sa propre existence 2013-04-01LSTag
: support pour <time>…</time>
2013-04-015.1.0000
2013-02-23date
(Javascript)
en 5.1.0000
2013-02-22string
(Javascript)
en 5.1.0000
2013-02-215.1.0000
2013-02-20LSContents
et les user input zones
2013-02-18LSInput
et les datalist
2013-02-18LSPage
avec cookie de dernière visite 2013-02-18LSLoginQuitus
avec des credentials PAR domaine 2013-02-11threshold
,
score
et random
2013-03-10title
, 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)onload
et onunload
d'une page, Page settings, ... (22/09/2013)LSVaesoli
: toute conscience
commence par se rendre compte de sa propre existence 2013-04-01Depuis l'opus "5.2.0000"
La classe LSVaesoli
est maintenant une de ces classes dont
l'objectif est de donner à Vae Soli! une conscience de lui-même, pour
l'instant, au plus bas de l'échelle. Vraiment au plus bas ! Et voici
comment faire dire à Vae Soli! ce qu'il est :
<?php $oV = new LSVaesoli(); echo '<p>',$oV->Speak( 'who-am-i' ),'</p>'; ?>
Hi, I am Vae Soli! (Web) 7.1.0000 - Date: 20181106103900 - Build : PMO - Release type : beta
Voici maintenant comment savoir de quoi se compose Vae Soli!:
<?php $oV = new LSVaesoli(); echo '<p>',$oV->Speak( 'anatomy' ),'</p>'; ?>
LSAction.class.php ,LSAddress.class.php ,LSAdministrativeArea.class.php ,LSAjax.class.php ,LSAjax.class.ls-file-explorer.php ,LSAjax.class.ls-site-manager.php ,LSAjax.class.ls-file-uploader.php ,LSAnalytics.class.php ,LSAnalytics2.class.php ,LSApplication.class.php ,LSArchipelago.class.php ,LSArray.class.php ,LSArticle.class.php ,LSAudience.class.php ,LSAssertion.class.php ,LSAutoReference.class.php ,LSBag.class.php ,LSBBCodes.class.php ,LSBooking.class.php ,LSBookingForm.class.php ,LSBrowser.class.php ,LSBuilder.class.php ,LSCache.class.php ,LSCalculator.class.php ,LSCalendar.class.php ,LSCalendar2.class.php ,LSCameraSnapshot.class.php ,LSCapsule.class.php ,LSCitations.class.php ,LSCode.class.php ,LSColor.class.php ,LSConstant.class.php ,LSConsciousness.class.php ,LSContactForm.class.php ,LSContainer.class.php ,LSContents.class.php ,LSContentsAccounts.class.php ,LSContentsAjax.class.php ,LSContentsArticles.class.php ,LSContentsBooking.class.php ,LSContentsBookmarks.class.php ,LSContentsBreadcrumb.class.php ,LSContentsBugs.class.php ,LSContentsBusinessCoordinates.class.php ,LSContentsBusinessOpeningHours.class.php ,LSContentsBusinessOff.class.php ,LSContentsCalculator.class.php ,LSContentsCalendar.class.php ,LSContentsCampaign.class.php ,LSContentsCarousel.class.php ,LSContentsCatalogue.class.php ,LSContentsCharter.class.php ,LSContentsCitation.class.php ,LSContentsComments.class.php ,LSContentsCookieUsage.class.php ,LSContentsCountdown.class.php ,LSContentsDatetime.class.php ,LSContentsDoc.class.php ,LSContentsEmail.class.php ,LSContentsEmpty.class.php ,LSContentsFontSizer.class.php ,LSContentsGeolocation.class.php ,LSContentsHeartbeat.class.php ,LSContentsIFrame.class.php ,LSContentsImageGallery.class.php ,LSContentsImageTransition.class.php ,LSContentsInvoiceOUT.class.php ,LSContentsJobs.class.php ,LSContentsLanguageSwitchers.class.php ,LSContentsLegal.class.php ,LSContentsLoginLogoff.class.php ,LSContentsMedia.class.php ,LSContentsMenu.class.php ,LSContentsMicroblogAdd.class.php ,LSContentsMicronews.class.php ,LSContentsMyAccount.class.php ,LSContentsPageframe.class.php ,LSContentsParadeigmas.class.php ,LSContentsPaymentOptions.class.php ,LSContentsPinboard.class.php ,LSContentsPoll.class.php ,LSContentsPortfolio.class.php ,LSContentsPromos.class.php ,LSContentsRatesReviews.class.php ,LSContentsRememberPassword.class.php ,LSContentsRestaurantBookingForm.class.php ,LSContentsReview.class.php ,LSContentsRSS.class.php ,LSContentsSearch.class.php ,LSContentsShare.class.php ,LSContentsSiteManager.class.php ,LSContentsSitemap.class.php ,LSContentsSourceFile.class.php ,LSContentsStopwatch.class.php ,LSContentsTagCloud.class.php ,LSContentsTodoAdd.class.php ,LSContentsTodosOnPage.class.php ,LSContentsTweets.class.php ,LSContentsUIKey.class.php ,LSContentsW3C.class.php ,LSContentsWeather.class.php ,LSContentsWiki.class.php ,LSContentsXML.class.php ,LSControl.class.php ,LSCreativeWork.class.php ,LSCursor.class.php ,LSCustomer.class.php ,LSDataEnvironment.class.php ,LSDate.class.php ,LSDecision.class.php ,LSDictionary.class.php ,LSDoc.class.php ,LSDom.class.php ,LSEvalPHP.class.php ,LSExplorer.class.php ,LSException.class.php ,LSFieldset.class.php ,LSFile.class.php ,LSFileProperties.class.php ,LSFileUploader.class.php ,LSFontSizer.class.php ,LSFootnote.class.php ,LSFootnotes.class.php ,LSForm.class.php ,LSEmailForm.class.php ,LSEnrollForm.class.php ,LSFormPostTweet.class.php ,LSFormset.class.php ,LSFunction.class.php ,LSGeo.class.php ,LSGeolocation.class.php ,LSGeorama.class.php ,LSGeoramaVar.class.php ,LSGlossary.class.php ,LSGlossary.new.class.php ,LSGoogleMap.class.php ,LSGrid.class.php ,LSGroup.class.php ,LSHttp.class.php ,LSHttpResponseHeader.class.php ,LSImage.class.php ,LSImageGallery.class.php ,LSIni.class.php ,LSInput.class.php ,LSInvoice.class.php ,LSIPCheck.class.php ,LSIslandAbstract.class.php ,LSIslandAbstractForm.class.php ,LSIssue.class.php ,LSLabel.class.php ,LSLanguageSwitchers.class.php ,LSLatin.class.php ,LSLegalPerson.class.php ,LSLinkedList.class.php ,LSList.class.php ,LSLogin.class.php ,LSLoginIni.class.php ,LSLoginQuitus.class.php ,LSLoginVFP.class.php ,LSLoginXml.class.php ,LSMail.class.php ,LSMap.class.php ,LSMeeting.class.php ,LSMicronews.class.php ,LSMenu.class.php ,LSModuleAbstract.class.php ,LSModuleArticles.class.php ,LSModuleTestimonials.class.php ,LSNaturalPerson.class.php ,LSNewAnalytics.class.php ,LSNewsArticle.class.php ,LSNote.class.php ,LSOnfail.class.php ,LSPage.class.php ,LSPageframe.class.php ,LSPageEditor.class.php ,LSPageHeader.class.php ,LSParadeigma.class.php ,LSParameter.class.php ,LSPaymentOptions.class.php ,LSPeopleAudience.class.php ,LSPerson.class.php ,LSPlace.class.php ,LSProjectPhase.class.php ,LSPopup.class.php ,LSPorterStemmer.class.php ,LSPortfolio.class.php ,LSProject.class.php ,LSProperty.class.php ,LSPublication.class.php ,LSQueue.class.php ,LSRequirement.class.php ,LSReview.class.php ,LSReturn.class.php ,LSRisk.class.php ,LSSentanaiAbstract.class.php ,LSSentanaiInterface.class.php ,LSSequenceDiagram.class.php ,LSServiceMessage.class.php ,LSSession.class.php ,LSSiteManager.class.php ,LSSitemap.class.php ,LSSoftwareApplication.class.php ,LSSource.class.php ,LSSourceFile.class.php ,LSSpamhaus.class.php ,LSStack.class.php ,LSSubject.class.php ,LSTag.class.php ,LSTagCloud.class.php ,LSTagging.class.php ,LSTask.class.php ,LSTaxonomy.class.php ,LSTechArticle.class.php ,LSTextTrans.class.php ,LSThing.ds.class.php ,LSTimeline.class.php ,LSTimer.class.php ,LSTodoList.class.php ,LSTopic.class.php ,LSTracer.class.php ,LSTweetForm.class.php ,LSTwitter.class.php ,LSUIKey.class.php ,LSUIKeyPermalinkForm.class.php ,LSUIKeyRegisterForm.class.php ,LSUIKeySearchForm.class.php ,LSUnitTesting.class.php ,LSUser.class.php ,LSUserMgr.class.php ,LSVaesoli.class.php ,LSVersion.class.php ,LSVfc.class.php ,LSWebAnalytics.class.php ,LSWebPage.class.php ,LSWebSite.class.php ,LSWidgetBookingForm.class.php ,LSWidgetBusinessClosingPeriods.class.php ,LSWidgetEmailForm.class.php ,LSWidgetEnrollForm.class.php ,LSWidgetOpeningHours.class.php ,LSWiki.class.php ,LSWireTransferForm.class.php ,LSXMLSitemap.class.php ,LSColors.functions.php ,LSDate.functions.php ,LSFiles.functions.php ,LSFinance.functions.php ,LSHtml.functions.php ,LSHttp.functions.php ,LSImages.functions.php ,LSIP.functions.php ,LSMail.functions.php ,LSMath.functions.php ,LSMisc.functions.php ,LSOpenLabels.functions.php ,LSStrings.functions.php ,LSSys.functions.php ,LSUrl.functions.php ,LSV.functions.php ,LSXml.functions.php ,LSVaeSoli.js ,LSVAjax.js ,LSVAnalytics.js ,LSVAnimation.js ,LSVBase.functions.js ,LSVBase64.js ,LSVBattery.js ,LSVCalculator.js ,LSVCan.js ,LSVClock.js ,LSVCookies.js ,LSVCss.js ,LSVDates.js ,LSVDom.js ,LSVExplorer.js ,LSVFiles.js ,LSVMisc.js ,LSVPageframe.js ,LSVPerf.js ,LSVPerfReport.js ,LSVPopup.js ,LSVPosition.js ,LSVStorage.js ,LSVStrings.js ,LSVSwipe.js ,LSVUploader.js ,
Depuis l'opus "5.2.0000"
Désormais quand les archipels, quand les îles, voire quand la page sont
chargées et qu'elles sont résolues par des sources distantes (utilisation de
href
), vous pouvez aller repêcher toutes ces infos dans le
tableau (array) aHrefs
comme vous le montre l'exemple
suivant :
<?php var_dump( $this->aHrefs ); ?> // $this being the page (LSPage)
LSTag
: support pour <time>…</time>
2013-04-01Depuis l'opus "5.2.0000"
Nous avons ajouté le support pour le tag <time>…</time>
dans Vae Soli!
… et nous en avons tiré parti immédiatement dans la classe
LSContentsDatetime
. Alors, pour s'en servir, rien de plus simple :
$oTime = new LSTag( 'time' ); $oTime->szText = "2012-45"; echo $oTime;
Mais vous pouvez également être un peu plus ambitieux et vous permettre
quelques calculs savants sur les dates en passant par la classe
LSDate
comme vous le démontre l'exemple qui suit :
$oTime = new LSTag( 'time' ); $oDate = new LSDate( time() ); $oTime->AddObject( $oDate ); echo $oTime;
Depuis l'opus "5.1.0001"
Vous pouvez insérer une île de type date/time dans une page. Elle aura pour effet d'afficher la date et l'heure de manière dynamique dans la page en question. Rien de plus simple.
Le format d'affichage est libre et vous pouvez utiliser un sous-ensemble de
formats PHP natifs sur date()
: Y
pour
l'année, m
pour le mois, d
pour le jour,
H
pour l'heure, i
pour les minutes et
s
pour les secondes.
<Island id="datetime" active="yes" class="LSContentsDatetime"> <param name="format">d-m-Y H:i:s</param> <param name="CSSClass">datetime</param> <param name="hidden">false</param> <param name="tag">time</param> <param name="tooltip">Date et heure courante</param> <param name="timezone">Europe/Brussels</param> </Island>
Si vous souhaitez imposer une limite, vous pouvez le faire grâce au
paramètre limit
. Dans ce cas n'oubliez pas d'informer Vae Soli!
de ce qu'il faut faire quand la limite est atteinte (paramètre
destination
) : soit vous souhaitez aller à une autre
page, soit vous souhaitez boucler vers la même page (self
), en
ayant pris soin de définir un contenu différent pour le moment où la limite
est atteinte (sous peine de boucler indéfiniment vers la même page), soit
vous voulez brancher brancher l'exécution vers un signet de la page
courante, soit encore vous voulez exécuter une fonction Javascript de votre
cru.
<Island id="datetime" active="yes" class="LSContentsDatetime"> <param name="format">d-m-Y H:i:s</param> <param name="limit">20130430235959</param> <param name="destination">/contest-over.php</param> <param name="CSSClass">datetime</param> <param name="hidden">false</param> <param name="tag">time</param> <param name="tooltip">Date et heure courante</param> <param name="timezone">Europe/Brussels</param> </Island>
D'autres destinations possibles :
<param name="destination">#limit-reached</param> <param name="destination">self</param> <param name="destination">javascript:alert('Game over');</param>
Depuis l'opus "5.1.0001"
Vous pouvez insérer une île de type compte à rebours dans une page. Elle aura pour effet d'afficher un décompte de manière dynamique.
Lorsque la limite de 0
est atteinte, vous avez le choix
d'indiquer à Vae Soli! ce qu'il faut faire. Sans surprise, les mêmes
conventions s'appliquent à LSContentsCountdown
qu'à
LSContentsDatetime
: soit vous souhaitez aller à une autre
page, soit vous souhaitez boucler vers la même page (self
), en
ayant pris soin de définir un contenu différent pour le moment où la limite
est atteinte (sous peine de boucler indéfiniment vers la même page), soit
vous voulez brancher brancher l'exécution vers un signet de la page
courante, soit encore vous voulez exécuter une fonction Javascript de votre
cru.
<Island id="countdown" active="yes" class="LSContentsCountdown"> <param name="CSSClass">datetime</param> <param name="hidden">false</param> <param name="tag">time</param> <param name="tooltip">Compte à rebours</param> <param name="start">300</param> <param name="destination">javascript:alert('Finished');</param> </Island>
Cette île est idéale pour modifier des contenus après un certain temps (le temps du compte à rebours) : des bannières dynamiques positionnées en Ajax, des diaporamas, des réponses à des concours avec temps limité, même à l'écriture de petits agents qui entameront des actions à intervalle régulier sur votre serveur.
Vous pouvez aussi décider de faire en sorte que le compte à rebours ne soit pas visible grâce à :
<Island id="countdown" active="yes" class="LSContentsCountdown"> <param name="CSSClass">datetime</param> <param name="hidden">true</param> <param name="tag">time</param> <param name="tooltip">Compte à rebours</param> <param name="start">300</param> <param name="destination">javascript:alert('Finished');</param> </Island>
Depuis l'opus "5.1.0001"
C'est le contraire de LSContentsCountdown
. Le compteur de
chronomètre est incrémenté chaque seconde.
Lorsque la limite indiquée est atteinte, vous avez le choix d'indiquer à
Vae Soli! ce qu'il faut faire. Sans surprise, les mêmes conventions
s'appliquent qu'à LSContentsCountdown
: soit vous
souhaitez aller à une autre page, soit vous souhaitez boucler vers la même
page (self
), en ayant pris soin de définir un contenu différent
pour le moment où la limite est atteinte (sous peine de boucler indéfiniment
vers la même page), soit vous voulez brancher brancher l'exécution vers un
signet de la page courante, soit encore vous voulez exécuter une fonction
Javascript de votre cru.
<Island id="stopwatch" active="yes" class="LSContentsStopwatch"> <param name="CSSClass">datetime</param> <param name="hidden">false</param> <param name="tag">time</param> <param name="tooltip">Chronomètre</param> <param name="start">0</param> <param name="limit">30</param> <param name="destination">javascript:alert('Over!');</param> </Island>
5.1.0000
2013-02-23Depuis l'opus "5.0.0011"
Lorsque vous composez un nouveau site, il vous faut non seulement créer les définitions de domaines dans le gestionnaire du serveur HTTP (par exemple Apache) mais il faut encore créer des répertoires dans lesquels vous aller dépeoser tous les fichiers du site. Il vous faudra aussi faire pointer votre site vers Vae Soli!, et, le cas échéant vers Quitus.
Tout ce travail peut vous être évité car Vae Soli! dispose d'un feature unique à savoir la génération automatique. De quoi s'agit-il ?
Pour ce travail, nous imaginerons devoir créer le site vlt-
greenergy.be
que nous rendrons accessible en mode développement sous
les noms de domaine www.vlt.poc
et vlt.poc
(poc
désignant Proof Of Concept) que nous
définirons avec Apache (2.2.11
pour ce qui nous concerne).
Suivez pas à pas les instructions :
Éditez le fichier httpd-vhosts.conf
de Apache
et ajoutez en fin de fichier les lignes suivantes :
<VirtualHost *:80> DocumentRoot c:/websites/vlt-greenergy.be/www/httpdocs ServerName vlt.poc ServerAlias *.vlt.poc </VirtualHost>
Nous venons de définir un nouveau domaine à servir sous de multiples noms
différents : vlt.poc
… mais aussi tous les sous-
domaines possibles (*.vlt.poc
) ce qui inclut aussi le fameux
www.vlt.poc
. Pourquoi abréger ainsi le nom du domaine (de
vlt-greenergy.be
à vlt.poc
) ? Parce que,
diantre, c'est bien plus court à taper dans une adresse web que le nom réel
de tout le domaine ! Pour sûr, sur l'environnement de production final,
on remplacera vlt.poc
par vlt-greenergy.be
et le
tour sera joué.
En fonction de votre environnement, il faudra adapter le fichier hosts
. Nous basons notre exemple sur une utilisation en
environnement Windows … et nous fonctionnons en mode local (mode de
développement) :
127.0.0.1 vlt.poc www.vlt.poc
Comme le montre la définition du vhost, le domaine sera défini dans le
répertoire physique c:/websites/vlt-greenergy.be/www/httpdocs
. Vous devez
créer ce répertoire manuellement.
Puis, dans ce répertoire, vous créez un fichier index.php
avec la définition suivante{{ :}à
<?php include('../master.php'); ?>
Une seule petite ligne de code ! C'est tout ce qu'il nous faut. Vous
constatez que cette ligne de code fait référence à un fichier source
master.php
qui, lui, ne se trouve
PAS dans la racine du site.
Voici la définition de ce fichier :
01 <?php 02 ini_set('error_reporting', E_ALL | E_NOTICE ); 03 error_reporting( E_ALL | E_NOTICE ); 04 ini_set( 'display_errors','On' ); 05 06 global $szVaesoliDir; /* Necessary for workaround of bug in PHP on junctions */ 07 08 $szRoot = $_SERVER['DOCUMENT_ROOT']; /* Root of the site */ 09 $szVaesoliDir = $szRoot . '/vaesoli'; /* Default Vae Soli! directory */ 10 $szQDir = $szRoot . '/q'; /* Default Quitus directory */ 11 12 if ( ! is_dir( $szVaesoliDir ) ) /* If Vae Soli! directory NOT found */ 13 { 14 /* Create a symbolic link to VaeSoli! */ 15 if ( symlink( "c:\\websites\\vaesoli.org\\www\\httpdocs\\vaesoli\\",$szVaesoliDir ) ) 16 { 17 } 18 } /* if ( ! is_dir( $szVaesoliDir ) ) */ 19 20 if ( ! is_dir( $szQDir ) ) /* If Quitus directory NOT found */ 21 { 22 /* Create a symbolic link to Quitus */ 23 if ( symlink( "c:\\websites\\latosensu.be\\www\\httpdocs\\q\\",$szQDir ) ) 24 { 25 } 26 } /* if ( ! is_dir( $szQDir ) ) */ 27 28 if ( is_dir( $szVaesoliDir ) ) /* If Vaesoli path found */ 29 { 30 /* File that contains the Foundation classes */ 31 $szFoundationClassesFile = $szVaesoliDir . '/include/LSVfc.class.php'; 32 33 if ( file_exists( $szFoundationClassesFile ) ) /* If Foundation classes found */ 34 { 35 require_once( $szFoundationClassesFile ); /* Require these classes ONCE for all */ 36 37 global $oApp; /* This makes the application a GLOBAL variable */ 38 39 $szGeoramaFile = '{new}'; /* Georama file (physical file name ... create a new one) */ 40 41 if ( ! isset( $GLOBALS[ '__LS_IsAjax' ] ) || ! $GLOBALS[ '__LS_IsAjax' ] ) 42 { 43 $oApp = new LSApplication( $szRoot , /* Root of the site */ 44 $szGeoramaFile , /* Georama of the site */ 45 null , /* Verb */ 46 true ); /* Create georama if NOT found */ 47 $oApp->szVaesoliPath = $szVaesoliDir; /* So that LSApplication knows where Vae Soli! is installed ... relative to current site */ 48 $oApp->Run(); /* Run application now */ 49 } 50 else 51 { 52 $oAjax = new LSAjax(); 53 $oAjax->Run(); 54 } 55 } /* if ( file_exists( $szFoundationClassesFile ) ) */ 56 } /* if ( is_dir( $szVaesoliDir ) ) */ 57 else /* Else of ... if ( is_dir( $szVaesoliDir ) ) */ 58 { 59 echo "<p>Vae Soli! path NOT found</p>\n"; 60 } /* End of ... Else of ... if ( is_dir( $szVaesoliDir ) ) */ 61 ?>
Copiez simplement ces lignes, débarrassez-vous des numéros de ligne, et
sauvez le tout dans le fichier c:/websites/vlt-greenergy.be/www/master.php
. Nous y
sommes presque !
En ligne 09 vous constatez qu'on suppose que Vae Soli! est installé
dans le répertoire c:/websites/vlt-greenergy.be/www/httpdocs/vaesoli
.
C'est une simple supposition mais il vaudrait mieux que ce soit effectivement
le cas. Si le répertoire n'existe pas un répertoire symbolique va
être créé vers l'endroit où Vae Soli! est supposé être installé (on appelle
cela une jonction en Windows). Pourquoi créer un lien
symbolique ? Tout simplement pour faire en sorte que différents sites
déployés sur le même serveur puisse bénéficier de la même instance de
Vae Soli! : un seul déploiement pour de multiples sites. Si dasn votre
cas, le déploiement de Vae Soli! a été effectué à un autre endroit, il vous
faudra modifier la ligne 15. Au sortir de la ligne 15, le répertoire
c:\websites\vlt-greenergy.be\www\httpdocs\vaesoli\
pointe vers le répertoire c:\websites\vaesoli.org\www\httpdocs\vaesoli\
où Vae Soli!
est installé.
À la ligne 28 on teste si le répertoire où se trouve Vae Soli! existe (que ce soit un lien symbolique ou non). Si le répertoire est trouvé, on charge les classes "Fondation" de Vae Soli! (lignes 31 et 35).
En ligne 39 on mentionne le nom du fichier géorama dont on a besoin. Vous
constaterez que ce fichier pointe ici vers un répertoire qui se trouve au-
dessus de la racine du site (pour des questions de sécurité). Dans notre
cas, le nom de ce répertoire est c:\websites\vlt-greenergy.be\www\georama\
et le nom
du fichier est georama.xml
. Bien entendu, à ce stade, ce
fichier n'existe pas (et peu nous importe qu'il existe ou non).
Des lignes 43 à 48 on va créer une application Vae Soli! et lui demander de
se lancer (chaque page est une instance d'application). Notez le
true
de la ligne 46 : si le géorama n'existe pas il sera
créé … et en fait c'est la totalité du site qui est créée.
À ce stade, tout est fait pour que la génération automatique puisse se dérouler sans encombre. Il suffit maintenant d'arrêter les services Apache et de les faire redémarrer pour que la nouvelle définition de domaine puisse être prise en compte.
index.php
dans la racine du sitemaster.php
au-dessus de la racine du sitemaster.php
pour qu'il colle à votre nouveau site
Lorsque Vae Soli! génère un site, notre framework choisit un paradeigma au
hasard (modèle de site web). Tous nos paradeigmas sont compatibles les uns
avec les autres. Par contre, vous pourriez souhaiter choisir vous-même le
paradeigma à appliquer. Pour ce faire, il suffira que (1) votre fichier de
géorama soit inexistant (ce qui activera la génération automatique) (2)
indiquer le paradeigma dans l'URL de votre requête. Par exemple, voici
comment choisir le paradeigma "Essentiel" avec l'exemple que nous avons
fourni jusqu'ici, le site vlt.poc
:
http://www.vlt.poc?paradeigma=Essentiel
date
(Javascript)
en 5.1.0000
2013-02-22Depuis l'opus "5.1.0000"
Vae Soli! fournit des extensions au prototype des date
s
Javascript. Avec ces extensions, plus besoin de déclarer des fonctions pour
calculer une nouvelle date sur base d'un nombre de jours (+
ou
-
), pour utiliser différents formats d'initialisation,
bénéficier de différents formats de rendu, …. Voici la liste des
extensions dont vous disposez :
Method | Description |
---|---|
Add( x ) |
Ajout (x positif) ou retrait (x négatif)
d'un nombre de secondes |
Bom( [n] ) |
Positionne la date au début du mois. Si vous passez l'argument n ,
la méthode calcule le début du mois en sautant n mois :
Bom(1) calcule le début du mois suivant; Bom(-1)
calcule le début du mois précédent. |
Eom( [n] ) |
Positionne la date à la fin du mois. Si vous passez l'argument n ,
la méthode calcule la fin du mois en sautant n mois :
Eom(1) calcule la fin du mois suivant; Eom(-1)
calcule la fin du mois précédent. |
Render( [fmt] ) |
Rendu de la date selon un format optionnel. Si fmt passé,
les trois formats possibles sont Y pour l'année,
m pour le mois, d pour le jour, H pour
l'heure, i pour les minutes et s pour les secondes. |
Set( x ) |
Initialisation de la date. Si x est un chiffre, il représente le
nombre de secondes passées entre le 1er janvier 1970 et la date à positionner
(valeur UTC). Si x est une chaîne, elle peut être formatée
selon DD-MM-YYYY , DD/MM/YYYY , DD.MM.YYYY ,
YYYY-MM-DD , YYYY/MM/DD , YYYY.MM.DD ou
YYYYMMDD . Vous pouvez encore mentionner l'heure, les minutes
et les secondes en mentionnant 6 chiffres à la fin de la chaîne passée. |
Pour bénéficier de ces extensions, il suffit d'inclure la source Javascript suivante :
<script src="/vaesoli/scripts/LSVDates.js"> </script>
string
(Javascript)
en 5.1.0000
2013-02-21Depuis l'opus "5.1.0000"
Vae Soli! ce n'est pas que du code PHP. C'est aussi un peu de code
Javascript … et c'est ainsi que Vae Soli! fournit des extensions au
prototype des string
s Javascript. Avec ces extensions, plus
besoin de déclarer des fonctions pour faire le ltrim()
, le
rtrim()
ou encore le trim()
d'une chaîne de
caractères, toutes méthodes inexistantes dans l'objet string
originel de Javascript. Voici la liste des extensions dont vous
disposez :
Method | Description |
---|---|
ltrim() |
Élimination des blancs les plus à gauche |
rtrim() |
Élimination des blancs les plus à droite |
trim() |
Élimination des blancs les plus à gauche ET des plus à droite |
isBlank() |
Détermine si la chaîne ne contient que des blancs |
isEmpty() |
Détermine si la chaîne est vide (alias de isBlank() ) |
strin() |
Élimine la dernière position ("string" devient "strin") |
endsWith( s ) |
Détermine si la chaîne se termine par la sous-chaîne s |
startsWith( s ) |
Détermine si la chaîne commence par la sous-chaîne s |
lpad( c,iLen ) |
Remplit la chaîne à gauche par le caractère c jusqu'à ce que la chaîne atteigne la longueur iLen |
rpad( c,iLen ) |
Remplit la chaîne à droite par le caractère c jusqu'à ce que la chaîne atteigne la longueur iLen |
unquote() |
Élimine les ',", CR et LF de la chaîne en les transformant en leur équivalent URL encode
(' devient %27 , " devient %22 ,
CR devient %0D , LF devient %0A ) |
chkdate() |
Détermine si la chaîne représente une date (format DD-MM-YYYY) |
chkemail() |
Détermine si la chaîne représente une adresse email valide |
tokenize( sep ) |
Découpe une chaîne de caractères en fonction de sep qui
est traité comme LE séparateur et non comme une liste de séparateurs
comme dans la méthode split() . Retour = tableau |
Pour bénéficier de ces extensions, il suffit d'inclure la source Javascript suivante :
<script src="/vaesoli/scripts/LSVStrings.js"> </script>
5.1.0000
2013-02-20Depuis l'opus "5.1.0000"
Marre de vous demander quelle définition XML est activée dans une page ? Utilisez donc cette fonctionnalités inédite de Vae Soli!: les traces définies au niveau des définitions des îles et archipels. Un exemple !
<Archipelago id="ecma" active="yes" category="ecma" trace="16:Hello from me"> <Island id="ecma" active="yes" xhtml="yes" trace="16:Scripts will be inserted"> <script type="text/javascript" src="/vaesoli/scripts/LSVCookies.js"> </script> <script type="text/javascript" src="/scripts/ls.js"> </script> </Island> </Archipelago>
On ne peut décidément faire plus simple … mais désactivez donc cette fonctionnalité lorsque vous partez en production avec une application bâtie de cette manière … sauf si vous souhaitez justement tracer ce qui se passe en production !
La syntaxe permise est la suivante : trace="..."
ou
trace="x:..."
. Dans le premier cas, le niveau de logging
souhaité est implicite (Vae Soli! considérant que sa valeur est
64
). Dans le second cas, le niveau de logging est indiquée par
la valeur de x
(dans nos exemples ci-dessus, 16
,
ce qui correspond à un niveau "erreur").
LSContents
et les user input zones
2013-02-18Depuis l'opus "5.1.0000"
La version 5.1.0000
de Vae Soli! généralise les développements
entrepris dans la classe LSContentsLoginLogoff
(pour le cas du
site The Mentors Club de Pernod Ricard) qui permettait de présenter des
zones de saisie à l'écran pas prévues lors du développement initial de la
classe.
Le principe est simple : des zones définies dans le géorama sont incluses dans le rendu de l'île. Par paramétrisation de l'île, il est donc possible de créer des formulaires. Rien de plus; rien de moins. Voici un exemple à vous mettre sous la dent :
<Island id="free-zones" active="yes" class="LSContents"> <param name="after-storage"><![CDATA[true]]></param> <param name="user-field" id="txtZone1" tooltip="Please fill zone 1" cookie="yes" value="" caption="Zone 1:" css-class="free-zone" onkeypress="return __chkNumber(event,this,'');" maxlength="2" placeholder="DD"><![CDATA[<br />]]></param> <param name="user-field" id="txtZone2" tooltip="Please fill zone 2" cookie="yes" value="" caption="Zone 2:" css-class="free-zone" onkeypress="return __chkNumber(event,this,'');" maxlength="2" placeholder="MM"><![CDATA[<br />]]></param> <param name="user-field" id="txtZone3" tooltip="Please fill zone 3" cookie="yes" value="" caption="Zone 3:" css-class="free-zone" onkeypress="return __chkNumber(event,this,'');" maxlength="4" placeholder="YYYY"><![CDATA[<br />]]></param> <param name="user-field" id="cmdSubmit" type="submit" tooltip="Click to send data" value="Submit" css-class="free-zone"><![CDATA[]]></param> </Island>
Dans l'exemple démontré ci-dessus, l'île n'a aucun autre contenu que les zones de saisie ! Il en découle que nous avons ainsi créé un formulaire sans code HTML … simplement en paramétrant une île de Vae Soli!.
LSInput
et les datalist
2013-02-18Depuis l'opus "5.1.0000"
La mise au point de la gestion d'entreprise Quitus nous pousse à ré-évaluer la
manière dont les zones de type dropdowncombo
sont implémentées
en Vae Soli!.
Jusqu'à présent, ces listes étaient implémentées sous la forme d'un tour de
passe passe où une zone texte était surexposée sur une zone de sélection
(select
). La solution était élégante mais posait néanmoins
l'une ou l'autre difficulté de codage (notamment le code Javascript
nécessaire à juxtaposer au pixel près les deux zones — la zone de
texte cachant partiellement la zone de select, sauf pour ce qui était de la
flèche de choix).
La solution que nous apportons aujourd'hui passe par l'utilisation de
datalist
, feature disponible en HTML 5. Voyons un exemple. La
zone qui s'affiche ci-dessous est une zone d'input de type text
toute simple. Auparavant, une datalist
a été créée avec 4 choix
possibles (on verra plus loin comment) et la liste de données a été attachée
à la zone d'input pour que cette dernière en fasse usage (cliquez dans la
zone d'input pour activer les 4 choix disponibles).
Quel est le code nécessaire ? Il n'est pas bien long :
Line 01: $oForm = new LSForm(); Line 02: $oForm->szVersion = 'Web 2.0'; Line 03: Line 04: $oDataList = new LSTag( 'datalist','urls' ); Line 05: $oDataList->AddItem( 'FastWrite', Line 06: 'http://www.fastwrite.com' ); Line 07: $oDataList->AddItem( 'Lato Sensu Management', Line 08: 'http://www.latosensu.be' ); Line 09: $oDataList->AddItem( 'UIKey', Line 10: 'http://www.uikey.org' ); Line 11: $oDataList->AddItem( 'Quitus', Line 12: 'http://www.quitus.be' ); Line 13: Line 14: $txtInput = new LSInput( 'text',null,'txtInput' ); Line 15: $txtInput->szList = 'urls'; Line 16: $txtInput->szStyle = 'width:400px;'; Line 17: Line 18: $oForm->AddObject( $txtInput ); Line 19: $oForm->AddObject( $oDataList ); Line 20: Line 21: echo $oForm;
En ligne 02
vous constatez qu'il faut indiquer vouloir générer
des formulaires de type Web Form 2.0.
En ligne 04
vous créez un tag de type datalist
.
Des lignes 05
à 12
on crée les données de la liste
(libellé, valeur).
En ligne 15
on indique que la zone d'input doit utiliser la
liste de données. En ligne 19
, ne pas oublier d'ajouter la
liste de données au formulaire (ou au fieldset
).
Le tour est joué.
LSPage
avec cookie de dernière visite 2013-02-18Depuis l'opus "5.1.0000"
Le paramétrage LSVisit
permet de demander à Vae Soli! de garder
une trace des visites d'un internaute pour la totalité d'un site. Pour ce faire
il faut paramétrer les settings du site de la manière suivante
(souvent dans le defaults.xml
) :
<Defaults> <Settings> <!-- Default settings for all other domain names --> <LSDoctype>xhtml11</LSDoctype> <LSIsDebug>true</LSIsDebug> <LSTracingLevel>48</LSTracingLevel> <LSTracingOutput>/../logs/t.log</LSTracingOutput> <LSTracingFilter></LSTracingFilter> <LSPerfThreshold>0.050</LSPerfThreshold> … <LSVisit><![CDATA[true]]></LSVisit> </Settings> </Defaults>
Dès cet instant, Vae Soli! maintient un cookie (validité: 1 mois environ) qui indique quand l'utilisateur a visité le site pour la première fois, quand la dernière fois, et le nombre de visites (demandes de page). Illustration :
Le cookie s'appelle LS-LAST-VISIT
et il est formaté en trois
parties : la première visite;la dernière visite;le nombre de visites.
Les première et dernière visites sont formatées en YYYYMMDDHHmmSS
.
LSLoginQuitus
avec des credentials PAR domaine 2013-02-11Depuis l'opus "5.1.0000"
Il se pourrait que vous créiez un site multi-domaines (eg. www.vaesoli.org
et www.vaesoli.com) et que dans ce cadre vous souhaitiez disposer de logins
(credentials) différents en fonction du domaine sur lequel vous vous
logguez. C'est désormais possible avec la nouvelle mouture de la classe
LSLoginQuitus
(opus 5.1.0000
). Grâce à la config
suivante :
<Connection> <Groups landscape="www.ls.poc;;www.latosensu.be"> <![CDATA[quitus;admin]]></Groups> <Groups landscape="www.quitus.poc;;www.quitus.be;;www.quitus.ch"> <![CDATA[guests]]></Groups> <Account landscape="www.ls.poc;;www.latosensu.be;;www.quitus.poc;;www.quitus.be;;www.quitus.ch"> <![CDATA[oscar]]></Account> <Password landscape="www.ls.poc;;www.latosensu.be"> <![CDATA[643079ef22297ea1e28c40b119d3afaa7e2c8f6894ee0e4797d645bb25765abecdef09ef1f8d0fc36bc4020d109b81e8]]></Password> <Password landscape="www.quitus.poc;;www.quitus.be;;www.quitus.ch"> <![CDATA[8b148fc822e8170d60259e1051b096a63834e7d3d20a1845093aec7edc0d1f4da345b386eb8847c68394538e05852b07]]></Password> </Connection>
De la configuration exprimée ci-dessus vous devez déduire que plusieurs
domaines sont possibles :
www.ls.poc;;www.latosensu.be;;www.quitus.poc;;www.quitus.be;;www.quitus.ch
,
que ces domaines sont divisés en deux grands groupes (le site
de latosensu et le site de quitus). Quel que soit le domaine, le user
account est "oscar", tandis que les groupes auxquels appartient Oscar sont
différents pour les deux grandes catégories de domaines et que les mots de
passe sont également différents.
Vous aurez aussi noté que les mots de passe sont encryptés ce qui évite que quelqu'un puisse vous les voler.
threshold
,
score
et random
2013-03-10Depuis l'opus "5.1.0001"
En deux mots … la version 5.1.0001
de Vae Soli! permet
l'insertion d'îles au hasard. Idéal pour un contenu identique, pourtant
variable, mais dont le positionnement n'a finalement pas d'importance.
Il suffit pour cela d'indiquer l'attribut random="true"
sur
l'archipel dont les îles doivent être insérées au hasard et le tour est joué.
De même, on peut assigner un seuil à un archipel et des scores à des îles. Dès que les scores cumulés des îles atteignent le seuil de l'archipel dans lequel elles sont incluses, Vae Soli! stoppe l'insertion des îles restantes. Voici un exemple immédiat :
<Archipelago id="body" active="yes" category="body" random="yes" threshold="300"> <Island id="island-1" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-2" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-3" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-4" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-5" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> </Archipelago>
L'archipel body
a un seuil positionné à 300
. Il
est composé de 5 îles : island-1
, island-2
,
island-3
, island-4
, et island-5
,
chacune pourvue d'un score de 100
. Dans ce cas, Vae Soli!
n'insérera que les îles 1 à 3 car dès l'insertion de l'île island-3
réalisée, le seuil de 300
sera atteint. Notez à présent
le petit changement suivant :
<Archipelago id="body" active="yes" category="body" random="yes" threshold="300" random="yes"> <Island id="island-1" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-2" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-3" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-4" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> <Island id="island-5" active="yes" class="LSContent" score="100"> <param name="storage"><![CDATA[<whatever storage...>]]></param> </Island> </Archipelago>
… dans le cas présent, puisque vous demandez à Vae Soli! d'insérer les îles au hasard, tout ce que vous pourrez dire est que 3 des îles définies seront affichées … mais vous ne pourrez déterminer lesquelles.