DEPRECATION WARNING

This documentation is not using the current rendering mechanism and is probably outdated. The extension maintainer should switch to the new system. Details on how to use the rendering mechanism can be found here.

EXT: SAV Library Extension Generator

Created:2008-12-05T07:38:36
Changed:2009-02-28T17:41:48
Classification:sav_library
Keywords:Extension generator, SAV Library
Author:Yolf (Laurent Foulloy)
Email:yolf.typo3@orange.fr
Info 4:
Language:fr

img-1 img-2 EXT: SAV Library Extension Generator - sav_library

EXT: SAV Library Extension Generator

Extension Key: sav_library

Language: fr

Keywords: Extension generator, SAV Library

Copyright 2000-2008, Yolf (Laurent Foulloy), <yolf.typo3@orange.fr>

This document is published under the Open Content License

available from http://www.opencontent.org/opl.shtml

The content of this document is related to TYPO3

- a GNU/GPL CMS/Framework available from www.typo3.org

Table of Contents

EXT: SAV Library Extension Generator 1

`Introduction 4 <#1.1.Introduction|outline>`_

A propos de cette extension 4

Captures d'écran 5

`Manuel de l'utilisateur 13 <#1.2.Manuel%20de%20l'utilisateur|outline>`_

Installation 13

`Administration 14 <#1.3.Administration|outline>`_

Mettre à jour des extensions existantes 14

Exécution des tests 15

`Configuration 16 <#1.4.Configuration|outline>`_

Introduction 16

“Flexform” associé au “plugin” 16

Changer les icônes 18

Changer le gabarit (template) des vues 18

Changer la CSS par défaut 18

Configuration des “Queriers”, “Viewers” et “Item Viewers” 18

Modification de la configuration du générateur “SAV Library” 19

Référence pour la configuration des champs 19

Configuration des champs au moyen du TSConfig de la page 30

Configurations de maintenance 31

Configuration de la génération du code 31

Mise en cache 32

`Tutoriel 1 : Liste de contacts (Contact List) 33 <#1.5.Tutoriel%201 %20:%20Liste%20de%20contacts%20(Contact%20List)|outline>`_

Introduction 33

Création de l'extension 33

Utilisation de l'extension 44

Comment faire ? 47

`Tutoriel 2: Liste de CD (CD Album) 50 <#1.6.Tutoriel%202:%20Liste%20de%20CD%20(CD%20Album)|outline>`_

Introduction 50

Création de l'extension 50

Utilisation de l'extension 50

Comment faire ? 51

`Tutoriel 3: Collection de CD (Advanced) 56 <#1.7.Tutoriel%203:%20Collection%20de%20CD%20(Advanced)|outline>`_

Introduction 56

Création de l'extension 56

Comment faire ? 62

`Tutoriel 4: Collection de CD (Improved) 63 <#1.8.Tutoriel%204:%20Collection%20de%20CD%20(Improved)|outline>`_

Introduction 63

Création de l'extension 63

Utilisation de l'extension 66

`Tutoriel 5: Test d'extension du générateur 68 <#1.9.Tutoriel%205:%2 0Test%20d'extension%20du%20g%C3%A9n%C3%A9rateur|outline>`_

Introduction 68

`Tutorial 6: Email and RTF 69 <#1.10.Tutorial%206:%20Email%20and%20RTF|outline>`_

Introduction 69

Explication de la configuration 70

Comment faire ? 72

`Tutoriel 7: Livre d'or (Guest book) 73 <#1.11.Tutoriel%207:%20Livre%20d'or%20(Guest%20book)|outline>`_

Introduction 73

Aperçu de l'extension 73

Formulaire de saisie (FORM) 74

Liste des saisies des internautes (LIST) 77

L'accroche (TEASER) 78

Installation et configuration 79

Gabarit et fichier CSS 81

`Tutoriel 8: Fe Users Admin et Export 82 <#1.12.Tutoriel%208:%20Fe%20Users%20Admin%20et%20Export|outline>`_

Introduction 82

Extension overview 82

Formulaire utilisateur (USER) 83

Le formulaire d'administration (ADMIN) 84

Installation et configuration 84

Exportation des données au format CSV 86

Exportation des données vers d'autres formats 87

`Tutoriel 9: Utilisation de XML JpGraph 90 <#1.13.Tutoriel%209:%20Utilisation%20de%20XML%20JpGraph|outline>`_

Introduction 90

FE input events (Admin) 90

Affichage des graphes de Gantt (Display) 91

Utiliser le graphe avec un sélecteur d'année 94

`Tutoriel 10: Utiliser du TypoScript (Galerie de photos avec géolocalisation) 97 <#1.14.Tutoriel%2010:%20Utiliser%20du%20TypoScript %20(Galerie%20de%20photos%20avec%20g%C3%A9olocalisation)|outline>`_

Introduction 97

La vue “showAll” 98

La vue “inputForm” 98

La vue “showSingle” 98

Configuration du plugin 100

`Autres exemples 101 <#1.15.Autres%20exemples|outline>`_

Télécharger des documents (sav_download) 101

Compte-rendu de réunions (sav_meetings) 101

`Problèmes connus 103 <#1.16.Probl%C3%A8mes%20connus|outline>`_

`A faire 104 <#1.17.A%20faire|outline>`_

`Sponsors et remerciements 105 <#1.18.Sponsors%20et%20remerciements|outline>`_

Sponsors 105

Remerciements 105

`Changelog 106 <#1.19.Changelog|outline>`_

Introduction

A propos de cette extension

Le générateur d'extensions “SAV Library” permet d'engendrer des extensions sans avoir besoin d'écrire du code en PHP grâce à l'utilisation de paramètres de configuration au niveau du “Kickstarter”, qui devient un véritable éditeur d'extension.

Le générateur “SAV Library” inclut :

  • la création de vues multiples associées aux données,
  • l'édition des données en “Front end”,
  • la création de vues avec des onglets,
  • une interface simple dans le “Kickstarter” avec une aide contextuelle,
  • la génération de courriers électroniques,
  • la génération de fichiers RTF en utilisant des marqueurs associées aux données,
  • l'exportation des données au format CSV,
  • beaucoup d'autres fonctionnalités.

Cette extension modifie le Kickstarter par un mécanisme de XCLASS. Toutes les fonctionnalités du Kickstarter sont préservées et il peut continuer à être utilisé normalement. La version actuelle du générateur d'extensions “SAV Library” repose sur la version 0.4.0 du Kickstarter.

Si vous avez développé des extensions avec la version précédente du générateur, c'est-à-dire une version 2.x.y, vous devrez mettre à jour toutes vos extensions. Un outil dans le gestionnaire d'extensions a été prévu à cet effet.

Voir aussi :

  • les exemples “SAV Library” (“sav_library_exampleX”, où X est un nombre) – ces extensions sont engendrées par le générateur “SAV Library”. Elles sont décrites dans la partie “tutoriels”.
  • les autres exemples peuvent de la section “Autres exemples” de ce manuel :
    • Télécharger des documents (sav_download)
    • Compte-rendu de réunions (sav_meetings)
  • les filtres “SAV Library” (“sav_filter_name”, où “name” est le nom du filtre) – ces extensions ont été spécialement conçues pour être utilisées avec les extensions engendrées par “SAV Library”.
  • l'extension “SAV Library Extends” (“sav_library_extends”) - cette extension a été conçue pour vous permettre d'ajouter des méthodes ou de surcharger les méthodes existantes du générateur “SAV Library”.

Les développements les plus récents du générateur d'extensions “SAV Library” sont disponibles sur la forge TYPO3 (projet Extension Generator).

Rappelez vous que “It's not a bug, it's a missingfeature”. Si vous trouvez un bug, merci d'utiliser le “bug tracker” sur la forge TYPO3.

Note : dans ce manuel en français, les captures d'écran sont celles du manuel en version anglaise. En fonction de la configuration de votre BE, l'aide en ligne sera en français ainsi que les champs du flexform de configuration de l'extension. Afin de faciliter la compréhension de certaines parties, les termes anglais ou les néologismes informatiques ont parfois été conservés.

Captures d'écran

Le gestionnaire d'extension en BE
Nouveaux éléments, onglets de sélection des vues, liens pour un accès rapide aux champs

img-3

Fenêtre de configuration pour chaque champ avec un onglet de sélection de la vue

img-4

Outil de mise à jour

img-5

Configuration de l'extension engendrée au moyen d'un flexform

img-6

Exemple 1 – créer des champs texte et image
Vue globale (“Show all”)

img-7

Vue pour un élément (“Single”)

img-8

Vue de saisie (“Input”)

img-9

Exemple 2 – créer des liens, des zones de textes, des sélecteurs
Vue globale (“Show all”)

img-10

Vue pour un élément (“Single”)

img-11

Vue de saisie (“Input”)

img-12

Exemple 3 – créer des onglets, un sous-formulaire avec une relation MM
Vue pour un élément (“Single”)

img-13

Vue de saisie (“Input”)

img-14

Exemple 4 – créer un sélecteur à double fenêtre, un sous-formulaire avec une table qui n'est pas en relation avec les items
Vue pour un élément (“Single”)

img-15

Vue de saisie (“Input”)

img-16

Exemple 6 – Email et fichier RTF
Vue de saisie (“Input”)

img-17

Exemple 7 – Livre d'or (créer une extension avec plusieurs formulaires)
Formulaire Invités (Guests) - vue de saisie (“input”)

img-18

Formulaire Invités (Guests) – vue de validation de la saisie

img-19

img-20

Formulaire Liste (List) – vue globale (“show all”)

img-21

Formulaire Accroche (Teaser) – vue globale (“Show all”)

img-22

Exemple 8 – Gestion des utilisateurs FE – créér un formulaire Admin et exporter des données
Vue globale du formulaire ADMIN avec une icône pour l'exportation

img-23

Vue utilisant une configuration enregistrée pour l'exportation des données

img-24

Exemple 9 – XML JpGraph (Calendrier annuel sous forme d'un graphe de Gantt)

img-25

Exemple10 – Utiliser le TypoScript (galerie de photos avec une géolocalisation)
Vue globale

img-26

Vue simple avec la géolocalisation par google map

img-27

Manuel de l'utilisateur

Installation

Si elle n'est pas déjà installée, télécharger l'extension “kickstarter” et l'installer.

Télécharger l'extension “sav_library” et l'installer.

Lire les paragraphes consacrés aux exemples.

Administration

Mettre à jour des extensions existantes

Dans le cas d'une mise à jour majeure du générateur “SAV Library”, vous aurez besoin de mettre à jour toutes vos extensions créées grâce à lui.

Un outil est prévu à cet effet dans le gestionnaire d'extension (Extension Manager) pour réaliser cette tâche facilement. Cliquer sur le gestionnaire d'extension et sélectionner “SAV Library extensions update” à l'aide du sélecteur.

img-28

Toutes les extensions actives qui ont été engendrées avec le générateur “SAV Library” sont affichées.

img-29

Pour chaque extension, plusieurs informations sont affichées :

Le nom de l'extension, c'est-à-dire sa clé. En cliquant sur le nom, l'outil permet un accès rapide en l'ouvrant dans le Kickstarter.

Par défaut, le générateur d'extensions “SAV Library” crée un fichier de configuration en XML dans le répertoire “pi1” de l'extension. Vous pouvez préférer la configuration sous la forme d'un tableau php. Dans ce cas, décocher la case de la colonne “XML Generation”.

La liste des formulaires utilisés par l'extension (une extension peut contenir plusieurs formulaires). Pour chaque formulaire vous pouvez choisir s'il doit être de type “USER”, c'est-à-dire avec un mécanisme de cache. Par défaut, le “plugin” est de type “USER_INT” pour tous les formulaires, c'est-à-dire sans mécanisme de mise en cache. Si vous souhaitez un type “USER”, sélectionner la case pour le formulaire.

Sélectionner la case de la colonne “Update” pour reconstruire une extension. En cliquant sur le bouton “Update the extensions”, seules les extensions sélectionnées seront mises à jour.

La version du générateur qui a été utilisé pour engendrer l'extension est affichée. Si la version est plus ancienne que 3.0.0. “Unkown” est affiché.

La version actuelle de l'extension est affichée.

La version 0.4.0. du “Kickstarter” a introduit des changements dans le type de certains champs engendrés en SQL. L'outil “SAV Library extensions update” vous informera des changements proposés. Cliquer une nouvelle fois sur le bouton “Update the extensions” pour exécuter la mise à jour des champs SQL.

Exécution des tests

Des tests unitaires ont été développés pour le générateur “SAV Library”. Pour exécuter les tests :

Télécharger l'extension “phpunit” depuis le TER et l'installer.

Télécharger l'extension “sav_library_example1” depuis le TER et l'installer.

Cliquer sur “PHPunit” dans la partie “Admin tools”.

Sélectionner le test à exécuter.

De nouveaux tests seront ajoutés dans les prochaines versions du générateur d'extensions “SAV Library”.

Configuration

Introduction

Les paragraphes suivants décrivent les différentes configurations possibles pour une extension engendrée par le générateur “SAV Library”. Il est vivement recommandé de lire les paragraphes relatifs aux exemples avant d'étudier cette partie .

“Flexform” associé au “plugin”

La configuration de chaque extension engendrée par le générateur “SAV Library” est réalisée par l'intermédiaire d'un “flexform”. Le “flexform” possède trois onglets :

  • Général (“General”)
  • Options de saisie (“Input controls”)
  • Avancées (“Advanced”)

img-30

Aide : cliquer sur l'icône pour obtenir l'aide contextuelle.

Choisir un formulaire : utiliser ce sélecteur pour choisir le nom du formulaire à utiliser. Rappelons que le générateur “SAV Library” permet de construire plusieurs formulaires pour la même extension, fournissant des vues différentes pour les tables.

Tout montrer si pas de filtre : en sélectionnant cette entrée, tous les items sont affichés quand aucun filtre n'est appliqué comme, par exemple, l'extension “sav_filter_abc”.

Si aucune information disponible : Utiliser ce sélecteur pour choisir ce qui doit être affiché quand aucune information n'est disponible.

Nombre max d'éléments affichés : nombre maximum d'items qui seront affichés. Si la valeur 0 est utilisée, tous les items seront affichés.

Page d'aide : utiliser ce sélecteur pour choisir une page de votre site qui sera utilisée comme page d'aide pour votre extension. Dans ce cas, une icône sera affichée dans la barre de titre de l'extension.

img-31

Aide : cliquer sur l'icône pour obtenir l'aide contextuelle.

Saisie autorisée : en sélectionnant cette option, les entrées Front End sont autorisées.

Groupes autorisés : si vous sélectionnez des groupes d'utilisateurs, l'utilisateur de l'extension doit appartenir à l'un de ces groupes pour être autorisé à entrer des données en Front End.

Champ Admin : mettre dans ce champ une entrée de la forme “NomTable.NomChamp” (si vous utilisez seulement “NomChamp”, la table principale définie dans la requête sera utilisée pour “NomTable”). Ceci restreindra les entrées aux utilisateurs qui ont des droits “Admin” dans leur TS Config. Par exemple, si un utilisateur a “extKey_Admin=valeur1,valeur2” dans son TS Config , il sera autorisé à éditer et détruire les items pour lesquels “NomChamp” est égal à “valeur1” ou “valeur2” pour l'extension “extKey”. Les champs ou les onglets pour lesquels “editAdminPlus = 1;” est utilisé pourront être modifiés en Front End si l'utilisateur a les droits “Admin+”. Par exemple, si son TS Config est “extKey_Admin=valeur1+,valeur2”, l'utilisateur est “Admin+” pour les enregistrements où “nomChamp” est égal à “valeur1” et juste “Admin” pour les champs où “nomChamp” est égal à “valeur2”. Les utilisateurs deviennent “Super Admin” pour l'extension extKey, si leur TS Config est “extKey_Admin=*”.

Pas de bouton “Nouveau” : le bouton “Nouveau” ne sera pas ajouté au formulaire. Cela signifie que la modification d'enregistrements existants est possible mais que la création de nouveaux enregistrements est impossible.

Pas de bouton “Editer” : un bouton “Editer” ne sera pas ajouté devant chaque enregistrement dans les vues “Show All”.

Pas de bouton “Supprimer” : un bouton “supprimer” ne sera pas ajouté devant chaque enregistrement dans les vues “Show All”.

Ajouter un bouton “Supprimer” pour les enregistrements créés par l'utilisateur : ajoute un bouton “supprimer” seulement pour les enregistrements créés par l'utilisateur.

Date début saisie : si ce champ est utilisé, les entrées en Front End ne seront pas possibles avant cette date.

Date fin saisie : si ce champ est utilisé, les entrées en Front End ne seront pas possibles après cette date.

Appliquer la date à : Utiliser ce sélecteur pour choisir “Personne”, “Tous”, “Utilisateurs Admin plus”, “Tous sauf les Super Admin”. La date limite est appliquée en fonction de ce sélecteur.

img-32

Aide : cliquer sur l'icône pour obtenir l'aide contextuelle.

Filtre permanent : vous pouvez utiliser ce champ pour ajouter une clause WHERE qui sera ajoutée à la clause WHERE de la requête associée au formulaire.

Ajouter un fragment(#content id) aux liens : l'id du contenu sera ajouté comme fragment à l'url des liens.

Autoriser l'utilisation de la propriété “query” : la propriété “query” permet d'exécuter des requêtes dans les formulaires “input” ou “update”. Parce que n'importe quelle requête peut être exécutée, pour des raisons de sécurité, seuls les utilisateurs “admin” peuvent modifier ce champ.

Page de stockage des enregistrements : cette option permet de stoker vos enregistrements dans une page spécifique, par exemple un “Sysfolder”, sinon ils sont stockés dans la page courante. Quand cette option est utilisée, les enregistrements sont recherchés dans la page de stockage et, le cas échéant, dans les pages sélectionnées comme “point d'entrée”.

Appliquer le “cache” à : quand le “plugin” est de type “USER” pour le formulaire, c'est-à-dire quand le mécanisme de “cache” est actif, ces options contrôlent le “cache” pour différents boutons et liens. Si une option est sélectionnée, un paramètre “cHash” sera ajouté au lien.

Pages dont le “cache” sera vidé lors de la mise à jour des données : quand le plugin est de type “USER” pour le formulaire, c'est-à-dire quand le mécanisme de “cache” est actif, la mise à jour des données par une vue de type “inputForm” videra le “cache” de la page courante par défaut. Utiliser ce sélecteur pour ajouter d'autres pages dont le “cache” doit être vidé. Utiliser aussi cette option quand le “plugin” est de type “USER_INT” et que des pages utilisées par un autre formulaire pour lequel le “cache” est actif doivent être vidées.

Changer les icônes

Le générateur “SAV Library” est fourni avec différentes icônes associées aux diverses fonctionnalités. Il y a deux façons possibles pour changer ces icônes :

en créant un répertoire “res/icons” dans l'extension engendrée et en plaçant dans ce répertoire vos propres icônes avec les mêmes noms que ceux utilisés dans le répertoire “res/icons” de l'extension “sav_library”.

En créant un répertoire dans “fileadmin” et en plaçant vos icônes dedans avec les mêmes noms que ceux du répertoire par défaut. Puis, dans la partie “Setup” de votre template, écrire :plugin.tx_yourExtensionName_pi1.iconsDir = yourIconsDiroù “yourExtensionName” est la clé de l'extension créée avec le générateur et “yourIconsDir” est le chemin relatif du répertoire dans lequel vous avez placé les icônes.

Changer le gabarit (template) des vues

L'extension “sav_library” est fournie avec un gabarit (template) par défaut pour les vues. Il est dans le fichier “sav_library.tmpl” du répertoire “res” de l'extension “sav_library”. Il y a deux manières de changer le gabarit :

Mettre le fichier du gabarit dans le répertoire “res” de votre extension sous le nom “yourExtensionName.tmpl”, où “yourExtensionName” est la clé de l'extension que vous avez créée avec le générateur.

Mettre le fichier du gabarit à l'endroit que vous voulez dans le répertoire “fileadmin”. Puis, dans le champ “Setup” du gabarit TS écrire :plugin.tx_yourExtensionName_pi1.template = yourFileNameoù “yourExtensionName” est la clé de l'extension que vous avez créée avec le générateur et “yourFileName” est le nom du fichier avec son chemin relatif (i.e. fileadmin/....).

Changer la CSS par défaut

L'extension “sav_library” est fournie avec une configuration CSS par défaut qui est dans le fichier “ext_typoscript_setup.txt”. Vous pouvez surcharger les styles dans le fichier CSS de votre site pour les changer globalement. Vous pouvez aussi vouloir ne modifier certains styles par défaut que pour une extension particulière. Dans ce cas, vous avez juste besoin de placer un fichier CSS dans le répertoire “res” de votre extension sous le nom “yourExtensionName.css”, où “yourExtensionName” est la clé de l'extension que vous avez créée avec le générateur. Ce fichier CSS sera automatiquement ajouté dans la section <head> du contenu HTML engendré (voir “sav_library_example7” pour un tel cas).

Configuration des “Queriers”, “Viewers” et “Item Viewers”

L'extension “sav_library” est fournie avec une configuration par défaut des “queries”, “viewers” et “item viewers”. Elle peut facilement être modifiée.

La configuration est définie par le fichier “sav_library.xml” qui est dans le répertoire “res” de l'extension “sav_library”.

Le fichier XML contient trois parties :

  • la définition des “queriers”,
  • la définition des “viewers”,
  • la définition des “item viewers”.
Définition des “queriers”

Les “queriers” sont les méthodes d'exécution des requêtes pour chaque vue. Ils sont organisés en trois classes : les “queriers” de sélection (un pour chaque type de vue), les “queriers” de suppression et de mise à jour. Le nom de la méthode qui sera appelée est placé entre les balises du fichier XML.

Par exemple, UPDATE_defaultQuerier est la méthode qui sera appelé par défaut pour le “querier” UPDATE.

<update>
  UPDATE_defaultQuerier
</update>
Définition des “viewers”

Les “viewers” sont les méthodes qui permettent l'affichage des vues. Le principe de configuration est le même que pour les “queriers”.

Définition des “item viewers”

Les “items viewers” servent à la visualisation des champs. Le principe de leur définition est plus complexe. Expliquons-le à partir de l'exemple de la visualisation d'un champ de type “Date” :

<viewDate>
  <type>input</type>
  <conditions>
    <condition index="0">
      <field>eval</field>
      <ope>isEqual</ope>
      <value>date</value>
    </condition>
  </conditions>
</viewDateTime>

Tous les “item viewers” sont associés à deux méthodes. Une est pour le mode “normal” et l'autre pour le mode “edit”. Par convention, pour l'exemple précédent, les noms des méthodes sont respectivement “viewDate” et “viewDateEditMode”.

La définition d'un “item viewer” contient une balise pour le type et une pour les conditions. Le type et les conditions sont construits à partir du TCA. Pour l'exemple donné, pour un champ de type date, le type dans le TCA est “input” et “eval” prend la valeur “date”. Aussi, pour détecter ce cas, une condition sert à vérifier si le champ “eval” vaut “date”. Cette égalité est vérifiée en utilisant la balise “ope” avec la valeur “isEqual”.

Plusieurs opérateurs (balise “ope”) sont fournis : isEqual, isArray, isNotArray, arrayKeyExists, isNull, isNotNull. Ils sont définis sous forme de méthode dans le fichier “sav_library.php”.

Modification de la configuration du générateur “SAV Library”

Vous pouvez vouloir changer la configuration et l'adapter à vos besoins spécifiques. A cet effet, une extension spéciale, appelée “sav_library_extends”, a été développée pour étendre le générateur. Télécharger cette extension depuis le TER et l'installer.

Dans le répertoire de l'extension, on trouve plusieurs classes qui étendent celles du générateur par un mécanisme de XCLASS. En analysant le fichier “sav_library_extends.xml” du répertoire “res”, on trouvera un nouvel “item viewer” nommé “Example”. Il est associé à un nouveau type “example”.

Analyser la classe “ux_tx_savlibrary_defaultItemviewers” du fichier “class.ux_tx_savlibrary_defaultItemviewers.php” pour comprendre comment ajouter un nouvel “item viewer”.

Analyser aussi la classe “ux_tx_savlibrary_defaultVerifiers” du fichier “class.ux_tx_savlibrary_defaultVerifiers.php” pour voir comme ajouter un nouveau “verifier”.

Maintenant télécharger l'extension “sav_library_example5” et l'installer. C'est un exemple très simple. Editer-le avec le Kickstarter pour comprendre comment le nouveau type est associé avec le champ. Finalement, utiliser l'extension en Front End. Taper “Hello” dans le champ pour voir l'effet du “verifier”.

Référence pour la configuration des champs

Le générateur “SAV Library” est fondé sur le Kickstarter. Par conséquent, la configuration TCA engendrée par le Kickstarter reste disponible et peut être modifiée, pour chaque vue, par l'intermédiaire d'une interface de configuration du champ. Dans l'exemple suivant, la taille par défaut (l'attribut “size” dans le TCA) est remplacée par la valeur 40.

img-33

Le générateur “SAV Library” permet l'entrée de données en “Front End”. Toutefois, comme les extensions sont engendrées avec le Kickstarter, dans la plupart des cas, les données peuvent être aussi entrées en “Back End” au moyen de l'interface usuelle.

Les configurations suivantes sont spécifiques au générateur “SAV Library”. Elles sont organisées selon l'ordre alphabétique et les types associés du TCA sont rappelés entre parenthèses. Bien sûr, aucun type n'est fourni pour la configuration générale dont les propriétés peuvent être appliquées à tous les champs. Il en va de même pour les propriétés associées aux fonctions. Dans ce manuel, on utilisera indifféremment les termes propriété ou attribut pour désigner ces configurations .

Checkbox, single (field type: check)
displayAsImage

Property

displayAsImage

Data type

boolean

Description

Permet d'afficher la valeur de la “Check box” sous forme d'image à la place du label.

Default

0

doNotDisplayIfNotChecked

Property

doNotDisplayIfNotChecked

Data type

boolean

Description

Permet de ne pas afficher la valeur de la “Check box” (i.e. “Non”) lorsqu'elle n'est pas activée (évidemment cela ne s'applique pas lorsque l'on est en mode “edit”).

Default

0

Checkbox, 4 boxes or 10 boxes (field type: check_4 or check_10)
cols

Property

cols

Data type

integer

Description

Nombre de colonnes à afficher.

Default

1

displayAsImage

Property

displayAsImage

Data type

boolean

Description

Permet d'afficher les valeurs des “Check boxes” sous forme d'images à la place des labels.

Default

0

doNotDisplayIfNotChecked

Property

doNotDisplayIfNotChecked

Data type

boolean

Description

Permet de ne pas afficher la valeur de la “Check box” (i.e. “Non”) lorsqu'elle n'est pas activée (évidemment cela ne s'applique pas lorsque l'on est en mode “edit”).

Default

0

nbItems

Property

nbItems

Data type

integer

Description

Nombre d'items à afficher.

Default

Database relation - selectorbox, select global (field type: rel)
aliasSelect

Property

aliasSelect

Data type

Field name

Description

Définit un alias utilisé dans la requête SELECT. Les marqueurs ###fieldname### peuvent être utilisés, "fieldname" doit exister dans la table en relation.

Default

labelSelect

Property

labelSelect

Data type

Field name

Description

Définit le label pour le sélecteur à partir du champ "field_name".

Default

additionalTableSelect

Property

additionalTableSelect

Data type

Comma-separated table names

Description

Ajoute les tables dans la partie FROM de la requête. Cela peut être utilisé quand des tables doivent être jointes.

Default

orderSelect

Property

orderSelect

Data type

String

Description

Définit la clause ORDER pour le sélecteur. En général : field_name [desc].

Default

whereSelect

Property

whereSelect

Data type

String

Description

Définit la clause WHERE pour le sélecteur. Cela peut être :

. une clause conventionnelle MySQL.

- Le marqueur ###user### peut être utilisé. Il sera remplacé par l'uid de l'utilisateur.

- Le marqueur ###uid### peut être utilisé. Il sera remplacé par l'uid de l'enregistrement courant.

- Le marqueur ###CURRENT_PID### peut être utilisé. Il sera remplacé par l'uid de la page.

- Le marqueur ###STORAGE_PID### peut être utilisé. Il sera remplacé par l'uid de la page de stockage.

. ###group_list = list_of_comma_separed_fe_groups###. A utiliser avec un sélecteur sur la table fe_users. Cela vérifie si l'utilisateur appartient à un des groupes de la liste.

. ###group_list != list_of_comma_separed_fe_groups###. A utiliser avec un sélecteur sur la table fe_users. Cela vérifie si l'utilisateur n'appartient à aucun groupe de la liste.

Default

groupBySelect

Property

groupBySelect

Data type

String

Description

Définit la clause GROUP BY pour le sélecteur.

Default

content

Property

content

Data type

SQL SELECT statement

Description

La requête SQL doit avoir un alias "uid" et un "alias "label" qui seront utilisés pour la valeur à afficher.

Des marqueurs spéciaux peuvent être utilisés dans cette instruction :

. ###uid### sera remplacé par l'uid de l'enregistrement courant.

. ###uidSelected### sera remplacé par l'item sélectionné.

. ###user### sera remplacé par l'id de l'utilisateur.

. ###cruser### sera remplacé par l'id de l'utilisateur.

L'exemple suivant retourne un sélecteur avec les noms d'utilisateur MM en liaison avec l'utilisateur courant :

content =
 SELECT fe_users.uid as uid, fe_users.name as label
 FROM tx_mytable_rel_myfield_mm,fe_users
 WHERE
  tx_mytable_rel_myfields_mm.uid_local=###user###
 AND
  tx_mytable_rel_myfields_mm.uid_foreign=fe_users.ui
 ORDER by label;

Default

separator

Property

separator

Data type

string

Description

Cet attribut peut être utilisé quand le nombre de relations est supérieur à 1 (relation MM non véritable) pour remplacer le séparateur par défaut < br /> entre les items dans les vues de type "Show all" et "Show single".

Default

specialFields

Property

specialFields

Data type

comma-separated list of fields

Description

La valeur des champs de la liste sera propagée dans le marqueur ###special[fieldname]### quand il est utilisable.

Default

singleWindow

Property

singleWindow

Data type

boolean

Description

Dans le cas d'une relation MM, une double fenêtre de sélection permet la saisie des items. En utilisant cette option, un seul sélecteur multiple est utilisé.

Default

0

overrideEnableFields

Property

overrideEnableFields

Data type

boolean

Description

La méthode enableFields de la classe tslib_cObj qui filtre les enregistrements avec les champs start/end et hidden/fe_groups n'est pas appliquée à la requête associée au sélecteur.

Cela peut être utilisé dans des cas spécifiques quand il est nécessaire de retrouver tous les enregistrements.

Default

0

overrideStartingPoint

Property

overrideStartingPoint

Data type

boolean

Description

Par défaut quand des "starting points" sont associés à une extension, les informations sont recherchées dans les pages fournies. Cette option supprime ce fonctionnement par défaut.

Default

0

Database relation - field with element browser (field type: rel)
addDelete

Property

addDelete

Data type

boolean

Description

Une icône de suppression sera ajoutée devant chaque item.

Default

0

addUpDown

Property

addUpDown

Data type

boolean

Description

Deux boutons (haut et bas) seront ajoutés. Ils peuvent être utilisés pour réorganiser les items du sous-formulaire.

Default

0

addSave

Property

addSave

Data type

boolean

Description

Un bouton de sauvegarde et une ancre HTML seront ajoutés. Cela simplifie la sauvegarde quand il y a plusieurs items dans un sous- formulaire et que chaque item a une hauteur significative.

Default

0

cutNewButtonIfNotSaved

Property

cutNewButtonIfNotSaved

Data type

boolean

Description

Le bouton nouveau du sous-formulaire ne sera pas affiché si le formulaire dans lequel le sous-formulaire est inséré n'a pas été sauvegardé.

Default

0

keepFieldsInSubForm

Property

keepFieldsInSubForm

Data type

comma-separated list of fields

Description

Les valeurs des champs (utiliser tableName.fieldName) dans le formulaire parent seront conservés dans le sous-formulaire. Cela peut être utilisé pour traiter ces valeurs dans le sous-formulaire.

Si * est utilisé à la place de la liste (la virgule est le séparateur), tous les champs sont conservés.

Default

labelOnTitle

Property

labelOnTitle

Data type

boolean

Description

Le label sera affiché dans la barre titre d'un sous-formulaire dans le mode saisie.

Default

0

maxSubItems

Property

maxSubItems

Data type

integer

Description

Nombre d'items qui seront affichés dans le sous-formulaire. Tous les items sont affichés si la valeur est 0. Si ce attribut n'est pas utilisé, la valeur "maxitems" le TCA, c'est-à-dire "Max number of relations" dans le Kickstarter, sera prise en compte.

Default

noFirstLast

Property

noFirstLast

Data type

boolean

Description

Les boutons d'accès au premier au dernier item, associés au template "subFormAlt", seront cachés.

Default

0

subFormTemplate

Property

subFormTemplate

Data type

string

Description

Nom du template (e.g. subFormAlt). Par défaut le template "subForm" est utilisé.

Default

Date (field type: date)
format

Property

format

Data type

Date format

Description

Définit un format pour l'affichage d'une date. Le format est le même que celui de la fonction php strftime.

Exemple: jour et mois en clair, année

format = %A %B %Y;

Default

%d/%m/%Y

noDefault

Property

noDefault

Data type

boolean

Description

Permet de ne pas afficher la date, par défaut.

Default

0

Date and time (field type: datetime)
format

Property

format

Data type

Date format

Description

Définit un format pour l'affichage d'une date. Le format est le même que celui de la fonction php strftime.

Exemple: jour et mois en clair, année, heures, minutes

format = %A %B %Y at %H:%M;

Default

%d/%m/%Y %H:%M

noDefault

Property

noDefault

Data type

boolean

Description

Permet de ne pas afficher la date, par défaut.

Default

0

Files and images (field type: files)
addIcon

Property

addIcon

Data type

boolean

Description

Ajoute une icône devant l'hyperlien associé au fichier.

Default

0

uploadFolder

Property

uploadFolder

Data type

string

Description

Définit le chemin du répertoire dans lequel le fichier est enregistré. Cet attribut remplace celui défini dans le TCA.

Default

addToUploadFolder

Property

addToUploadFolder

Data type

string

Description

Ajoute un sous-répertoire au chemin défini par "uploadFolder".

Default

addToUploadFolderFromField

Property

addToUploadFolderFromField

Data type

Field name

Description

Ajoute le contenu du champ dont le nom est "field_name" à l'attribut "uploadFolder" en séparant par un "underscore".

Exemple : si "field_name" prend la valeur "my_field" et que le contenu du champ "my_field" vaut "123" alors

AddToUploadFolderFromField = my_field;

ajoutera "_123" à la valeur de "uploadFolder".

Default

size

Property

size

Data type

integer

Description

Définit l'attribut taille. Cet attribut remplace celui défini dans le TCA.

Default

iframe

Property

iframe

Data type

boolean

Description

Ouvre l'image dans un "iframe".

Default

width

Property

width

Data type

integer

Description

Définit la largeur de l'image ou de l'iframe.

Default

height

Property

height

Data type

integer

Description

Définit la hauteur de l'image ou de l'iframe.

Default

message

Property

message

Data type

string

Description

Si le fichier n'est pas une image, un hyperlien, défini par la chaîne, est créé.

Default

fieldMessage

Property

fieldMessage

Data type

Field name

Description

Définit l'attribut "message" avec le contenu du champ dont le nom est "field_name".

Default

alt

Property

alt

Data type

string

Description

Définit l'attribut HTML "alt" pour l'image.

Default

fieldAlt

Property

fieldAlt

Data type

Field name

Description

Définit l'attribut HTML "alt" à partir du contenu du champ dont le nom est "field_name".

Default

default

Property

default

Data type

string

Description

Définit l'image par défaut si le contenu du champ est vide, sinon l'image par défaut est “unknown.gif” du répertoire "sav_library/res/images".

Default

tsProperties

Property

tsProperties

Data type

string

Description

Ce attribut rend possible l'utilisation des possibilités graphiques de TYPO3. Quand il est utilisé, un objet de contenu de type IMAGE est engendré avec les propriétés en TS fournies.

Ne pas oublier que la configuration d'un champ se termine par un point-virgule. Aussi, si celui-ci est présent dans votre TS, il faut l'écrire ";".

Default

Functions

Les fonctions s'appliquent à la valeur d'un champ. Elles peuvent être aussi appliquées aux contenus de gauche et de droite. Dans ce cas, “Left” ou “Right” doit être ajouté au nom de la fonction et aux paramètres optionnels.

Property:

a

Property:

Data type

Data type:

Description

Description:

Default

Default:

func = makeDateFormat;

a

func = makeDateFormat;

Data type

Description

Cette fonction retourne la valeur formatée d'un “unix timestamp”.

Des paramètres additionnels peuvent être ajoutés :

. format = string; La chaîne doit être un format compatible avec la fonction php strftime().

Default

func = makeImage;

a

func = makeImage;

Data type

Description

Cette fonction construit un tag IMG où la valeur du champ est le nom du fichier contenant l'image.

Des paramètres additionnels peuvent être ajoutés :

. folder = string; (la chaîne définit le répertoire dans lequel le fichier doit se trouver.

. width = integer; (largeur de l'image en pixels).

. height = integer; (hauteur de l'image en pixels).

. alt = string; (la chaîne sera l'attribut "alt" de l'image).

. fieldAlt = field_name; (l'attribut "alt" sera la valeur du champ "field_name" pour l'enregistrement courant).

Default

func = makeXmlLabel;

a

func = makeXmlLabel;

Data type

Description

Cette fonction engendre un label depuis un fichier de langage xml. Elle fonctionne avec le paramètre suivant :

. xmlLabel = string; la chaîne est la définition du label. Par exemple, supposons que la value vienne d'un sélecteur dont la définition du label est dans le fichier locallang_db.xml dans l'extension "my_ext". Supposons aussi que le champ est "my_field". Pour obtenir le label, il faut écrire

xmlLabel = LLL:EXT:my_ext/locallang_db.xml:tx_myext.my_field.I.;

Default

General attributes
addEdit

Property

addEdit

Data type

boolean

Description

Quand le champ est utilisé dans une vue "Update form", cela ajoute un élément de saisie pour la mise à jour qui peut être utilisé avec le marqueur ###field_name_Edit### où "field_name" est le nom du champ. Voir aussi l'aide pour Form views (showAllItemTemplate) pour voir comment utiliser les marqueurs ###field[field_name, label]###.

Default

0

addEditIfNull

Property

addEditIfNull

Data type

boolean

Description

Idem que addEdit mais ajoute l'élément que si le champ est "vide".

Default

0

addEditIfAdmin

Property

addEditIfAdmin

Data type

boolean

Description

Idem que addEdit mais ajoute l'élément que si l'utilisateur a les droits de saisie pour le plugin.

Default

0

addLeftIfNotNull

Property

addLeftIfNotNull

Data type

string

Description

La chaîne sera ajoutée à gauche si la valeur du champ n'est pas nulle.

Default

0

addLeftIfNull

Property

addLeftIfNull

Data type

string

Description

La chaîne sera ajoutée à gauche si la valeur du champ est nulle.

Default

addNewIcon

Property

addNewIcon

Data type

integer

Description

Une nouvelle icône sera affichée devant le champ pendant le nombre de jours indiqué par le nombre entier.

Default

addRighIfNotNull

Property

addRighIfNotNull

Data type

string

Description

La chaîne sera ajoutée à droite si la valeur du champ n'est pas nulle.

Default

addRighIfNull

Property

addRighIfNull

Data type

string

Description

La chaîne sera ajoutée à droite si la valeur du champ est nulle.

Default

alias

Property

alias

Data type

Field name

Description

La valeur affichée sera fournie par la valeur du champ "field_name" pour l'enregistrement courant.

Default

classLabel

Property

classLabel

Data type

string

Description

La classe par défaut "label" associée au label sera remplacée par la chaîne.

Default

classValue

Property

classValue

Data type

string

Description

La classe par défaut "value" associé à la valeur affichée sera remplacée par la chaîne.

Default

classHTMLTag

Property

classHTMLTag

Data type

string

Description

La chaîne sera ajoutée comme classe à la balise HTML associée à l'item affiché (disponible partiellement).).

Default

styleLabel

Property

styleLabel

Data type

string

Description

La chaîne sera ajoutée comme un attribut de style au style associé au label.

Default

styleValue

Property

styleValue

Data type

string

Description

La chaîne sera ajoutée comme un attribut de style au style associé à la valeur affichée.

Default

styleHTMLTag

Property

styleHTMLTag

Data type

string

Description

La chaîne sera ajoutée comme un attribut de style à la balise HTML asociée à l'item affiché (disponible partiellement).

Default

cutIfNull

Property

cutIfNull

Data type

boolean

Description

N'affiche pas le champ s'il ne contient aucune valeur.

Default

0

cutIf

Property

cutIf

Data type

expression

Description

Expression peut être:

. fieldName=value

N'affiche pas le champ si son contenu est égal à la valeur "value". Les marqueurs ###user### ou ###cruser### (pareil que ###user### mais à utiliser quand un nouvel enregistrement est créé) seront remplacés par l'id de l'utilisateur. Utiliser EMPTY comme valeur pour tester un champ vide.

. fieldName!=value

N'affiche pas le champ si son contenu n'est pas égal à la valeur "value". Les mêmes marqueurs que ci-dessus peuvent être utilisés.

. ###usergroup=group_name###

N'affiche pas le champ si le groupe est un groupe valide pour l'utilisateur.

. ###usergroup!=group_name###

N'affiche pas le champ si le groupe n'est pas un groupe valide pour l'utilisateur.

. group=group_name

N'affiche pas le champ si le groupe est valide pour l'enregistrement courant. La vérification est effectuée à partir du champ "usergroup" de la table locale, s'il existe.

. group!=group_name

N'affiche pas le champ si le groupe n'est pas valide pour l'enregistrement courant. La vérification est effectuée à partir du champ "usergroup" de la table locale, s'il existe.

Default

cutLabel

Property

cutLabel

Data type

boolean

Description

N'affiche pas le label associé au champ.

Default

0

edit

Property

edit

Data type

boolean

Description

Rend le champ non modifiable dans une vue de type "input Form".

Default

1 in input forms

editAdminPlus

Property

editAdminPlus

Data type

boolean

Description

Rend le champ modifiable dans une vue de type "Input form" si l'utilisateur a le droit "Admin+". Pour être un utilisateur "Admin", le champ TSConfig de l'utilisateur doit contenir une ligne comme suit :

extKey_Admin=value

où "extKey" est la clé d'une extension et "value" est une valeur possible du champ "Input Admin Field" défini dans le flexform associé à l'extension.

L'utilisateur est "Admin+" si son TSConfig contient une ligne du type :

extKey_Admin=value+

Default

0

func

Property

func

Data type

Function name

Description

Voir l'aide associée aux fonctions.

Default

funcAddLeftIfNotNull

Property

funcAddLeftIfNotNull

Data type

string

Description

La chaîne sera ajoutée à gauche si le résultat de la fonction "function_name" n'est pas nulle.

Default

funcAddLeftIfNull

Property

funcAddLeftIfNull

Data type

string

Description

La chaîne sera ajoutée à gauche si le résultat de la fonction "function_name" est nulle.

Default

funcAddRightIfNotNull

Property

funcAddRightIfNotNull

Data type

string

Description

La chaîne sera ajoutée à droite si le résultat de la fonction "function_name" n'est pas nulle.

Default

funcAddRightIfNull

Property

funcAddRightIfNull

Data type

string

Description

La chaîne sera ajoutée à droite si le résultat de la fonction "function_name" est nulle

Default

fusion

Property

fusion

Data type

{begin, end}

Description

. fusion = begin;

Commence la fusion pour le champ,c'est-à-dire que les champs suivants seront affichés sur la même ligne.

. fusion = end;

Termine la fusion pour le champ, c'est-à-dire que le champ suivant sera affiché sur la ligne suivante.

Default

label

Property

label

Data type

string

Description

Le label à afficher sera fourni par la chaîne.

Default

mail

Property

mail

Data type

boolean

Description

Un mél sera associé au champ.

Si le champ est un "checkbox", il sera utilisé comme comme "flag" pour vérifier si un mél a été envoyé. Les informations relatives au mél sont les suivantes :

. fieldForCheckMail=field_name; Le message sera envoyé si la valeur du champ pour l'enregistrement courant n'est pas nulle.

. mailIfFieldSetTo=string; Le mél sera envoyé si la valeur du champ courant était nulle ou égale à 0 et que le champ est positionné à la valeur fournie par la chaîne.

. mailSender=string; Mél de l'envoyeur. Le marqueur ###user_email### sera remplacé par le mél de l'utilisateur.

. mailReceiver=string; Mél du récepteur du message.

. mailReceiverFromField=field_name; Le champ "field_name" contient le mél de la personne qui doit recevoir le message.

. mailReceiverFromQuery=MySQL_Query; Le mél du récepteur est obtenu à l'aide d'une requête SELECt avec un alias "value" qui sera utilisé comme mél du récepteur. Exemple:

SELECT email as value from fe_users where .....

. mailSubject=string; Sujet du message. Les marqueurs ###fieldname### sont autorisés et seront remplacés par leur valeur courante.

. mailMessage=string, Contenu du message. Les marqueurs ###fieldname### sont autorisés et seront remplacés par leur valeur courante.

. mailcc=string; Si cet attribut est utilisé, la chaîne est utilisée comme Cc: dans l'envoi du message.

Le multilinguisme par l'intermédiaire du fichier locallang.xml peut être utilisé avec la syntaxe $$$tag$$$ qui sera remplacée par sa valeur selon le langage utilisé dans la configuration.

. mailMessageLanguage=string; Ce paramètre force le langage à la valeur de la chaîne.

. mailMessageLanguageFromField=fieldname; Ce paramètre force le langage à la valeur du champ (par exemple un sélecteur).

Default

0

mailAlways

Property

mailAlways

Data type

boolean

Description

La propriété mail doit être activée (mail = 1;) quand cette propriété est utilisée.

Le message sera envoyé lors de la sauvegarde. Les informations relatives au mél sont les suivantes :

. mailSender=string; Mél de l'envoyeur. Le marqueur ###user_email### sera remplacé par le mél de l'utilisateur.

. mailReceiver=string; Mél du récepteur du message.

. mailReceiverFromField=field_name; Le champ "field_name" contient le mél de la personne qui doit recevoir le message.

. mailReceiverFromQuery=MySQL_Query; Le mél du récepteur est obtenu à l'aide d'une requête SELECT avec un alias "value" qui sera utilisé comme mél du récepteur. Exemple:

SELECT email as value from fe_users where .....

. mailSubject=string; Sujet du message. Les marqueurs ###fieldname### sont autorisés et seront remplacés par leur valeur courante.

. mailMessage=string, Contenu du message. Les marqueurs ###fieldname### sont autorisés et seront remplacés par leur valeur courante.

. mailcc=string; Si cet attribut est utilisé, la chaîne est utilisée comme Cc: dans l'envoi du message.

Le multilinguisme par l'intermédiaire du fichier locallang.xml peut être utilisé avec la syntaxe $$$tag$$$ qui sera remplacée par sa valeur selon le langage utilisé dans la configuration.

. mailMessageLanguage=string; Ce paramètre force le langage à la valeur de la chaîne.

. mailMessageLanguageFromField=fieldname; Ce paramètre force le langage à la valeur du champ (par exemple un sélecteur).

Default

0

mailAuto

Property

mailAuto

Data type

boolean

Description

La propriété mail doit être activée (mail = 1;) quand cette propriété est utilisée.

Le message sera envoyé lors de la sauvegarde si le champ n'est pas vide et si au moins un champ du formulaire a été modifié. Les informations relatives au mél sont les suivantes :

. mailSender=string; Mél de l'envoyeur. Le marqueur ###user_email### sera remplacé par le mél de l'utilisateur.

. mailReceiver=string; Mél du récepteur du message.

. mailReceiverFromField=field_name; Le champ "field_name" contient le mél de la personne qui doit recevoir le message.

. mailReceiverFromQuery=MySQL_Query; Le mél du récepteur est obtenu à l'aide d'une requête SELECT avec un alias "value" qui sera utilisé comme mél du récepteur. Exemple:

SELECT email as value from fe_users where .....

. mailSubject=string; Sujet du message. Les marqueurs ###fieldname### sont autorisés et seront remplacés par leur valeur courante.

. mailMessage=string, Contenu du message. Les marqueurs ###fieldname### sont autorisés et seront remplacés par leur valeur courante.

. mailcc=string; Si cet attribut est utilisé, la chaîne est utilisée comme Cc: dans l'envoi du message.

Le multilinguisme par l'intermédiaire du fichier locallang.xml peut être utilisé avec la syntaxe $$$tag$$$ qui sera remplacée par sa valeur selon le langage utilisé dans la configuration.

. mailMessageLanguage=string; Ce paramètre force le langage à la valeur de la chaîne.

. mailMessageLanguageFromField=fieldname; Ce paramètre force le langage à la valeur du champ (par exemple un sélecteur).

Default

0

onLabel

Property

onLabel

Data type

boolean

Description

La valeur du champ sera affichée à la place du label. Peut-être cette option n'est pas très utile car le label peut être "coupé", i.e. ne pas être affiché.

Default

0

orderLinkInTitle

Property

orderLinkInTitle

Data type

boolean

Description

Si ce paramètre est activé, un hyperlien sera engendré dans la barre de titre de la vue "showAll". L'hyperlien est associé au champ si le marqueur ###fieldname### est utilisé dans la section "showAllTitle". Des clauses ORDER doivent être définies dans la section "Where Tags" de "Query Form" avec les signes "+" et "-" ajoutés après "fieldname".

Par exemple, utiliser:

'fieldmane+' => array('order' => 'tablename.fieldname'),

'fieldmane-' => array('order' => 'tablename.fieldname desc'),

Default

orderLinkInTitleSetup

Property

orderLinkInTitleSetup

Data type

string

Description

Cette propriété contrôle l'affichage du lien lorsque “orderLinkInTitle” est utilisé. Le format est “param1:param2:param3” où “param1” à “param3” peuvent prendre les valeurs suivantes :

. value : la valeur du champ est affichée,

. link : la valeur du champ est affichée avec un lien pour permuter le tri,

. asc : une icône est affichée avec un lien pour un tri ascendant,

. desc : une icône est affichée avec un lien pour un tri ascendant,

. ascdesc : deux icônes sont affichées avec des liens séparés pour faire un tri ascendant ou descendant,

. s'il n'y a pas de valeur, rien n'est affiché.

(voir Comment changer l'ordre des items en cliquant sur le label dans la barre de titre ? pour des exemples).

Default

link:
query

Property

query

Data type

SQL statements

Description

La requête sera exécutée après l'enregistrement des données. Aussi, ce paramètre ne peut être utilisé qu'avec des vues de type "input" ou "update".

Comme toute requête peut être écrite, cette propriété ne peut être utilisée que si un administrateur du site a validé le champ “Allow the use of the “query” property” dans l'onglet “Avancées” du flexform associé à l'extension.

Cela peut être utile, par exemple, pour mettre à jour une table particulière quand les données courantes ont été sauvées. Plusieurs requêtes peuvent être enchaînées. Elles doivent être séparées par ";".

Des marqueurs spéciaux peuvent être utilisés dans la requête :

. ###uid### sera remplacé par l'uid de l'enregistrement courant.

. ###CURRENT_PID### sera remplacé par l'uid de la page courante.

. ###STORAGE_PID### sera remplacé par l'uid de la page de stockage.

. ###user### sera remplacé par l'id de l'utilisateur.

. ###value### sera remplacé par la valeur courante du champ.

Default

queryOnValue

Property

queryOnValue

Data type

string

Description

La requête, comme définie au dessus, sera exécutée si la valeur courante du champ est égale à la chaîne à droite de l'expression.

Default

queryForEach

Property

queryForEach

Data type

Field name

Description

Si le champ est une véritable relation MM, la requête, comme définie au dessus, sera exécutée pour tous les enregistrements en relation.

Le marqueur spécial ###field_name###, où "field_name" est le champ dans lequel est définie la relation, peut être utilisé pour identifier l'enregistrement. Il sera remplacé par l'uid de l'enregistrement associé.

Default

reqValue

Property

reqValue

Data type

SQL SELECT statement

Description

La requête SELECT doit avoir un alias "value" qui sera utilisé comme valeur à afficher.

Des tags spéciaux peuvent être utilisés dans la requête :

. ###uid### sera remplacé par l'uid de l'enregistrement courant.

. ###uidItem### sera remplacé par l'uid de l'item courant dans un sous-formulaire.

. ###user### sera remplacé par l'id de l'utilisateur.

. ###row[field_name]###, où "field_name" est le nom d'un champ de l'enregistrement courant, sera remplacé par sa valeur.

L'exemple suivant retourne le nom de l'utilisateur qui a créé l'enregistrement courant, avec comme hypothèse que tx_mytable est la table locale :

reqValue= SELECT name AS value
FROM fe_users
WHERE uid=(SELECT cruser_id FROM tx_mytable WHERE uid=###uid###);

Default

stdWrapValue

Property

stdWrapValue

Data type

TS syntax

Description

Exécute le TypoScript d'une propriété stdWrap. Cette propriété peut gérer toute expression TS correctement formée.

Ne pas oublier que la configuration d'un champ se termine par un point-virgule. Aussi, si celui-ci est présent dans votre TS, il faut l'écrire ";".

Default

tsObject

Property

tsObject

Data type

cObject

Description

Définit un objet de contenu en TS (e.g. TEXT, IMAGE, ...)

Default

tsProperties

Property

tsProperties

Data type

String

Description

Définit les propriétés de l'objet de contenu.

Des marqueurs ###fieldName### peuvent être utilisés. Le marqueur sera remplacé par la valeur courante du champ.

Des marqueurs de langage $$$tag$$$ peuvent aussi être utilisés. Le marqueur sera remplacé par sa valeur en fonction de la configuration du langage.

Ne pas oublier que la configuration d'un champ se termine par un point-virgule. Aussi, si celui-ci est présent dans votre TS, il faut l'écrire ";".

Default

verifier

Property

verifier

Data type

Verifier name

Description

Des vérificateurs peuvent être utilisés pour vérifier si un champ satisfait une contrainte. Chaque champ peut avoir un vérificateur. Chaque vérificateur est associé à un paramètre.

Des nouveaux vérificateurs peuvent être définis. Ils doivent être ajoutés dans la classe tx_savlibrary_verifiers définie dans le fichier : class.tx_savlibrary_verifiers.php.

La valeur "verifier_name" peut être :

. isValidPattern

. isValidLength

. isValidInterval

. isValidQuery

Default

verifierMessage

Property

verifierMessage

Data type

string

Description

Permet de remplacer le message d'erreur par défaut.

Le multilinguisme par l'intermédiaire du fichier locallang.xml peut être utilisé avec la syntaxe $$$tag$$$ qui sera remplacée par sa valeur selon le langage utilisé dans la configuration.

Le marqueur $$$label[fieldName]$$$ sera remplacé par le label associé au champ selon le langage utilisé dans la configuration.

Default

verifierParam

Property

verifierParam

Data type

expression

Description

L'expression peut être :

. une expression régulière pour le vérificateur "isValidPattern".

Par exemple /^[A-Za-z0-9_]*$/ autorisera une saisie qui contient des lettres, des nombres et des "underscores".

. un entier pour le vérificateur "isValidLength".

. un intervalle [a, b] où a et b sont des entiers pour le vérificateur "isValidInterval".

. une requête SELECT pour le vérificateur "isValidQuery". Le marqueur ###value### dans la requête sera remplacé par la valeur du champ. Le marqueur ###uid### sera remplacé par l'uid de l'enregistrement courant.

Default

verifierSetWarning

Property

verifierSetWarning

Data type

boolean

Description

Si cet attribut est validé, une erreur détectée devient un warning. Dans ce cas, le contenu du champ est écrit dans la table (ce qui n'est pas le cas pour les erreurs) et un message est affiché.

Default

0

wrapItem

Property

wrapItem

Data type

string

Description

La chaîne sera utilisée pour "wrapper" l'élément. La syntaxe est celle du TypoScript.

Le multilinguisme par l'intermédiaire du fichier locallang.xml peut être utilisé avec la syntaxe $$$tag$$$ qui sera remplacée par sa valeur selon le langage utilisé dans la configuration.

Le marqueur $$$label[fieldName]$$$ sera remplacé par le label associé au champ selon le langage utilisé dans la configuration.

Default

Radio buttons (field type: radio)
cols

Property

cols

Data type

integer

Description

Nombre de colonnes à afficher.

Default

1

displayAsImage

Property

displayAsImage

Data type

boolean

Description

Permet d'afficher les valeurs des “radio buttons” sous forme d'images à la place des labels.

Default

0

Selectors (field type: select)
func

Property

func

Data type

Function name

Description

Associe une fonction aux items d'un sélecteur. Le paramètre function_name peut être :

. makeItemLink

. makeExtLink

. makeLink

. makeUrlLink

. makeEmailLink

Voir les fonctions pour connaître les paramètres associés.

Default

separator

Property

separator

Data type

character or string

Description

Peut être utilisé avec des sélecteurs associés aux relations MM pour remplacer le séparateur par défaut <br /> entre les items dans les vues "Show all" et "Show single".

Default

String Input (field type: input)
size

Property

size

Data type

integer

Description

Définit la taille du champ.

Default

30

Textarea (field type: textarea)
cols

Property

cols

Data type

integer

Description

Définit le nombre de colonnes du "textarea". Cet attribut remplace celui défini dans le TCA.

Default

rows

Property

rows

Data type

integer

Description

Définit le nombre de lignes du "textarea". Cet attribut remplace celui défini dans le TCA.

Default

Textarea with RTE (field type: textarea_rte)
height

Property

height

Data type

integer

Description

Définit la hauteur du "textarea". L'entier représente la hauteur en pixels (45 pixels sont ajoutés automatiquement).

Default

width

Property

width

Data type

integer

Description

Définit la largeur du "textarea". L'entier représente la largeur en pixels.

Default

XML JpGraph (field type: graph)
graphTemplate

Property

graphTemplate

Data type

string

Description

Nom du fichier template XML depuis la racine du site.

Default

markers

Property

markers

Data type

string

Description

Liste de définitions séparées par une virgule. Exemple: “marker#begin = ###beginPeriod###” signifie que le “marker” dont l'id est “begin”

dans le template sera remplacé par le marqueur “###beginPeriod###”, c'est-à-dire par l'alias “beginPeriod”.

Default

Configuration des champs au moyen du TSConfig de la page

La configuration d'un champ peut être changée au moyen du TSConfig de la page. La syntaxe est la suivante :

tx_extensionKey.formName.viewType.fieldName.fieldProperty = propertyValue.

Par exemple, supposons que l'on veuille changer la largeur et la hauteur de l'image de la vue “All” de l'exemple 1.

  • “extensionKey” ne doit pas comporter de caractères “_” et prend la valeur “savlibraryexample1”,
  • “formName” prend la valeur “Contact”,
  • “viewType” prend la valeur “showAll” (utiliser “showSingle” ou “inputForm” pour les autres types),
  • “fieldName” prend la valeur “image”,
  • “fieldProperty” prend la valeur “width” ou “height”.

On obtient finalement la configuration suivante :

tx_savlibraryexample1.Contact.showAll.image.width =200
tx_savlibraryexample1.Contact.showAll.image.height = 200

Configurations de maintenance

Le générateur d'extensions “SAV Library” possède des indicateurs pour gérer les opérations de maintenance.

Un indicateur global de maintenance est disponible au niveau de l'extension “sav_library” dans le gestionnaire d'extensions. En activant la case de maintenance globale, un message de maintenance sera affiché pour toutes les extensions construites avec le générateur et les filtres ne seront pas affichés.

En fournissant une liste d'identificateurs, séparés par une virgule, d'utilisateurs FE, ceux-ci continueront à voir les extensions et les filtres. La maintenance globale est utile pour les développeurs quand des changements globaux sont effectués sur le générateur.

img-34

La configuration de la maintenance peut aussi être effectuée au niveau de l'extension. Pour obtenir un indicateur pour la maintenance dans le gestionnaire d'extension, vous devez sélectionner “Add maintenance” lorsque vous sauvez votre extension dans le Kickstarter. En sélectionnant cet indicateur, un message de maintenance sera affiché hormis pour les utilisateurs définis dans la configuration du générateur “SAV Library”.

img-35

Configuration de la génération du code

Vous pouvez choisir le type de configuration engendrée par le générateur. Celle-ci peut être sous la forme d'un fichier XML ou directement introduite comme un tableau php dans la classe du répertoire “pi1” de l'extension engendrée. Supposons que nous voulions engendrer l'extension “sav_library_example1”.

  • En sélectionnant la case “Generate XML configuration”, la configuration sera sauvegardée dans le fichier “pi1/ tx_savlibraryexample1_ pi1.xml”. La méthode initExtConfig() est automatiquement modifiée pour lire la configuration dans le fichier XML. Cette configuration est celle par défaut lorsque le générateur est activé lors de la création de l'extension.
  • Si vous ne sélectionnez pas cette case, la configuration est directement sauvegardée dans le fichier “pi1/class.tx_savlibraryexample1_ pi1.php” sous la forme d'un tableau dans la méthode initExtConfig().

Mise en cache

Un mécanisme de cache a été introduit avec la version 3.1.0 du générateur “SAV Library”. Le comportement du “plugin” peut être changé pour chaque formulaire. Par défaut, le “plugin” est de type USER_INT pour chaque formulaire, c'est-à-dire qu'il n'y a pas de mise en cache. En sélectionnant “Allow caching” dans la section “Forms” du Kickstarter, le “plugin” devient de type USER pour ce formulaire. Cela signifie que le mécanisme de cache devient opérationnel. Un paramètre “cHash” est alors ajouté à chaque lien permettant l'accès à la vue de type “showSingle” associée à l'item.

img-36

Un paramètre “cHash” peut aussi être ajouté à d'autres liens comme :

  • le bouton “Fermer”,
  • les flèches dans les formulaires et/ou sous-formulaires,
  • les sélecteurs de page dans les formulaires et/ou sous-formulaires.

Cette configuration est possible dans l'onglet “Avancées” (“Advanced”) du flexform associé à l'extension (voir ci-dessous).

Quand le “plugin” est de type USER (cache actif) et qu'un item est mis à jour dans une vue de type “inputForm”, le cache de la page courante est vidé lors de la sauvegarde de sorte que les informations mises à jour puissent être affichées. Si vous avez besoin de vider le cache pour d'autres pages, sélectionner les dans le flexform.

Quand le “plugin” est de type USER_INT (pas de cache) et qu'un item est mis à jour dans une vue de type “inputForm”, il peut être nécessaire de vider le cache des pages d'un autre formulaire de la même extension qui est de type USER. C'est le cas, par exemple, quand un formulaire est utilisé pour l'administration et un autre pour l'affichage des données. Sélectionner les pages dont le cache doit être vidé dans le flexform.

img-37

Tutoriel 1 : Liste de contacts (Contact List)

Introduction

Cet exemple est repris de l'excellent “TYPO3Journal” http://www.typo3journal.info/articles/developpement.html . Il permet la création d'une liste de contacts avec nom, prénom, adresse, photo.

Vous pouvez télécharger cet exemple depuis le TER (sav_library_example1). Installez-le et utilisez-le. Les paragraphes suivants expliquent comment créer l'extension et les fonctionnalités associées, si vous préférez une approche progressive.

Création de l'extension

Créer l'extension en remplissant les sections relatives aux langages, plugin, tables ainsi que les champs en utilisant le Kickstarter comme dans le tutoriel originel.

img-38

Démarrer le générateur “SAV Library”

Cliquer sur l'icône en forme de croix à droite de “SAV Library Extension Generator”.

img-39

Cliquer sur l'icône d'aide contextuelle (icône en forme de point d'interrogation) et lire la description associée à chaque champ .

Sélectionner la case “Generate Form” et cliquer sur “Update”. Le générateur est alors actif.

Définition des vues associées à un formulaire

Le générateur d'extension permet de définir autant de vue que vous le souhaitez pour une même extension. Quatre types de vues sont disponibles :

  • une vue de type “Show all” permet d'afficher tous les items associés à une requête,
  • une vue de type “Show single” permet d'afficher seulement un item,
  • une vue de type “Input form” permet de faire les saisies en Front End,
  • une vue de type “Alt form” permet de développer des vues “update” et “print”.

Une extension usuelle comporte généralement un formulaire avec trois vues : une vue “Show all” pour présenter les items, une vue “Show Single” pour présenter un item et une vue “Input form” pour saisir les donner. Toutefois, on peut avoir une seule vue “Show all” mais on peut tout aussi bien avoir plusieurs formulaires chacun ayant plusieurs vues.

Pour définir vos vues, cliquer sur l'icône en forme de croix à droite de “Form views”.

Cliquer sur l'icône d'aide contextuelle (icône en forme de point d'interrogation) et lire la description associée à chaque champ .

img-40

img-41

Donner un titre à la vue (par exemple “All”, “Single”, “Input”), définir son type à l'aide du sélecteur et mettre à jour.

La figure ci-dessous montre une vue de type “Show all” dont le nom est ”All”.

img-42

Remplir le champ “showAllItemTemplate”. En général, il s'agit d'une liste <ul> avec des éléments <li> qui contiennent les champs à afficher. Les champs doivent être écrits sous la forme de marqueurs du type ###fieldname###.

img-43

Procéder de manière similaire pour la vue “Show single”. Toutefois, hormis le titre et le type, il n'y a rien de particulier à remplir pour le moment.

img-44

Faire de même pour la vue de type “Input form”.

img-45

Définition des requêtes

Cliquer sur l'icône en forme de croix à droite de “Form queries”. Le champ “Local table” est automatiquement rempli avec le nom de la première table que vous avez définie.

img-46

Cliquer sur l'icône d'aide contextuelle et lire la description associée à chaque champ .

Donner un nom à la requête et mettre à jour. Par exemple, “Query” est le nom donné ici à la requête.

Définition des formulaires

Maintenant les formulaires peuvent être définis. Cliquer sur l'icône en forme de croix à droite de “Forms”.

img-47

Cliquer sur l'aide contextuelle et lire la description associée à chaque champ .

Donner un nom au formulaire, utiliser les sélecteurs pour choisir la vue “Show all”, la vue “Show single”, la vue “Input form” et la requête.

Définition des champs à afficher

Cliquer sur le nom de la table dans la base de données. Le récapitulatif des champs a été modifié. Trois onglets sont maintenant disponibles. Ils portent le nom des vues. En cliquant sur un onglet vous avez accès à la configuration de tous les champs pour la vue sélectionnée (le changement est global).

img-48 img-49

En cliquant sur le nom d'un champ, vous accédez directement à sa configuration.

img-50

En cliquant sur l'icône rouge en forme de pointe, vous retournez au récapitulatif en haut de la page. En utilisant le sélecteur et son icône de gauche, vous pouvez changer l'ordre du champ dans la vue. Cela signifie que l'ordre du champ peut être différent dans chaque vue.

Les onglets sont utilisés pour voir et modifier les paramètres de configuration d'une vue (le changement de vue est local - utiliser les onglets en haut de la page pour effectuer un changement global de vue).

Une aide contextuelle est disponible pour chaque type d'item. Cliquer sur l'icône d'aide contextuelle pour connaitre les propriétés applicables au champ. N'oubliez pas de cliquer aussi sur “VOIR AUSSI :” qui permet, par exemple, de voir les propriétés générales de configuration.

Montrons sur un exemple comment cela fonctionne. Dans les vues “All” et “Single”, nous voulons afficher le nom. Dans la vue “Input”, nous souhaitons entrer ce nom dans un champ dont la taille est 40. Les captures d'écran suivantes montrent la configuration du champ pour chaque vue. Ne pas oublier de sélectionner l'item .

img-51

img-52

img-53

Pour le moment, sélection aussi “lastname” et “image” dans la vue “All” et tous les champs dans les vues “Single” et “Input”.

Création de l'extension

Les champs sélectionnés sont affichés selon la vue choisie avec l'onglet actif. Cliquer maintenant sur “View result”.

img-54

Cliquer sur l'aide contextuelle et lire la description associée à chaque champ . Elle explique la façon d'utiliser les fonctions de version, de “debug” et de maintenance.

img-55

Cliquer sur “WRITE” pour engendrer l'extension . Selon votre serveur, cette opération peut prendre quelques secondes. Une configuration de la mémoire à 48Mo est correcte.

img-56

Cliquer ensuite sur “Install extension”. Une nouvelle fois, selon votre serveur, cela peut prendre quelques secondes.

img-57

Cliquer sur “Make updates”. Votre extension “sav_library_example1” est maintenant active et prête à être insérée comme contenu de page.

Utilisation de l'extension

Créer une page, insérer un élément de contenu de type “plugin” puis sélectionner “Liste de contacts” (“Contact list” si votre BE est en anglais) dans la liste.

La configuration du “plugin” s'effectue par l'intermédiaire du “flexform” qui a certaines valeurs par défaut. Sélectionner le nom du formulaire, c'est-à-dire “Contact” dans le sélecteur “Choisir un formulaire” (“Select form” avec un BE en anglais), sauvegarder l'élément de contenu et vider le cache .

img-58

Visualiser la page en Front End. Vous devriez voir la capture d'écran suivante avec un message en français, si votre site utilise cette langue.

img-59

Cliquer sur l'icône de droite pour entrer dans le mode saisie. Une nouvelle icône apparait à gauche du formulaire. Cliquer sur cette icône pour créer un nouvel item.

img-60

La vue engendrée pour la saisie est affichée. Comme il peut être remarqué sur la capture d'écran suivante, la taille du champ “firstname” est plus grande que celle des autres champs. Ceci est dû au paramètre de configuration “size = 40;” que nous avons ajouté. La taille des autres champs est celle par défaut, c'est-à-dire 30.

img-61

Remplir le formulaire avec les informations. Télécharger l'image et sauvegarder.

img-62

Quand vous avez terminé les saisies, quitter le vue (vous pouvez aussi utiliser le bouton “Sauver et quitter”) Maintenant, un item est affiché dans votre vue “All”.

img-63

Cliquer sur le bouton de changement de mode pour ajouter un nouve item, modifier ou supprimer le précédent.

img-64

A ce niveau, rien de plus ne peut être fait et vous ne pouvez pas afficher les informations de la vue “Single”. Pour cela il faut modifier légèrement l'extension. Supposons, par exemple, que nous souhaitions ouvrir la vue “Single” en cliquant sur l'image.

Cliquer sur le gestionnaire d'extension, sélectionner votre extension puis sélectionner “Edit in Kickstarter”. Avec l'extension “sav_library”, le Kickstarter devient un outil de configuration.

Cliquer sur la table “Members” puis sur l'onglet “All” et finalement aller au champ “image” en cliquant sur son nom.

img-65

Nous allons maintenant ajouter un paramètre de configuration, aussi appelé propriété ou attribut, à ce champ. En utilisant la syntaxe “func = makeItemLink;” nous associons un lien à l'image.

img-66

Sauver l'extension en cliquant sur “View result” puis sur “WRITE” comme précédemment. Retourner en Front End, recharger la page, cliquer sur l'image pour accéder à la vue “Single”.

img-67

img-68

Noter qu'en cliquant sur l'icône en haut à droite, on accède à la vue “Input” et que l'on peut modifier le contenu.

Comment faire ?

Comment spécifier la taille de l'image ?

L'image est affichée dans les vues “All” et “Single”. Utiliser les paramètres suivants pour définir une image 50x50, par exemple dans la vue “All” :

  • width = 50;
  • height = 50;
Comment changer le nombre d'items affichés par page dans la vue “showAll” ?

Par défaut, la valeur 10 est utilisée pour “Nombre max d'éléments affichés” (“Max number of items”) dans le flexform. Modifier simplement cette valeur. En utilisant la valeur 0, tous les items sont affichés.

Avec la configuration par défaut :

img-69

En utilisant la valeur 2 pour “Nombre max d'éléments affichés” (“Max number of items”), on obtient :

img-70

En cliquant sur le flèche, la page suivante est affichée. Utiliser les flèches pour aller en avant ou en arrière.

img-71

Comment avoir un accès direct aux pages ?

Utiliser le second gabarit, fourni avec l'extension, “showAllAlt” dans le champ “showAllItemParentTemplate” comme suit :

img-72

L'affichage devient :

img-73

Cliquer sur la page souhaitée.

L'affichage “Page 1 Page 2” est la valeur par défaut. Pour enlever “Page” devant chaque nombre, modifier le fichier “pi/locallang.xml” en insérant la ligne suivant dans la balise <languageKey> :

<label index="pi_list_browseresults_page"></label>

On obtient alors l'affichage suivant :

img-74

Comment introduire un sélecteur alphabétique ?

Il est souvent utile de sélectionner des enregistrements sur la première lettre du nom, par exemple. L'extension “sav_filter_abc” a été construite à cet effet.

Télécharger l'extension “sav_filter_abc” depuis le TER, lire la documentation et installer l'extension.

Ajouter un élément de contenu de type “plugin” dans la même page que celle où est l'extension “sav_library_example1” et sélectionner “sav_filter_abc”.

Configurer le “flexform” en remplissant le nom de la table et le nom du champ. Une aide contextuelle est disponible.

img-75

Sauvegarder votre configuration et aller en Front End.

img-76

Seules les lettres correspondant à la première lettre du nom dans d'enregistrements existants peuvent être sélectionnées. Cliquer sur la lettre pour filtrer les enregistrements.

img-77

Tutoriel 2: Liste de CD (CD Album)

Introduction

Cet exemple est tiré de la vidéo de Kasper Episode III (http://typo3.org/documentation/videos/wmv-format/). Il permet la création d'une liste de CD. Cela inclut le nom de l'artiste, le titre de l'album, la date d'achat, l'image de couverture, le site web des artistes, la catégorie de musique.

Vous pouvez télécharger cet exemple depuis le TER (sav_library_example2). Installer le plugin, ajouter vos catégories de CD dans le Back End . Les paragraphes suivants expliquent certains points de la création de l'extension et des nouvelles fonctionnalités si vous ne téléchargez pas l'exemple depuis le TER.

Création de l'extension

Procéder exactement comme dans la vidéo.

Définir vos vues, requêtes et formulaire comme dans l'exemple 1.

Configuration

Configurer le gabarit de la vue “All”.

img-78

Configurer les champs de la vue “All” de la table “tx_savlibraryexample2_cds”.

  • Sélectionner les champs “artist”, “album_title”, “date_of_purchase”, “category”, “coverimage”.
  • Ajouter la configuration suivante dans le champ “artist”. Cela associe un lien au nom de l'artiste :
  • func = makeItemLink;
  • Ajouter les configurations suivantes dans le champ “coverimage”. Elles définissent la taille de l'image et permettent de l'ouvrir dans une nouvelle fenêtre lorsque l'on clique dessus.
  • width = 70;
  • height = 70;
  • func = makeNewWindowLink;

Configurer les vues “Single” et “Input” en sélectionnant les champs. Aucun paramètre de configuration n'est nécessaire.

Sauvegarder l'extension comme dans “Example 1”.

Utilisation de l'extension

Créer une page, insérer un élément de contenu de type “plugin” et sélectionner “Collection de CD” (“CD Collection”).

La configuration du “plugin” est réalisée au moyen d'un flexform qui possède certaines valeurs par défaut. Sélectionner le nom du formulaire “Liste de CD” (“CD Album” avec le sélecteur “Choisir un formulaire” (“Select form”), sauvegarder et vider les caches .

Ajouter vos catégories de CD en Back End (en mode liste, créer un ou plusieurs enregistrements “Catégorie de CD” : Rock, Jazz, Pop...).

Finalement, aller en Front End et ajouter les items de votre collection de CD.

img-79

Comme on peut le voir, une nouvelle icône est associée aux champs “artist” et “album_title”. Elle indique que ces champs sont obligatoires (si vous avez sélectionnez “Required” comme dans la vidéo, bien sûr !). Vous ne pourrez pas sauvegarder votre enregistrement si ces champs sont vides et un message d'erreur sera affiché.

Notons que vous pouvez rendre n'importe quel champ obligatoire en utilisant le paramètre de configuration suivant :

required = 1;

Vous pouvez utiliser le sélecteur de calendrier en cliquant sur le bouton associé à la date.

Les icônes affichées pour le RTE dépendent de sa configuration pour le Front End.

Comment faire ?

Comment faire pour afficher un titre dans la barre de titre de la vue ?

Un titre peut êtres associé à chaque type de vue. Il est défini dans les champs “showAllTitle”, “showSingleTitle”, “inputTitle”. Du texte, des marqueurs de langage ou de champs peuvent être utilisés.

Par exemple, en utilisant “$$$formTitle$$$” dans le champ “showAllTitle”, ce marqueur de langage sera remplacé par sa définition dans le fichier “locallang.xml”. Dans l'exemple, “formTitle” est défini comme “CD Collection” pour le langage par défaut et “Liste de CD” pour le français. L'affichage est alors :

img-80

Maintenant si vous utilisez “###artist### - ###album_title###” dans les champs “showSingleTitle” et “inputTitle”, les marqueurs “###artist###” et “###album_title###” seront remplacés par leur valeur respective pour les champs “artist” et “album_title” de l'enregistrement courant. Si ces marqueurs sont utilisés dans le champ “showAllTitle”, ils seront remplacés par le label associé à chaque champ. Ainsi, l'affichage pour la vue “Single” est le suivant :

img-81

Comment afficher les labels associés à chaque champ dans la barre de titre ?

Comme nous venons de l'expliquer, les champs utilisés dans la vue “showAll” sont remplacés par leur label. Ainsi, en utilisant la configuration suivante dans le champ “showAllTitle” :

<ul><li class="artist">###artist###</li><li class="title">###album_title###</li><li class="date">###date_of_purchase###</li><li class="category">###category###</li><li class="image">###coverimage###</li></ul>

La barre de titre devient :

img-82

Comment changer l'ordre des items en cliquant sur le label dans la barre de titre ?

Supposons que souhaitions modifier l'ordre d'affichage en cliquant sur “Artiste” (ou “Artist” avec le langage par défaut).

  • Ajouter la configuration suivante dans le champ “artist” de la vue “All”.
  • orderLinkInTitle = 1;
  • Ajouter la configuration suivante dans le champ “Where Tags” de la requête. Cliquer sur la case à cocher pour élargir la fenêtre de saisie.
  • 'artist+'=> array('order' => 'tx_savlibraryexample2_cds.artist'),
  • 'artist-'=> array('order' => 'tx_savlibraryexample2_cds.artist desc'),

img-83

Utiliser “filedname+” ou “fieldname-” et associer la clause “order” que vous souhaitez. En général “+” peut être utilisé pour le tri croissant et “-” pour le tri décroissant.

Avec cette configuration, la clause “order” que vous avez définie sera appliquée aux données.

Par défaut, le lien affiché permet d'effectuer une permutation entre le tri ascendant et le tri descendant. Toutefois, vous pouvez contrôler l'affichage en utilisant la propriété “orderLinkInTitleSetup” qui introduit des liens avec des icônes (voir General attributes dans Référence pour la configuration des champs). Par exemple, l'utilisation de “orderLinkInTitleSetup = :value:ascdesc;” ou “orderLinkInTitleSetup = asc:value:desc;” produira respectivement les sorties suivantes :

img-84 img-85

Bien sûr, on peut conserver le lien de permutation entre les tris en utilisant respectivement “orderLinkInTitleSetup = :link:ascdesc;” ou “orderLinkInTitleSetup = asc:link:desc;”.

La couleur de l'icône changera en fonction du tri comme le montre la figure suivante.

img-86

Comment réorganiser les champs avec des onglets ?

Des onglets peuvent être introduits dans les vues “showSingle” et “inputForm” pour permettre une meilleure organisation des informations.

Ajouter la définition des onglets dans les vues.

img-87

Dans cet exemple, deux onglets sont définis. Si les labels “General” et “Comments” sont définis dans le fichier “locallang.xml”, ils seront remplacés par leur définition dans le langage utilisé sinon ils sont utilisés comme tels.

Affecter un onglet à chaque champ sélectionné comme suit :

img-88

img-89

En affectant l'onglet “General” à tous les champs sauf le champ “description” qui est affecté à “Comments”, les vues suivantes seront obtenues en Front End:

Vues “Single” pour les onglets “General” et “Comments” avec une traduction française “locallang.xml”

img-90

img-91

Vues “Input” pour les onglets “General” et “Comments” avec une traduction française dans “locallang.xml”

img-92

img-93

Tutoriel 3: Collection de CD (Advanced)

Introduction

Cet exemple illustre d'autres aspects du générateur d'extensions (tables avec une relation MM table, lien de courrier électronique, champs sur une même ligne).

Vous pouvez télécharger cet exemple depuis le TER (sav_library_example3). Installer l'extension et ajouter les catégories de CD en Back End. Les paragraphes suivants expliquent comment créer l'extension et les nouvelles fonctionnalités si vous ne la téléchargez pas.

Création de l'extension

Dupliquer l'extension “sav_library_example2” en utilisant le Kickstarter comme indiqué ci-dessous :

img-94

  • Taper “sav_library_example3” dans la fenêtre de saisie.
  • Cliquer sur “Update result”.
  • Cliquer sur “WRITE”.
  • Installer la nouvelle extension.
Table avec une relation MM

Supposons que nous souhaitions prêter les CD à des amis. Même avec des amis, il est utile de conserver une trace des CD !Une solution consiste à construire une nouvelle table qui sera dans une relation MM avec la table principale. Un CD peut avoir été emprunté par plusieurs amis.

Dans cette table, nous placerons le nom de l'ami, son numéro de téléphone, son email, la date d'emprunt et la date de retour. Toutes les opérations de prêts seront affichées dans un onglet “Prêts” (“Lendings”).

Créer une nouvelle table “tx_savlibraryexample3_lending”

img-95

Créer un nouvel onglet “Lending” dans les vues “Single” and “Input” (voir ci-dessous pour la vue “Single”).

img-96

Ajouter la traduction de “Lending” dans le fichier “locallang.xml” du répertoire “sav_library_example3/pi1”.

Ajouter le champ “rel_lending” dans la table principale “tx_savlibraryexample3_cds” comme une relation avec la table “tx_savlibraryexample3_lending”.

img-97

La configuration du champ dans le Kickstarter doit être :

img-98

  • Sélectionner la table “CD Lending (Advanced)”.
  • Sélectionner “Field with Element Browser”. Ce type engendrera un sous-formulaire.
  • Sélectionner “True M-M relations”. L'extension peut aussi fonctionner sans être construite avec une véritable relation MM (c'est-à-dire sans table intermédiaire).
  • “Max number of relations” sera le nombre maximum d'items affichés dans le sous-formulaire. Vous pouvez aussi surcharger cette valeur en utilisant la propriété “maxSubItems” dans la configuration du champ pour la vue.
  • La taille du sélecteur (“Size of selector box”) n'a pas d'effet.

Définir la configuration pour le champ “rel_lending” des vues “Single” and “Input”.

img-99

  • “cutLabel = 1;” signifie que le label de ce champ ne sera pas affiché (c'est juste un choix personnel !)
  • “maxSubItems = 5;” surcharge la valeur de “Max number of relations” (c'est aussi un choix personnel !)

img-100

“addDelete” ajoutera une icône pour la suppression devant chaque item du sous-formulaire de sorte que l'on puisse les détruire.

Définir la configuration des champs de la table “CD lending (Advanced)” pour les vues “Single” et “Input”. Cela permet de choisir la manière d'afficher ces champs dans les vues du sous-formulaire.

Rappelons que l'aide contextuelle fournit des informations sur les attributs qui peuvent être utilisés. Dans ce qui suit, trois attributs différents sont utilisés :

  • “noDefault = 1;” est un attribut pour les champs de type “Date”. Il signifie que la valeur par défaut, i.e. la date courante, ne sera pas affichée quand un nouvel item est créé.
  • “fusion = begin;” et “fusion = end;” sont des attributs généraux qui peuvent être utilisés presque dans n'importe quel type de champ.“fusion = begin;” démarre le processus d'affichage sur une même ligne et “fusion = end;” le termine.
  • func = makeEmailLink;” appartient aux attributs des “Fonctions” qui peuvent aussi être utilisés pour tous les types de champ pour lesquels l'application de la fonction a du sens. Ici, un lien d'email sera associé au champ.

img-101

img-102

Ajouter une clause “GROUP BY” (“Group clause”) à la requête comme indiqué ci-dessous. Si vous n'ajoutez pas cette clause, vous obtiendrez dans la vue “All” la répétition du même item autant de fois qu'il y a d'entrées dans le sous-formulaire pour cet item (la raison est que l'extension “sav_library” automatiquement des relations de type LEFT JOIN entre les tables).

img-103

Aller en Front End et éditer votre collection de CD et les prêts associés.

img-104

Cliquer sur le bouton “Nouveau” pour ajouter un nouveau prêt. Remplir et sauvegarder.

img-105

Cliquer sur le lien pour ouvrir l'outil de messagerie électronique.

img-106

Comment faire ?

Comment aller plus loin ?

Utiliser l'aide contextuelle et tester les attributs. Rappelez-vous que le générateur d'extensions SAV Library permet d'utiliser le Kickstarter presque comme un éditeur. Détruire simplement les attributs pour retrouver la configuration originelle.

Tutoriel 4: Collection de CD (Improved)

Introduction

Cet exemple permet d'ajouter vos amis et de gérer le prêt de vos CD. Il illustre de nouvelles fonctionnalités du générateur d'extensions (Sélecteur à deux fenêtres pour une relation MM, table qui n'est pas dans une relation avec un item).

Vous pouvez télécharger cet exemple depuis le TER (“sav_library_example4”). Installer l'extension, ajouter vos catégories de CD en Back End . Les paragraphes suivants expliquent les points principaux pour créer l'extension ainsi que les fonctionnalités nouvelles.

Création de l'extension

Dupliquer l'extension “sav_library_example3” comme expliqué dans le tutoriel précédent.

Création de la table “friends”

Créer un nouvel onglet “Friends” dans les vues “Input” et “Single”.

Supposons que le nouvel onglet doive être placé avant l'onglet “Lending”. Utiliser ###INSERT### devant le nom du nouvel onglet pour l'insérer. Attention, si vous n'utilisez pas ###INSERT###, l'onglet est ajouté mais cela modifie aussi le nom des onglets associés à vos champs à la place de les conserver !

img-107

Cliquer sur “View result” pour effectuer le traitement. Si vous retournez dans la vue “Input”, vous verrez que le marqueur ###INSERT### a été supprimé.

Créer une nouvelle table “tx_savlibraryexample4_friends” avec quatre champs : “friend_name”, “friend_phone”, “friend_email” de type “String input” et “friend_preferred_music” de type “Database relation”.

img-108

Supposons que nous voulions sélectionner les styles préférés de musique de nos amis dans un sélecteur double. Comme nos amis peuvent avoir plus d'un style, nous avons besoin d'une relation MM. Dans cet exemple, nous avons choisi d'utiliser une “fausse” relation MM, c'est-à-dire qu'il n'y a pas de table intermédiaire créée mais qu'une liste d'identificateurs, séparés par une virgule, est utilisée à la place. Toutefois, si vous préférez utiliser une véritable relation MM, sélectionner simplement la case prévue à cet effet (“True M-M relations”).

Une double fenêtre est obtenue quand un “Selector box” est choisi et que “max number of relations” a une valeur plus grande que 1. Ceci définit aussi le nombre d'items affichés en Front End.

img-109

Dans cet exemple, il est clair que vos amis ne sont pas associés à un CD. Vos amis et vos CD sont deux entités différentes. Vos amis dovient être dans la table mais sans relation avec un enregistrement représentant un CD. Nous avons donc besoin d'une nouveau champ de saisie dans la table “tx_savlibraryexample4_cds” tel que vous puissiez ajouter vos amis comme dans l'exemple 3 mais sans créer un champ dans la table pour la relation .

Ceci est réalisé en sélectionnant “Just create the Element Browser (no relation)” comme montré dans la figure ci-dessous.

Comme nous voulons seulement nos amis, une clause WHERE est ajoutée pour ne retenir que les champs qui ont un champ “cruser_id” correct dans la table “tx_savlibraryexample4_friends”.

img-110

Si vous n'avez pas téléchargé l'extension, nous allons modifier la table “tx_savlibraryexample4_lending”. Détruire les champs “friend_phone”, “friend_email” utilisés dans l'exemple 3, car ils sont maintenant dans la table “tx_savlibraryexample4_friends”.

Modifier ensuite le type du champ “friend_name” de sorte à ce qu'il devienne une relation vers la table “tx_savlibraryexample4_friends”.

img-111

Utilisation de l'extension

Ajouter vos amis. Dans le sélecteur double, double-cliquer sur les items pour les faire passer d'une fenêtre à l'autre. La partie de gauche est ce qui sera sauvegardé en base de données.

img-16

Finalement, saisir les prêts de vos CD.

img-112

Tutoriel 5: Test d'extension du générateur

Introduction

Cet exemple montre comme étendre le générateur “SAV Library” avec vos propres méthodes. Ceci est expliqué au paragraphe Modification de la configuration du générateur “SAV Library”.

Tutorial 6: Email and RTF

Introduction

Cet exemple met en évidence la manière d'utiliser la génération d'emails et de fichiers RTF. Vous pouvez télécharger cet exemple depuis le TER (sav_library_example6).

Installer l'extension.

Copier le fichier “invoice.rtf”, qui est dans le répertoire de l'extension, vers le répertoire “fileadmin”.

Ajouter la ligne suivante dans le champ TSConfig de la page où vous avez installé l'extension : tx_savlibraryexample6.View1.inputForm.email_flag.mailSender = `your_email@your <mailto:your_email@your>`_ _provider Cela surchargera l'adresse électronique de l'émetteur qui est définie dans l'extension, comme nous le décrirons dans le paragraphe consacré à la configuration.

L'objectif de cet exemple est un outil très simple d'inscription à une conférence. Il contient différents champs :

  • le nom du participant,
  • l'adresse du participant,
  • les différents items pour l'inscription,
  • l'adresse électronique du participant,
  • un indicateur d'envoi des messages électroniques,
  • la langue pour le courrier électronique,
  • un lien pour le fichier RTF.

Utiliser le formulaire de saisie pour entrer un participant comme dans la figure suivante.

img-113

Sélectionner ensuite le langage pour le courrier électronique (défaut ou Français) et cliquer sur l'icône associée. Si l'adresse électronique est correcte, le formulaire changera légèrement comme ci- dessous. Vous ne pourrez plus cliquer sur l'icône d'envoi (si vous avez besoin de renvoyer le message, décocher la case à la droite de l'icône et sauvegarder le formulaire).

img-114

Vous devriez avoir reçu un email analogue à celui ci-dessous :

Dear Yolf,

Thank you for your registration to the conference.

Your registration includes:

X Conference
- Proceedings
X Meals
X Banquet


Your invoice will be available at the registration desk.

Looking forwards to seeing you.

Best regards,

The conference organization committee.

Pour engendrer le fichier RTF, cliquer sur l'icône associé à la facture puis ouvrir le fichier en cliquant sur le lien et l'imprimer (les champs sont automatiquement mis à jour).

img-115

Explication de la configuration

Ouvrir l'extension dans le Kickstarter et sélectionner “SAV Example6 – Email and RTF” dans “New Database Tables”, puis sélectionner l'onglet “Input”. Comme on peut le constater, seuls les champs “email_flag”, “email_language” et “invoice” ont une configuration spéciale.

Champ “email_flag”

Le champ “email_flag” est associé à la génération du courrier électronique. Analysons sa configuration indiquée sur la figure suivante. Ne pas oublier l'aide contextuelle pour obtenir des informations sur les attributs du champs ni de cliquer sur les attributs généraux.

img-116 img-117

  • “fusion = begin;”. Cet attribut est utilisé avec “fusion = end;” dans le champ “email_language” pour les avoir sur la même ligne.
  • “mail = 1;”. Cet attribut indique qu'un envoi de courrier électronique est associé au champ.
  • “fieldForCheckMail = email;”. Le courrier électronique ne sera envoyé que si le champ “email” n'est pas vide.
  • “mailSender = conference.organization@provider.com ;”. Cet attribut définit l'adresse électronique de l'émetteur du message. Vous pouvez le changer avec le votre et, dans ce cas, ne pas utiliser la surcharge par le TSConfig.
  • “mailSubject = $$$mailSubject$$$;”. Cela définit le sujet du message. Puisque $$$tag$$$ est utilisé, cela signifie que le paramètrage de langue est utilisé. Par conséquent, le sujet du message est défini dans le fichier “locallang.xml” du répertoire “pi1” de l'extension. Ouvrir ce fichier et analyser la balise xml “<label index="mailSubject">”.
  • “mailMessage = $$$mailMessage$$$;”. Cet attribut est identique au précédent mais pour le message à envoyer. Dans le fichier “locallang.xml”, la balise xml “<label index="mailMessage">” contient elle-même un marqueur ###fieldName### qui sera remplacé par sa valeur dans le message.
  • “mailMessageLanguageFromField = email_language;”. Cet attribut indique que la langue pour le message est fournie par la valeur du champ “email_language”.

Cet exemple illustre une des possibilités d'envoi de messages. Voir l'aide contextuelle ou la partie “Référence” de ce manuel pour l'envoi de messages chaque fois que le formulaire est sauvegardé (mailAlways) ou quand les données sont modifiées (mailAuto).

Champ “email_language”

Il n'y a rien de particulier. Il contient seulement :

“fusion = end;”. Cet attribut ferme la fusion, ainsi le champ suivant sera sur la ligne suivante.

Champ “invoice”

Ce champ est utilisé pour engendrer le fichier RTF. Sa configuration est :

img-118

  • “generateRTF = 1;”. Cet attribut indique qu'un fichier RTF doit être engendré.
  • “templateRTF = fileadmin/invoice.rtf;”. Cela définit le fichier gabarit pour la génération. Ce fichier contient des marqueurs “###tableName.fieldName###” qui seront remplacés par leur valeur pour l'enregistrement courant.
  • “saveFileRTF = fileadmin/###tx_savlibraryexample6.name###.rtf;”. Cet attribut définit le nom sous lequel le fichier RTF sera sauvegardé. Comme on utilise un marqueur pour cet attribut, il sera remplacé par sa valeur pour l'enregistrement courant. Dans l'exemple, la valeur du champ est “Yolf”, le nom du fichier sera donc “Yolf.rtf”.

Comment faire ?

Comment faire pour remplacer les labels des “check boxes” par des images dans la vue showSingle ?

Par défault, les “check boxes” et les “radio buttons” sont affichés sous forme de labels dans les vues showSingle comme représenté ci- après :

img-119 En utilisant la propriété “displayAsImage = 1;” dans la configuration des champs “Registration” et “email_flag”, la sortie suivante est obtenue.

img-120

Tutoriel 7: Livre d'or (Guest book)

Introduction

L'objectif de cette extension est de construire plusieurs formulaires pour la même table et d'expliquer la manière d'utiliser les vues de type “update”. L'exemple est un livre d'or qui est inspiré de l'extension “ve_guestbook ” (“Modern guest book”) disponible sur le TER. Vous pouvez télécharger cet exemple depuis le TER (“sav_library_example7”). Cette extension utilise une table avec les champs suivants :

  • le prénom de l'internaute,
  • son nom,
  • son adresse électronique,
  • son site web,
  • son message,
  • un commentaire.

Nous souhaitons disposer de trois formulaires associés à cette table :

  • un formulaire pour la saisie par un internaute (FORM),
  • un formulaire pour afficher les saisies des internautes (LIST),
  • un formulaire des plus récentes saisies (TEASER).

Pour la saisie de l'internaute nous souhaitons éviter les “spams” et contrôler le contenu. Les fonctionnalités suivantes sont donc souhaitées :

l'internaute répondra à un “captcha” puis son adresse électronique sera requise.

S'il a donné une adresse correcte, il recevra un lien par courrier électronique à l'adresse fournie.

En utilisant ce lien, l'internaute pourra saisir une entrée sur le livre d'or. Ses nom et prénom ainsi que son message sont des champs obligatoires.

La saisie de l'internaute n'apparaitra sur le site qu'après validation des données.

Pour réaliser cette tâche, deux nouveaux concepts seront utilisés, celui de “update view” et le filtre “sav_filter_pageaccess” (vous connaissez déjà le filtre “sav_filter_abc” utilisé dans l'exemple 1 - cf. 5.1.10.4).

Aperçu de l'extension

Editer l'extension “sav_library_example7” dans le Kickstarter pour avoir un aperçu. Elle contient :

  • trois formulaires (FORM, LIST, TEASER),
  • quatre vues (FORM_update, FORM_All, LIST_All, TEASER_All),
  • trois requêtes (FORM_Query, LIST_Query, TEASER_Query).

img-121

Formulaire de saisie (FORM)

Cliquer sur “FORM” dans la section “Forms”. Comme on peut le constater, le formulaire possède un vue “Show all”, une vue “alt” et une requête.

img-122

La vue “Alt”, nommée “FORM_Update” est utilisée pour engendrer la vue de saisie pour l'internaute. La vue “Show all” est utilisée pour valider les données en mode administration. Analysons maintenant chaque vue.

Vue FORM_Update

Cliquer sur “FORM_Update” dans la section “Form views”.

img-123 img-124

La vue est de type “Alt form”, pour formulaire alternatif, et de sous- type “Update view”. Le champ “showAllItemTemplate” définit le gabarit. Dans notre cas, deux balises <div> sont utilisées pour avoir deux colonnes dans le formulaire. Le générateur d'extension “SAV Library” fournit une aide pour implémenter simplement la vue. Le marqueur de langage $$$label[fiedname]$$$ sera remplacé par le nom du champ, en fonction de la langue utilisée, tandis que le marqueur ###field[fieldname]### sera remplacé par la valeur de l'item associé au champ. Les classes CSS “field” et “label” sont définies dans le fichier CSS par défaut de l'extension SAV Library. Vous pouvez surcharger ces propriétés dans votre propre fichier CSS. Enfin, le marqueur ###button[submit]### crée un bouton de soumission.

Analysons maintenant la configuration. Cliquer sur “SAV Example7 – Guest book” dans la section “New database tables”, sélectionner l'onglet “FORM_Update” et cliquer sur “message”, par exemple.

img-125 img-126

Comme on peut le voir, la configuration est simple puisque seulement trois attributs sont utilisés :

  • “addEdit = 1;” signifie que le champ peut être modifié par l'internaute, il sera affiché dans le mode edit selon le type du champ. Pour l'exemple ci-dessus, un “textarea” sera affiché.
  • “required = 1;” signifie que l'internaute aura à remplir le champ.
  • “checkedInUpdateformAdmin = 1;” signifie que le champ sera pré- sélectionné pour la validation dans la vue d'administration comme indiqué dans le paragraphe suivant.

Avec la configuration ci-dessus et le fichier CSS fourni, une fois l'extension installée, vous devriez obtenir le résultat suivant. Les champs obligatoires apparaissent avec le caractère “*”.

img-127

Grâce aux marqueurs de langage de type $$$label[fieldname]$$$, pour la langue française on obtient :

img-128

Vue FORM_All

Quand une vue de type “Update view” est utilisée, les informations fournies par l'internaute ne sont pas directement sauvegardées dans les champs de la table. Un champ temporaire, nommé “_submitted_data_” est automatiquement ajouté à la table. Il est utilisé pour garder les saisies des internautes jusqu'à leur validation. A cet effet, une vue de type “Update view” inclut un mode “Admin” dans lequel on doit entrer par l'intermédiaire d'une vue associée de type “Show all” qui sera utilisée pour afficher les nouvelles saisies. Puisque nous utilisons un filtre qui requiert l'adresse électronique de l'internaute, celle-ci sera utilisée pour commuter vers le mode “Admin”.

img-129

Un marqueur de langage “$$$adminTitle$$$” est utilisé dans la barre de titre. Rappelons que ce marqueur est défini dans le fichier “locallang.xml” du répertoire “pi1” de l'extension. Le gabarit de la vue est très simple et ne contient que le champ “email”, qui doit aussi être sélectionné dans la configuration.

img-130 img-131

Deux attributs sont associés au champ “email” :

  • “func = makeItemlink;”, cet attribut, déjà vu dans les exemples précédents, crée un lien avec la valeur du champ.
  • “updateForm = 1;” spécifie qu'une vue de type “updateform” doit être ouverte.

Une fois l'extension correctement installée, si un internaute, e.g. “ paul.durand@example.com ”, a laissé un nouveau message, vous devriez obtenir l'affichage suivant :

img-19

Maintenant, en cliquant sur le lien vous entrerez en mode “Admin”. Comme on peut le voir, ces champs ont la case de validation déjà cochée. Ceci est dû à l'attribut “checkedInUpdateformAdmin = 1;” qui est utilisé dans la vue “Update”. Seuls les champs validés seront transférés à leur place respective dans la table lors de la sauvegarde.

img-20

Requête FORM_Query

Pour obtenir seulement les entrées de internautes qui n'ont pas été vérifiées et traitées, une clause WHERE spéciale doit être utilisée.

img-132

Comme nous l'avons expliqué précédemment, la saisie de l'internaute n'est pas directement sauvegardées dans les champs de la table. Les informations sont sérialisées et sauvegardées temporairement dans le champ “_submitted_data_”. Ce champ est vidé une fois que les données ont été traitées dans le mode “Admin”. Par conséquent, pour vérifier que de nouvelles entrées sont présentes, la clause WHERE traite une sous-chaîne du champ “_submitted_data_”. Cette sous chaîne est :

extensionName_formName en minuscules .

Dans notre exemple, “extensionName” vaut “sav_library_example7” et “formName” vaut “FORM”, par conséquent la sous-chaîne à chercher est : “sav_library_example7_form”.

Liste des saisies des internautes (LIST)

Il n'y a rien de particulier à signaler pour le formulaire LIST. Il inclut une vue usuelle de type “show All”. Analyser la vue, la requête et la configuration des champs (utiliser l'aide contextuelle si nécessaire). Les paragraphes suivants fournissent quelques commentaires utiles.

Champ “comment”
  • “addLeftIfNotNull = <strong>$$$label[comment]$$$</strong><br />;”
  • cutIfNull = 1;

Ces deux propriétés permettent d'afficher le label pour le champ seulement si celui-ci n'est pas vide. “addLeftIfNotNull” ajoute la chaîne qui est à droite de l'attribut à la gauche du contenu s'il n'est pas vide. Le contenu du champ n'est pas affiché s'il est vide (“cutIfNull”).

Champ “date”

img-133

Ce champ a un type spécial “Not created, only shown in savform”. Cela signifie qu'il ne sera pas créé dans la table mais qu'il pourra être utilisé avec un marqueur ###date### dans un formulaire. Ce champ a trois propriétés :

  • “alias = crdate;” signifie que ce champ est un alias du champ “crdate” qui existe déjà dans la table (il est créé par le Kickstarter).
  • “func = makeDateFormat;” appelle la fonction interne “makeDateFormat” qui traitera le champ. Rappelons que le champ “crdate” est représenté en temps unix.
  • “format = %d/%m/%Y %H:%M;” définit le format qui sera utilisé pour traiter la date.

La capture d'écran obtenue pour le formulaire LIST est donnée ci- dessous.

img-21

L'accroche (TEASER)

Le formulaire “TEASER” possède une vue “show All” usuelle. Analysons la vue la requête et la configurations des champs (utiliser l'aide contextuelle en cas de besoin). La seule configuration spécifique concerne le champ “message”. Nous voulons couper le texte à 60 caractères et avoir un lien “En savoir plus” (“More”) pour aller à la page du formulaire “LIST”.

  • “stdWrapValue =crop = 60|...;” définit une propriété TS stdWrap usuelle. Vous pouvez utiliser ici une syntaxe TS complète. Ne pas oublier que la propriété de configuration se termine par un point- virgule, aussi si vous avez besoin d'un point-virgule dans votre TS, écrire “;”.
  • “addRightIfNotNull = $$$more$$$;” ajoute le label à la droite du contenu s'il n'est pas vide. Le marqueur de langue $$$more$$$ est utilisé à cet effet et sera remplacé par sa valeur définie dans “pi1/locallang.xml”.
  • “funcRight = makeLink;” applique la fonction interne “makeLink”, qui crée un lien interne vers la partie de droite, c'est-à-dire le lien “En savoir plus” (“More”).
  • “setUidRight = 123;” définit l'identifiant de la page associée au lien. La valeur 123 est donnée à titre d'exemple, vous pouvez la remplacer pour l'identifiant de votre page ou surcharger cette propriété en utilisant le TSConfig de la page, comme expliqué au paragraphe “Configuration des champs au moyen du TSConfig de la page”.

Si l'extension est correctement installée, vous devriez obtenir :

img-22

Installation et configuration

Téléchargements

Télécharger l'extension “sav_library_example7” depuis le TER et l'installer.

Télécharger l'extension “sav_filter_pageaccess” depuis le TER et l'installer.

Télécharger l'extension “sr_freecap” fdepuis le TER et l'installer.

Saisie par l'internaute

Créer une page pour la saisie par l'internaute.

Dans cette page, insérer un élément de contenu de type “plugin”. Sélectionner “SAV Example7 – Livre d'or” (“SAV Example7 – Guest book”), sélectionner “FORM” dans l'onglet “Général” (“General” folder), puis dans l'onglet “Options de saisie” (“Input Controls”), décocher “Saisie autorisée” (“input on form”).

img-134 img-135 img-136

Dans la même page, avant le plugin précédent (voir ci-dessous) , ajouter une nouvel élément de contenu de type “plugin”. Sélectionner “SAV Filter Page Access”. Lire l'aide contextuelle en cliquant sur l'icône d'aide. Vous pouvez aussi lire la documentation de cette extension. Remplir les champs comme ci-dessous. Remplacer your_email@example.com par une adresse électronique valide . La valeur dans “Uid for the field cruser_id” sera la valeur par défaut pour le champ “cruser_id” de chaque enregistrement de la table “tx_savlibrary_example7_guests”. Par exemple, mettre votre propre identifiant EN Front End. Fournir une clé qui sera utilisée pour crypter le ien. Enfin, fournir une page de redirection pour les erreurs ( ce champ est obligatoire ). Quand le “captcha” est utilisé, vous pouvez attribuer la page courante à ce champ.

img-137 img-138

Sauvegarder et aller à la page en Front End. Répondre au “captcha” et valider.

img-139 Remplir le champ avec votre adresse électronique et valider.

img-140

Un message est affiché et vous devriez recevoir un courrier électronique avec un lien personnel.

Click on the following link to access to the service
Guest input
This link is valid only for one request.

Le lien est “Votre_titre_de_page” (“Guest input” est le titre de la page utilisée pour ce tutoriel). Cliquer sur le lien pour accéder à la vue de saisie, remplir le formulaire et valider.

img-18

Validation de la saisie de l'internaute

Créer un groupe FE, par exemple “savlibrary_test”. Il sera utilisé pour protéger la page et définir le groupe d'administration. Appliquer ce groupe à votre propre compte utilisateur en FE.

Créer une page pour la validation des entrées des internautes. Protéger la page avec un groupe FE.

Insérer un élément de contenu de type “plugin”. Sélectionner “SAV Example7 – Livre d'or” (“SAV Example7 – Guest book”), sélectionner “FORM” dans l'onglet “Général” (“General”). Dans l'onglet “Options de saisie” (“Input Controls”), décocher “Saisie autorisée” (“input on form”) et ajouter un groupe FE au champ “Groupes autorisés” (“Allowed groups”).

img-141

Sauvegarder et aller en Front End. Cliquer sur l'email associé à la dernière saisie.

img-19 img-20

Vue List

Insérer un élément de contenu de type “plugin”. Sélectionner “SAV Example7 – Livre d'or” (“SAV Example7 – Guest book”), sélectionner “LIST” dans l'onglet “Général” (“General”). Remplir le champ “Nombre max d'éléments affichés “ (“Max number of items”) avec le nombre d'items souhaités pour la liste (10 est la valeur par défaut). Décocher “Saisie autorisée” (“input on form”) dans l'onglet “Options de saisie” (“Input Controls”). Sauvegarder et aller à la page en Front End.

Vue Teaser

Insérer un élément de contenu de type “plugin”. Sélectionner “SAV Example7 – Livre d'or” (“SAV Example7 – Guest book”), sélectionner “TEASER” in the “General” folder. dans l'onglet “Général” (“General”). Remplir le champ “Nombre max d'éléments affichés “ (“Max number of items”) avec le nombre d'items souhaités pour la liste (10 est la valeur par défaut). Décocher “Saisie autorisée” (“input on form”) dans l'onglet “Options de saisie” (“Input Controls”).

Si vous n'avez pas changé la value de “setUidRight”, éditer la propriété de la page. Dans le champ TSConfig ajouter :tx_savlibraryexample7.TEASER.showAll.message.setUidRight = uid_de_la_page_contenant_le_formulaire_list

Aller en Front End.

Gabarit et fichier CSS

Vous avez certainement remarqué que les formulaires et les styles utilisés dans cette extension ne sont pas les mêmes que ceux des autres exemples. La raison est très simple : l'extension “sav_library_example7” est fourni avec son propre gabarit et son fichier CSS. Par convention :

  • si un fichier “extensionKey.tmpl” est dans le répertoire “res” d'une extension, ce fichier est utilisé comme gabarit à la place de celui par défaut,
  • si un fichier “extensionKey.css” est dans le répertoire “res” d'une extension, ce fichier est chargé dans la section de la balise <head> du contenu HTML. Il est utilisé pour surcharger plusieurs styles par défaut.

Tutoriel 8: Fe Users Admin et Export

Introduction

L'objectif de ce tutoriel est de montrer comment une extension peut simplement être construite à partir d'une table existante. On expliquera aussi comment exporter des données au format CSV depuis l'extension.

Cet exemple utilise la table “fe_users” à partir de laquelle nous construirons deux formulaires :

  • le premier (USER) est pour un utilisateur authentifié qui souhaite gérer ses données personnelles.
  • le second (ADMIN) est pour un administrateur FE qui pourra gérer tous les utilisateurs et exporter les données.

Vous pouvez télécharger cet exemple depuis le TER (sav_library_example8).

Extension overview

Editer l'extension “sav_library_example8” dans le Kickstarter pour avoir une vue d'ensemble. Elle contient :

  • deux formulaires (USER, ADMIN),
  • cinq vues (USER_All, User_Input, ADMIN_All, ADMIN_Single, ADMIN_Input),
  • deux requêtes (USER_Query, ADMIN_Query).

img-142

L'organisation des formulaires est semblable à celle des exemples précédents. Cliquer sur les formulaires pour les analyser. Regardons les configurations associées à la table “fe_users” en cliquant sur le lien “fe_users”. Comme on peut le voir, tous les champs sont du type “Only shown in SAV Form”.

img-143

En cliquant sur le lien Import fields from table as “Only shown in SAV form” , tous les champs de la table “fe_users” ont été importés puis, les champs inutiles ont été supprimés.

Formulaire utilisateur (USER)

Dans cet exemple, il a été choisi de concevoir un formulaire très simple pour afficher l'image de l'utilisateur. L'image est associée a un lien, c'est-à-dire une balise <a>, pour permettre la saisie par l'utilisateur.

Requête USER_Query

La requête est utilisée pour filtrer la table “fe_users” avec l'utilisateur authentifié. Ceci peut facilement être réalisé à l'aide du marqueur ###user### dans la clause WHERE de la requête.

img-144

Vues USER_All et USER_INPUT

Le gabarit associé avec ces vues est très simple puisque seul le champ “image” doit être affiché.

img-145

Pour engendrer le lien d'ouverture de la vue de saisie, quelques attributs de configuration sont nécessaires.

img-146

  • “func = makeItemLink;” engendre le lien pour l'item courant.
  • “inputForm = 1;” ouvre la vue de saisie à la place de la vue par défaut (vue “showSingle”).
  • “width = 50;” et “height = 50;” définit la taille de l'image.

Finalement, pour surcharger les styles CSS par défaut, l'exemple est fourni avec un fichier CSS par défaut, l'exemple est fourni avec un fichier CSS (sav_library_example8.css) dans le répertoire “res” qui contient les instructions suivantes :

.tx-savlibraryexample8-pi1-USER .sav-library .showAll {width:62px;background-color:#ffffff;}
.tx-savlibraryexample8-pi1-USER .sav-library .showAll .title {display:none;}
.tx-savlibraryexample8-pi1-USER .sav-library .showAll .items .item {border:none;background-color:#ffffff;}

La vue USER_Input ne contient aucune configuration particulière nécessitant d'être décrite ici. Les champs sont sélectionnés et les attributs “fusion = begin;” et “fusion = end;” sont utilisés pour grouper les champs.

Le formulaire d'administration (ADMIN)

Le formulaire d'administration est utilisé en Front End pour gérer, donner des droits, exporter des utilisateurs FE. Ce formulaire repose sur une requête conventionnelle, des vues “Show all”, “Show single” et “Input form” pour lesquelles il n'y a aucune configuration particulière. Cliquer sur les différentes vues et onglets pour analyser la manière dont les champs sont groupés.

Installation et configuration

Installation

Les indications suivantes ne sont qu'un exemple pour tester l'extension. N'hésitez pas à les adapter.

Télécharger l'extension “sav_library_example8” depuis le TER et l'installer.

Créer un “Sysfolder” pour les utilisateurs FE.

Dans ce “Sysfolder”, créer un groupe FE pour les utilisateurs ordinaires et un groupe pour les administrateurs.

Dans ce “Sysfolder”, créer un utilisateur ordinaire et un administrateur pour les tests.

img-147

Créer une page pour le formulaire USER et une autre pour le formulaire ADMIN.

img-148

Dans la page USER, insérer le “plugin” et sélectionner le formulaire USER.

img-149

Authentifier l'utilisateur et aller à la page USER. Vous devriez alors voir l'image de l'utilisateur (ici l'icône user_defined.gif) ou une icône en forme de point d'interrogation si aucune image n'est fournie.

img-150 img-151

Cliquer sur le lien de l'image pour ouvrir le formulaire de saisie.

img-152

Dans la page ADMIN, insérer le plugin, sélectionner le formulaire ADMIN et inclure le “Sysfolder” des utilisateurs dans le champ “Point d'entrée” (“Startingpoint”).

img-153

Cliquer sur l'onglet “Input controls” . Sélectionner “Input on form” pour autoriser les saisies. Ajouter le groupe d'administration (ici “testadmin”) dans “Groupes autorisés” (“Allowed group”). Sélectionner “Pas de bouton Nouveau” (“No new button”) si vous ne souhaitez pas autoriser la création de nouveaux utilisateurs.

img-154

Authentifier un administration FE et aller à la page ADMIN. La vue affiche le nom des utilisateurs, leur email, leur numéro de téléphone et leurs groupes. Le comportement du formulaire est le même que celui des exemples précédents. Cliquer sur le nom pour afficher la configuration de l'utilisateur. Utiliser l'icône d'édition pour modifier les champs.

img-155

Exportation des données au format CSV

L'exportation des données est possible pour tout formulaire construit avec le générateur “SAV Library”. Pour autoriser cette fonctionnalité, ajouter la ligne suivante dans le TSConfig d'un utilisateur ou d'un de ses groupes :

sav_library_example8_Export = *

Ceci peut être fait en Back End. Toutefois, l'extension permet de le faire aussi en Front End pour un utilisateur comme montré ci-dessous.

img-156

Maintenant, fermer la vue et vérifier qu'une nouvelle icône “CSV” est présente dans la vue “Show All” du formulaire “ADMIN” . Cliquer sur cette icône pour afficher la vue d'exportation.

img-157

img-158

La partie “Configuration” peut être utilisée pour sauvegarder, charger, supprimer et export une configuration. Utiliser le bouton de changement de mode pour afficher tous les champs. Dans l'exemple ci- dessus, la configuration “test”, précédemment enregistrée, a été rechargée.

Des fichiers XML et XSLT peuvent être utilisés pour exporter les données vers d'autres formats (voir le paragraphe suivant).

Les cases à cocher servent à indiquer les champs à exporter.

Le champ “Clause Where” (“Where clause”) est utilisé pour filtrer les données à exporter. Noter qu'en double-cliquant sur le nom d'un champ, celui-ci est ajouté dans la fenêtre (“Clause Where”). C'est utile pour éviter les erreurs de frappe.

Le champ “Clause order” (“Order clause”) est utilisé pour ordonner les données à exporter.

“Tables additionnelles” (“Additional tables”) peut être utilisé pour des cas plus complexes où vous avez besoin d'effectuer une jointure avec d'autres tables. Dans ce cas, ne pas oublier d'ajouter la condition de jointure dans le champ “Clause where”).

“Exporter les enregistrements MM” (“Export MM records”) peut être activé quand l'extension utilise des relations MM et que vous souhaitez exporter toutes les données. Dans ce cas, vous aurez éventuellement besoin d'utiliser une “clause group by”.

“Inclure tous les champs” (“Include all fields”) peut être utilisé quand vous souhaitez exporter des champs comme uid, pid, crdate, ... qui sont cachés par défaut. Cliquer sur l'icône rouge CSV pour inclure to les champs. Cliquer sur le bouton de changement de mode si vous avez préalablement restreint l'affichage à des champs sélectionnés.

“Exporter le nom des champs” (“Export field names”) peut être utilisé quand vous souhaitez avoir le nom des champs dans la première ligne du fichier CSV.

“Ordre des champs” (“Order of the fields”) peut être utilisé pour changer l'ordre dans lequel les champs sont extraits. Par défaut, c'est l'ordre dans lequel les champs apparaissent dans la liste des cases à cocher de la gauche à la droite. Dans l'exemple utilisé, sans information dans ce champ, “fe_users.username” vient en premier , puis “fe_users.usergroup” est extrait, puis “fe_users.name”, etc. Fournir une liste de champs séparés par un point-virgule (un champ par ligne permet une lecture plus aisée) dans la zone prévue à cet effet. L'ordre sera celui de cette liste. Noter qu'un champ peut apparaitre plusieurs fois, ce qui peut parfois être utile quand le fichier CSV est traité directement.

Cliquer sur l'icône rouge CSV pour exporter vos données. Ci-dessous est illustré le résultat de l'exportation quand le fichier CSV est importé avec OpenOffice Calc.

img-159

Exportation des données vers d'autres formats

Le formulaire d'exportation des données contient deux champs “Fichier XML” et “Fichier XSLT” qui permettent l'exportation vers d'autres formats.

Le champ “Fichier XML file” doit contenir un fichier XML qui sera utilisé comme gabarit. Ce fichier peut contenir :

  • des marqueurs de champ sous la forme usuelle pour le générateur d'extension SAV Library, c'est-à-dire ###field_name###,
  • des marqueurs de langage sous la forme usuelle pour le générateur d'extension SAV Library, c'est-à-dire $$$tag$$$ pour un marqueur dans le fichier locallang.xml, $$$label[field_name]$$$ pour obtenir le label associé à un champ,
  • des marqueurs pour les constantes sous la forme $$$constant[tag]$$$ (e.g. $$$constant[PATH_site]$$$).

Les balises XML peuvent contenir des attributs spéciaux :

  • “sav_type” peut prendre les valeurs suivantes :
    • “replaceAlways”: la balise XML et ses descendants seront traités pour tous les enregistrements exportés,
    • “replaceDistinct”: la balise XML et ses descendants seront traités chaque fois que l'attribut associé “sav_id” change dans les enregistrements exportés,
    • “cutIfEmpty”: la balise XML et ses descendants seront traités si l'attribut associé “sav_id” est vide pour l'enregistrement,
    • “cutIfNotEmpty”: la balise XML et ses descendants seront traités si l'attribut associé “sav_id” attribute n'est pas vide pour l'enregistrement,
    • “cutIfEqual”, “cutIfNotEqual”, “cutIfgreater”, “cutIfLower”, “cutIfgreaterEqual”, “cutIfLessEqual”: la balise XML et ses descendants seront traités si l'attribut associé “sav_id” est respectivement égal, différent, plus grand, plus petit, plus grand ou égal, plus petit ou égal à ue valeur fournie par l'attribut “sav_value”.
  • “sav_id” doit être un nom de champ,
  • “sav_value” doit être une valeur.

Let us illustrate this principle to generate a docbook article. If your are not familiar with docbook, please read http://www.oasis- open.org/docbook/documentation/reference/html/docbook.html and http://www.sagehill.net/docbookxsl/ . The former is the docbook definitive guide and the later the docbook xsl complete guide.

Assume that we want to produce the FE user list under the form of a table with four columns: the user image, his/her name, email and groups. It can be solved used the XML file “to_docbook.xml”, available in the “res” directory of this extension. As it can be seen, this file uses several markers and attributes which are in bold in the following listing.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article
  PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">

<article lang="en">
  <title>List of FE users</title>
  <informaltable>
    <tgroup cols="4" align="left" colsep="1" rowsep="1">
      <thead>
        <row>
          <entry align="center"></entry>
          <entry align="center">$$$label[fe_users.name]$$$</entry>
          <entry align="center">$$$label[fe_users.email]$$$</entry>
          <entry align="center">$$$label[fe_users.usergroup]$$$</entry>
        </row>
      </thead>
      <tbody>
        <row sav_type="replaceAlways">
          <entry align="center">
            <mediaobject sav_type="cutIfEmpty" sav_id="fe_users.image">
              <imageobject>
                <imagedata fileref="$$$constant[PATH_site]$$$###fe_users.image###" width="2cm" scalefit="1" />
              </imageobject>
            </mediaobject>
          </entry>
          <entry>###fe_users.name###</entry>
          <entry>###fe_users.email###</entry>
          <entry>###fe_users.usergroup###</entry>
        </row>
      </tbody>
    </tgroup>
  </informaltable>
</article>

La démarche pour produire le fichier XML est la même que pour l'exportation en CSV. Chaque marqueur de champ doit être sélectionné et le fichier gabarit doit être fourni dans le champ “Fichier XML” (“XML file”) comme cela est montré dans la capture d'écran suivante (la configuration a été sauvegardée sous le nom “FE users (docbook)”).

img-160

Le nom du fichier produit est similaire au précédent, e.g. “sav_library_example8_admin_28_2009_08_04_08_37.csv”. Il est construit de la manière suivante : “extensionName_formName_contentId _year_month_day_hour_minute.csv”.

Sauvegarder le fichier engendré et le renommer le cas échéant. Utiliser ensuite votre processeur docbook préféré. Par exemple, la capture d'écran suivante montre le fichier PDF obtenu avec FOP ( http://xmlgraphics.apache.org/fop/ ).

img-161

Comme on peut aussi ajouter un fichier XSLT ( http://xmlfr.org/w3c/TR/xslt/ ), le résultat du traitement du template XML peut virtuellement être transformé vers tout type de format. Par exemple, ce processus a été utilisé pour produire des fichiers d'importations vers limesurvey ( http://www.limesurvey.org/ ). Il a aussi utilisé pour transformer le fichier XML docbook avant le traitement par FOP, en particulier avec des contenus de champ de type RTE. En effet, ceux-ci contiennent du contenu HTML pour lequel les balises <p>, <ul>, <ol>, ... doivent être transformées en balises docbook.

Tutoriel 9: Utilisation de XML JpGraph

Introduction

L'objectif de ce tutoriel est de montrer comment utiliser des graphiques de type XML JpGraph dans une extension (voir l'extension “sav_jpgraph” pour plus de détails et un tutoriel).

Dans cet exemple, nous souhaitons afficher une liste d'évènements sous la forme de graphes de Gantt. Chaque graphe est associé à une période de temps comme le mois ou le trimestre. Deux formulaires sont utilisés :

  • le premier (Admin) sera utilisé pour la saisie des évènements en FE. Un évènement comprend un titre, une date de début, une date de fin et une catégorie. Les catégories seront saisies en BE. Elles ont un nom et une couleur qui sera utilisée dans le graphe de Gantt.
  • le second (Display) concerne l'affichage du graphe de Gantt.

Vous pouvez télécharger cet exemple depuis le TER (sav_library_example9).

FE input events (Admin)

Si vous avez suivi les tutoriels précédents, vous êtes devenu familier avec le générateur d'extensions “SAV Library”. Le formulaire “Admin” a trois vues : “Admin_All”, “Admin_Single” et “Admin_Input”.

Télécharger l'extension “sav_library_example9” depuis le TER et l'ouvrir dans le Kickstarter.

Analyser la configuration de chaque champ dans chaque vue en cliquant sur les onglets.

Créer une page et un “Sysfolder” comme montré ci-dessous.

img-162

Insérer l'extension dans la page “Admin” et configurer “Page de stockage” (“Storage page”) dans l'onglet “Avancées” (“Advanced”) de sorte à référencer le “Sysfolder” (“Events” dans cet exemple).

img-163

En mode liste (Web->List), créer les catégories et les périodes dans le “Sysfolder”. Utiliser des noms de couleur reconnus par la bibliothèque JpGraph. Dans cet exemple, les évènements annuels sont organisés par trimestre.

img-164

img-165

Aller en Front End et insérer des évènements. Les évènements sont affichés dans la vue “All” dans l'ordre décroissant des dates de début (voir la “Clause order” dans “Admin_Query”).

img-166

img-167

Affichage des graphes de Gantt (Display)

Le formulaire “Display” n'a qu'une vue : “Admin_All”. Cette vue affiche seulement un champ nommé “graph”. Sa configuration est la suivante :

img-168

Les champs de type XML JpGraph ne sont pas créés dans la table. Ils seront affichés par l'extension s'ils sont sélectionnés.

Cette configuration inclut plusieurs lignes :

  • graphTemplate = typo3/ext/sav_library_example9/res/events.xml; définit le fichier à utiliser comme gabarit pour l'affichage du graphe.
  • markers = marker#begin = ###beginPeriod###, marker#end = ###endPeriod###; Cet attribut est utilisé pour définir les marqueurs pour XML SAV JpGraph. La syntaxe est une liste de définitions séparées par une virgule. Analysons la première : “marker#begin = ###beginPeriod###”. Elle indique que le “marker” dont le nom est “begin” dans le gabarit sera remplacé par le marqueur “###beginPeriod###” du générateur SAV Library, c'est-à-dire par l'alias “beginPeriod”. Pas conséquent, il est nécessaire que cet alias soit défini dans la partie réservée à la requête pou ce formulaire.

img-169

Maintenant, télécharger l'extension “sav_jpgraph” depuis le TER et l'installer.

Ajouter un élément de contenu de type “plugin” dans la page où vous souhaitez afficher le graphe et choisir “SAV JpGraph”.

Dans l'onglet “Options” des propriétés la page, ajouter le “Sysfolder” contenant les données à “Page de stockage des enregistrements” (“General Record Storage page”).

img-170

Dans l'onglet “Général” (“General”), sélectionner “Display” et ajouter le “Sysfolder” contenant les évènements comme “Point d'entrée” (“Startingpoint”).

img-171

Dans l'onglet “Options de saisie” (“Input controls”), décocher “Input on form”.

Sauvegarder et aller en Front End. Vous devriez obtenir une vue semblable à la suivante, en fonction de vos évènements.

img-25

Enfin, ouvrir les fichiers “events.xml” et “eventsTemplate.xml” du répertoire “res” de l'extension et les analyser. Le fichier “eventsTemplate.xml” est le gabarit général pour afficher le graphe (voir l'extension “sav_jpgraph” pour plus de détails). Le fichier “events.xml” contient les définitions pour les références utilisées dans le gabarit général. La seule partie spéciale est l'utilisation de la variable SQL variable @row pour numéroter les éléments du graphe.

Utiliser le graphe avec un sélecteur d'année

Pour introduire un sélecteur sur l'année, nous allons utiliser une nouveau filtre “SAV Filter Selectors”.

Télécharger l'extension “sav_filter_selectors” depuis le TER et l'installer. Noter que cette extension est très utile pour développer rapidement des sélecteurs, cases à cocher, boutons de choix, zones de recherche pour filtrer les extensions produites avec le générateur d'extensions “SAV Library” ... même si la syntaxe est parfois surprenante !

Utilisation d'un sélecteur dans le formulaire “Admin”

Dans la page “Admin”, ajouter un élément de contenu de type “plugin” et sélectionner “sav_filter_selectors”.

Dans le flexform, ajouter la configuration montrée ci-dessous. La partie “Gabarit” (“Template”) est un gabrait HTML qui peut contenir des marqueurs spéciaux qui seront remplacés par l'extension (voir l'aide contextuelle ou le manuel pour plus de détails). Il peut aussi contenir des marqueurs de langage qui doivent, dans ce cas, être défini dans la section langage. Dans l'exemple, les marqueurs $$$year$$$, $$$category$$$ et $$$search$$$ sont utilisés. Ils sont définis en anglais et français. Vous pouvez ajouter votre propre langue ou remplacer la partie française. Si vous faites cela, ne pas oublier de modifier l'attribut “index” en fonction de la langue.

img-172

Sauvegarder et aller à la page “Admin”. L'extension “sav_filter_selectors” affiche des sélecteurs pour l'année et les catégories ainsi qu'une boîte de recherche. Par défaut, les évènements sont affichés pour l'année courante, grâce à la “clause Where” dans “Admin_Query”.

img-173

Utiliser le sélecteur pour choisir les évènements d'une année et/ou d'une catégorie.

img-174

img-175

Utilisation d'un sélecteur avec le formulaire “Display”

Analysons maintenant la manière d'introduire un sélecteur avec le formulaire “Display” qui est un peu plus subtile.

Dans la page “Display”, ajouter un élément de contenu de type plugin et sélectionner “sav_filter_selectors”. Dans le flexform, ajouter la configuration ci-dessous.

img-176

Expliquons maintenant la partie spéciale. Le formulaire “Display” fait référence à la table “tx_savlibraryexample9_period” mais les alias “beginPeriod” et “endPeriod” dépendent de l'année choisie. Par conséquent, ils doivent être construits en utilisant l'année des évènements, c'est-à-dire une information dans la table “tx_savlibraryexample9”. Pour cela nous avons besoin de construire une requête qui prenne en compte cette nouvelle table qui n'est pas jointe avec la tables des périodes. Le champ “Table étrangère” (“foreign table”) peut être utilisé pour cela. Attention, la virgule est nécessaire avant le nom de la table dans ce champ. Modifier la requête comme suit :

img-177

Finalement, aller en Front End, sélectionner une année et valider.

img-178

Tutoriel 10: Utiliser du TypoScript (Galerie de photos avec géolocalisation)

Introduction

L'objectif de ce tutoriel est d'utiliser du TypoScript dans une extension.

Dans cet exemple, nous souhaitons afficher une galerie de photos. Pour cela, nous utilisons un formulaire avec trois vues pour des raisons de simplicité (voir les exemples précédents pour créer un formulaire d'administration) :

une vue “showAll” pour afficher les images en réduction.

img-26

une vue “inputForm” pour saisir la photo, son titre, une description et l'adresse du lieu.

img-179

une vue “showSingle” avec une organisation spéciale. La photo est à gauche puis, le titre et la description sont affichés à sa droite. Enfin, une géolocalisation par google map est placée complètement à droite. Les marqueurs sont fournis par l'adresse. En cliquant sur l'image, celle-ci est affichée dans sa taille originelle.

img-27

Plusieurs utilisateurs authentifiés peuvent utiliser le “plugin”. Chaque utilisateur ne peut modifier ou détruire que les items qu'il a créés.

  • Télécharger cet exemple depuis le TER (sav_library_example10) et installer l'extension.
  • Télécharger aussi l'extension “wec_map” depuis le TER, lire la documentation, obtenir une clé pour l'API google map et installer l'extension.

La vue “showAll”

Le gabarit (template) de cette vue est très simple puisqu'un seul champ doit être affiché. Toutefois, nous souhaitons tirer profit des capacités de traitement d'images par TYPO3 à la place d'utiliser la modification de la taille de l'image à l'aide des propriétés “width” et “height”.

Quand le champ est une image et que la propriété “tsProperties” est utilisée, un “cOject” IMAGE est engendré avec la configuration TS fournie. Des marqueurs peuvent être utilisés pour faire référence à des champs. Dans l'exemple, la configuration est la suivante :

func = makeItemLink;
tsProperties =
file = uploads/tx_savlibraryexample10/###image###
file.width= 100
;

La première propriété est déjà connue. Elle permet l'ouverture de la vue “showSingle” en cliquant sur l'image.

La seconde est juste de la syntaxe TypoScript pour un cObject IMAGE. Elle permet de définir le fichier en utilisant le marqueur ###image###, c'est-à-dire le nom du fichier et de définir la largeur de l'image à 100px. Vous pouvez aussi insérer d'autres propriétés TS comme, par exemple, GIFBUILDER.

La syntaxe utilisée est exactement la même que pour du TypoScript usuel. Ne pas oublier de terminer la propriété par un point- virgule. Si vous avez besoin d'un point-virgule dans une propriété TypoScript, utiliser “;”.

Le dernier problème à résoudre pour la vue “showAll” est la disposition de plusieurs images sur la même ligne à la place d'avoir un item par ligne. Ceci est simplement réalisé en changeant le style par défaut (voir le fichier “sav_library_example10.css” dans le répertoire “res”) comme suit :

.tx-savlibraryexample10-pi1-Gallery .sav-library .showAll .items .item {
        width:120px;height:100px;background-color:#ffffff;
}

La vue “inputForm”

Cette vue n'a pas de configuration particulière. Bien sûr, vous pouvez changer la taille des champs si vous le souhaitez.

La vue “showSingle”

Pour cette vue, deux problèmes doivent être traités :

  • un positionnement correct des champ,
  • l'exécution du plugin “wec_map”.
Positionnement des champs

Le positionnement des champs est très simple dans une vue “showAll” parce que le template se définit dans la vue. Pour les vues “showSingle” et “inputForm”, le positionnement peut être réalisé en utilisant la propriété “wrapItem”. Cette propriété a la même syntaxe et le même comportement que la propriété “wrap” en TypoScript.

Pour réaliser le positionnement souhaité, des balises <div> sont organisées comme suit :

img-180

Le positionnement est fait champ par champ. Par exemple, le premier champ est “image”. Il définit le début du conteneur principal (“Container”) et de celui de l'image quand la propriété suivante est utilisée :

wrapItem = <div class="container"><div class="image"> | </div>;

Analyser la propriété “wrapItem” pour tous les champs, puis ouvrer le fichier “sav_library_example10.css” dans le répertoire “res” pour voir la configuration. Les labels associés au champ ne sont pas affichés grâce à la configuration CSS {display:none;}. Notons que le même résultat aurait pu être obtenu en utilisant la propriété “cutLabel” dans le Kickstarter (voir par exemple les champs “image” et “map”).

Exécution du plugin “wec_map”

L'exécution d'un plugin dans une extension peut être réalisée simplement à l'aide des propriétés “tsObject” et “tsProperties”. La propriété “tsObject” est un objet de contenu en TypoScript, c'est-à-dire TEXT, FILE, CONTENT, ...

Pour inclure le “pi1” d'un plugin, la syntaxe est la suivante :

tsObject = <plugin.tx_thePluginName_pi1;

Ensuite, ajouter simplement les attributs de configuration par l'intermédiaire de la propriété “tsProperties” comme cela a déjà été expliqué dans le cas du champ “image”.

Insérer le plugin “wec_map” est un peu plus complexe car il a été défini comme étant de type USER. Dans ce cas, un code javascript est executé au moyen de l'attribut “onload” de la balise <body> (<body onload="T3_onloadWrapper();">). Aussi, un petit bout de javascript doit être ajouté en TypoScript. Un COA peut être utilisé à cet effet :

tsObject = COA;
tsProperties =
10 = TEXT
10.dataWrap = <script type="text/javascript">setTimeout("drawMap_map{field:uid}()",500)\;</script>
20 = < plugin.tx_wecmap_pi1
20 {
 height = 300
 width = 300
 showDirections = 0
 prefillAddress = 0
 initialMapType = G_NORMAL_MAP
 showInfoOnLoad = 0
 controls {
 showOverviewMap = 0
 showMapType = 1
 showScale = 0
 mapControlSize = small
 }
 markers.1 {
 title = ###title###
 street = ###address###
 city = ###city###
 zip = ###zip###
 country = ###country###
 }
}
;
cutIf = address = EMPTY;

Noter l'utilisation de “;” dans la propriété 10.dataWrap. Ceci est nécessaire car le point-virgule est le séparateur de propriétés.

La propriété “cutIf” permet de vérifier si le champ “address” est vide afin de ne pas avoir d'affichage quand aucune adresse n'est fournie (l'API de google map retourne un message d'erreur). Un exemple sans adresse est donné ci-dessous.

img-181

Configuration du plugin

La dernière étape est la configuration du “plugin” de sorte que les utilisateurs authentifiés ne puissent modifier que leurs propres images.

Cette opération est réalisée en utilisant le champ “cruser_id” dans le champ “Champ Admin” (“Input Admin Field”) du flexform, comme représenté ci-dessous.

img-182

Autres exemples

Si vous avez atteint cette partie du manuel, vous êtes maintenant familier avec les formulaires et leurs configurations.

Cette section de la documentation décrit des exemples simples ou plus complexes que j'ai créés pour répondre à des besoins particuliers. Le plus souvent, ces outils sont utilisés en intranet. Je les partage avec la communauté TYPO3 pour illustrer la simplicité et la puissance du générateur d'extension. Ils sont fournis en l'état et ne seront probablement jamais mis à jour. Télécharger les extensions depuis le TER, les ouvrir dans le Kickstarter, analyser les configurations et les adapter à votre problème.

Dans ce qui suit, chaque extension est brièvement décrite et illustrée par différentes captures d'écran. Au besoin, des informations utiles peuvent être fournies. Cette partie du manuel évoluera en fonction des exemples.

Télécharger des documents (sav_download)

A propos de cette extension

Cette extension très simple permet de télécharger des documents. Une icône “NEW” indique la présence d'un nouveau document pendant une durée de 15 jours et des icônes sont associés au type de fichier (voir la configuration des champs). Un mécanisme de tri sur la date et la catégorie est disponible dans la barre de titre.

Captures d'écran

img-183

img-184

Compte-rendu de réunions (sav_meetings)

A propos de cette extension

Cette extension a été conçue pour entrer et afficher le compte-rendu de réunions d'un groupe d'utilisateurs FE, par exemple une équipe de direction ou une équipe de développement. Chaque membre du groupe peut saisir des items qui seront discutés pendant la réunion. Une réunion possède une date et appartient à une catégorie (par exemple, un projet pour une équipe de développement). Un item est proposé par un membre du groupe. Il possède un nom et a une durée prévue. Un rapport lui est associé. Des boutons “Monter” et “Descendre” permettent de réorganiser les items. Un bouton “Supprimer” permet de détruire un item. Un bouton de sauvegarde avec une ancre HTML facilite la sauvegarde quand le compte-rendu est réalisé en ligne pendant la réunion.

Informations utiles

Par défaut, le groupe des utilisateurs FE est “sav_meetings”. Les sélecteurs associés aux champs “participants” et “proposed_by” filtrent la table “fe_users” avec ce groupe. Analyser la configuration de ces champs pour la vue “Input”. Elle comprend la propriété suivante :

whereSelect=###group_list=sav_meetings###;

Si vous ne souhaitez pas utiliser ce nom de groupe ni modifier l'extension, vous pouvez surcharger cette propriété en utilisant les possibilités du générateur (voir : Configuration des champs au moyen du TSConfig de la page). Editer les propriétés de page et ajouter les lignes suivantes dans le champ TSConfig (onglet “Options” dans le “flexform” des propriétés de la page). Le groupe qui sera utilisé devient “testgroup”.

tx_savmeetings.Meetings.inputForm.participants.whereSelect = ###group_list=testgroup###
tx_savmeetings.Meetings.inputForm.proposed_by.whereSelect = ###group_list=testgroup###
Captures d'écran

img-185

img-186

img-187

Problèmes connus

La requête de suppression ne détruit pas les items des relations MM. En effet, la table intermédiaire ne contient pas de champ “deleted”. La suppression serait définitive alors qu'elle est récupérable pour les deux autres tables de la relation.

A faire

Les nouvelles idées sont bienvenues !

Sponsors et remerciements

Sponsors

Merci à :

Dipool ( http://www.dipool.net/ ) pour l'aide apportée lors du développement des propriétés “tsObject” et “tsProperties” ainsi que de l'extension “sav_library_example10”.

Remerciements

Merci à :

Paul Boomkamp et Thomas Hirt pour avoir détecté quelques erreurs dans la version 3.0.0.

Changelog

Stable 0.0.1:

première version du manuel en français.

stable 0.0.2:

mise à jour du manuel.

106