BACKEND MODULE. La valeur par défaut est _DISPATCH mais on peut utilise un autre script exemple :



Documents pareils
Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Service d'authentification LDAP et SSO avec CAS

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

SYSTÈMES D INFORMATIONS

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

BIRT (Business Intelligence and Reporting Tools)

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Mysql. Les requêtes préparées Prepared statements

Tutoriel de formation SurveyMonkey

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Nuxeo 5.4 : les nouveautés

Paginer les données côté serveur, mettre en cache côté client

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Drupal Développeur. Theming et développement pour Drupal. Une formation Formateur : Fabien Crépin. Drupal Développeur.

Stockage du fichier dans une table mysql:

1. Installation du Module

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Recherche dans un tableau

Le stockage local de données en HTML5

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

SQL Server et Active Directory

Les Utilisateurs dans SharePoint

Alfstore workflow framework Spécification technique

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

AWS avancé. Surveiller votre utilisation d EC2

Tutoriel TYPO3 pour les rédacteurs

.NET - Classe de Log

How to Login to Career Page

INTRODUCTION AU CMS MODX

Pratique et administration des systèmes

TP JAVASCRIPT OMI4 TP5 SRC

1. Introduction Création d'une requête...2

Application de lecture de carte SESAM-Vitale Jeebop

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Formulaire pour envoyer un mail

Gestion Electronique de Document (ECM/GED)

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Configurer la supervision pour une base MS SQL Server Viadéis Services

Encryptions, compression et partitionnement des données

REMBO Version 2.0. Mathrice 2004 DESCRIPTION MISE EN OEUVRE CONCLUSION.

PLUGINS Guide du Développeur STEPHANE FERRARI. P l u X m l 5.4

Olivier Mondet

Guide d'installation et de configuration du module

Dans la série LES TUTORIELS LIBRES présentés par le site FRAMASOFT. Premiers pas avec WinPT (cryptographie sous Win) EITIC

Connaître la version de SharePoint installée

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

MANUEL WORDPRESS. Objectif: Refonte d un site web sous Wordpress I PRE-REQUIS: 1 / Créer un backup (sauvegarde) du site:

Module pour la solution e-commerce Magento

Introduction à JDBC. Accès aux bases de données en Java

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Nouveautés joomla 3 1/14

TDB-SSI LES EXTENSIONS

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Architecture Orientée Service, JSON et API REST

Création de Sous-Formulaires

Groupe Eyrolles, 2003, ISBN : X

Introduction aux outils BI de SQL Server Tutoriel sur SQL Server Integration Services (SSIS)

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

SQL Parser XML Xquery : Approche de détection des injections SQL

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Sécurité des applications web. Daniel Boteanu

Once the installation is complete, you can delete the temporary Zip files..

Compte-rendu de projet de Système de gestion de base de données

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Micro-ordinateurs, informations, idées, trucs et astuces. Utiliser une caméra IP Trendnet IP-TV110. Auteur : François CHAUSSON

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Rapport de Mini-Projet en ArcGIS Engine

Chapitre 5 : Les procédures stockées PL/SQL

Projet de programmation (IK3) : TP n 1 Correction

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Guide d'installation rapide TFM-560X YO.13

Les déclencheurs. Version 1.0. Grégory CASANOVA

VTP. LAN Switching and Wireless Chapitre 4

Edition de sites Jahia 6.6

DOM - Document Object Model

Eyes Of Network 4.0. Documentation d installation et de configuration

WDpStats Procédure d installation

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Hébergement de site web Damien Nouvel

ECLIPSE ET PDT (Php development tools)

VTigerCRM. CRM : Logiciel de gestion des activités commerciales d'une (petite) entreprise

CREATION d UN SITE WEB (INTRODUCTION)

Installation locale de JOOMLA SEPIA

CREATION WEB DYNAMIQUE

KPI (Key Performance Indicator) dans MOSS

8 Mars Guide du Wiki Confluence

PHP 5. La base de données MySql. A. Belaïd 1

Guide utilisateur : Directmail et newsletter

Exercices sur SQL server 2000

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

équipement radio Procédure

Transcription:

BACKEND MODULE Auteur : Philippe Leblond Compagnie : Sys-Tech (http://www.sys-tech.net) Référence obligatoire pour les backend module : http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.2.0/view/ conf.php Accès : $MCONF['access']='user,group,admin'; Valeur possible : user : utilisateur (On pourra mettre des permissions sur les utilisateur qui auront accès à ce module) group : groupe (On pourra mettre des permissions sur les groupes utilisateur qui auront accès à ce module) admin : administrateur (Les administrateurs auront accès à ce module) Script à utiliser : $MCONF['script']='_DISPATCH'; //appelera par défaut index.php La valeur par défaut est _DISPATCH mais on peut utilise un autre script exemple : $MCONF['script']='allo.php'; //non recommandé Icone du module backend : $MCONF['default']['tabs_images']['tab']='moduleicon.gif'; Module de traduction pour les termes généraux relié au backend : $MCONF['default']['11_ref']='LLL:EXT:st_kitchen/mod1/locallang_mod.php'; Workspace permission : $MCONF['workspaces'] = online,offline,custom ; Valeur possible : online : Permet en mode live offline : Permit en mode draft custom : Permit dans les workspace personnonalisé

Localisation global $LANG $LANG->getLL('function1') Menu fonction Pour ajouter des menus : function menuconfig() { global $LANG; $this->mod_menu = Array ( 'function' => Array ( '1' => $LANG->getLL('function1'), '2' => $LANG->getLL('function2'), '3' => $LANG->getLL('function3'), ) ); parent::menuconfig(); Pour récupérer le numéro du menu contextuel : $this->mod_settings['function']

TYPO3 Core Engine (TCE) Le TYPO3 core engine permet d'exécuter des commandes et faire des requêtes SQL sans avoir à écrire des longues lignes de code php et des requêtes SQL. De plus il prend en compte tous les paramètres et permission par défaut de TYPO3. Il y a donc moins de chance de se tromper en utilisant le TCE que faire nous même nos requêtes SQL. Documentation : http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.2.0/view/ 3/3/ Data : (création ou modification) Syntaxe pour une modification : $data[ tablename ][ uid ][ fieldname ] = value Exemple pour une création : $data['pages']['new9823be87'] = array( "title" => "The page title", "subtitle" => "Other title stuff", "pid" => "45" ); Soumission d'une data $tce = t3lib_div::makeinstance('t3lib_tcemain'); $tce->stripslashes_values = 0; $tce->start($data,array()); $tce->process_datamap(); Pour récuper le id d'un nouvel enregistrement : $tce->substnewwithids[$id]; Cmd : (delete,move,copy) Syntaxe pour une supression : $cmd[table][uid][commande] = valeur; Exemple pour une suppression : $cmd['pages'][66]['delete'] = 1; Soumission d'une commande : $tce = t3lib_div::makeinstance('t3lib_tcemain');

$tce->stripslashes_values=0; $tce->start(array(),$cmd); $tce->process_cmdmap();

Création de lien et le TCE Méthode editonclick Création d'un lien pour éditer une table du TCA : //Éditer la page ayant comme uid 66 $params='&edit[pages][66]=edit'; $link = '<a href="#" onclick="'.htmlspecialchars(t3lib_befunc::editonclick($params)).'">edit</a>'; //Éditer le titre de la page ayant comme uid 66 $params='&edit[pages][66]=edit&columnsonly=title'; $link = '<a href="#" onclick="'.htmlspecialchars(t3lib_befunc::editonclick($params)).'">edit</a>'; Création d'un lien pour créer un nouvel enregistrement dans une table : //Créer une page sous la page ayant comme uid 33 $params = '&edit[pages][33]=new&defvals[pages][title]=newelement&defvals[pages][subtitle]=newelement2'; $content.= '<a href="#" onclick="'.htmlspecialchars(t3lib_befunc::editonclick($params,$globals['back_path'])).'">'. 'Create new page inside page 33</a><br/>';

Méthode tce_db.php et alt_doc.php tce_db.php : SC_tce_db Class Reference Ce fichier TYPO3 permet d'exécuter des cmd et datamap. Document : http://typo3.org/documentation/document-library/core-documentation/doc_core_api/ 4.2.0/view/3/3/ Syntaxe : // id : page du backend // $this->mconf['name'] : nom du module // $this->mod_settings['function'] : menu $returnurl="redirect=".$baseurl.urlencode("mod.php?id={$this->id&m={$this- >MCONF['name']&SET[function]={$this->MOD_SETTINGS['function']{$param"); $urlcomplete = "{$baseurltce_db.php?&cmd[{$table][{$uidrecord][delete]=1&{$returnurl"; alt_doc.php : SC_alt_doc Class Reference Permet de faire un rendu du TCA Syntaxe : // id : page du backend // $this->mconf['name'] : nom du module // $this->mod_settings['function'] : menu $returnurl="returnurl=".urlencode("mod.php?id={$this->id&m={$this- >MCONF['name']&SET[function]={$this->MOD_SETTINGS['function']{$param"); $editrecord = "edit[{$table][{$uidrecord]=edit"; $urlcomplete = "{$baseurlalt_doc.php?{$returnurl&{$editrecord";

Voici 2 fonctions pratiques pour les backend modules : /* * cmd : EDIT,NEW,DELETE */ function geturlcmdrecord($table,$uidrecord,$cmd='edit',$param=array()) { if (count($param)>0) { $param = '&'.implode('&',$param); $baseurl = t3lib_div::getindpenv(typo3_request_dir); $returnurl="returnurl=".urlencode("mod.php?id={$this->id&m={$this- >MCONF['name']&SET[function]={$this->MOD_SETTINGS['function']{$param"); if (strcasecmp('edit',$cmd)==0) { $editrecord = "edit[{$table][{$uidrecord]=edit"; $urlcomplete = "{$baseurlalt_doc.php?{$returnurl&{$editrecord"; elseif (strcasecmp('delete',$cmd)==0) { $returnurl="redirect=".$baseurl.urlencode("mod.php?id={$this->id&m={$this- >MCONF['name']&SET[function]={$this->MOD_SETTINGS['function']{$param"); $urlcomplete = "{$baseurltce_db.php?&cmd[{$table][{$uidrecord][delete]=1&{$returnurl"; else { $editrecord = "edit[{$table][{$this->id]=new"; $urlcomplete = "{$baseurlalt_doc.php?{$returnurl&{$editrecord"; return $urlcomplete;

/* * cmd : EDIT,NEW,DELETE */ function geticoncmd($table,$uidrecord,$cmd='edit',$param=array(),$width=16,$height=16,$addattribute='') { $baseurl = t3lib_div::getindpenv(typo3_request_dir); if (strcasecmp('delete',$cmd)==0) { $icon = '<a '.$addattribute.' href="'.$this- >geturlcmdrecord($table,$uidrecord,$cmd,$param).'"><img '.t3lib_iconworks::skinimg($baseurl,'sysext/t3skin/icons/gfx/garbage.gif').' width="'.$width.'" height="'.$height.'" alt="" /></a>'; if (strcasecmp('edit',$cmd)==0) { $icon = '<a '.$addattribute.' href="'.$this- >geturlcmdrecord($table,$uidrecord,$cmd,$param).'"><img '.t3lib_iconworks::skinimg($baseurl,'sysext/t3skin/icons/gfx/edit2.gif').' width="'.$width.'" height="'.$height.'" alt="" /></a>'; if (strcasecmp('new',$cmd)==0) { $icon = '<a '.$addattribute.' href="'.$this- >geturlcmdrecord($table,$uidrecord,$cmd,$param).'"><img '.t3lib_iconworks::skinimg($baseurl,'sysext/t3skin/icons/gfx/new_el.gif').' width="'.$width.'" height="'.$height.'" alt="" /></a>'; return $icon;

Simulation du frontend en backend Il arrive parfois d'avoir besoin des méthodes du TSFE pour avoir accès aux méthode de la librairie tslib_cobj. Avec la méthode suivante on peut avoir accès aux méthodes de template ainsi qu'à l'objet typolink pour faire des liens en backend. Cette méthode peut causer certain problème car on est pas dans un contexte de frontend. function get_tsfe($pid = 1) { require_once(path_site.'typo3/sysext/cms/tslib/class.tslib_fe.php'); require_once(path_site.'t3lib/class.t3lib_userauth.php'); require_once(path_site.'typo3/sysext/cms/tslib/class.tslib_feuserauth.php'); require_once(path_site.'t3lib/class.t3lib_cs.php'); require_once(path_site.'typo3/sysext/cms/tslib/class.tslib_content.php') ; require_once(path_site.'t3lib/class.t3lib_tstemplate.php'); require_once(path_site.'t3lib/class.t3lib_page.php'); require_once(path_site.'t3lib/class.t3lib_timetrack.php'); $TSFEclassName = t3lib_div::makeinstanceclassname('tslib_fe'); $GLOBALS['TSFE'] = new $TSFEclassName($GLOBALS['TYPO3_CONF_VARS'], $pid, '0', 0, '','','',''); $temp_ttclassname = t3lib_div::makeinstanceclassname('t3lib_timetrack'); $GLOBALS['TT'] = new $temp_ttclassname(); $GLOBALS['TT']->start(); $GLOBALS['TSFE']->config['config']['language']=$_GET['L']; $GLOBALS['TSFE']->id = $pid; $GLOBALS['TSFE']->connectToMySQL(); $sqldebug = $GLOBALS['TYPO3_DB']->debugOutput; $GLOBALS['TYPO3_DB']->debugOutput = false; $GLOBALS['TSFE']->initLLVars(); $GLOBALS['TSFE']->initFEuser(); $GLOBALS['TSFE']->sys_page = t3lib_div::makeinstance('t3lib_pageselect'); $GLOBALS['TSFE']->sys_page->init($GLOBALS['TSFE']->showHiddenPage); $page = $GLOBALS['TSFE']->sys_page->getPage($pid); if (count($page) == 0) { $GLOBALS['TYPO3_DB']->debugOutput = $sqldebug; return false;

if ($page['doktype']==4 && count($globals['tsfe']- >getpageshortcut($page['shortcut'],$page['shortcut_mode'],$page['uid'])) == 0) { $GLOBALS['TYPO3_DB']->debugOutput = $sqldebug; return false; if ($page['doktype'] == 199 $page['doktype'] == 254) { $GLOBALS['TYPO3_DB']->debugOutput = $sqldebug; return false; $GLOBALS['TSFE']->getPageAndRootline(); $GLOBALS['TSFE']->initTemplate(); $GLOBALS['TSFE']->forceTemplateParsing = 1; $GLOBALS['TSFE']->tmpl->start($GLOBALS['TSFE']->rootLine); $GLOBALS['TSFE']->sPre = $GLOBALS['TSFE']->tmpl- >setup['types.'][$globals['tsfe']->type]; // toplevel - objarrayname $GLOBALS['TSFE']->pSetup = $GLOBALS['TSFE']->tmpl- >setup[$globals['tsfe']->spre.'.']; if (!$GLOBALS['TSFE']->tmpl->loaded ($GLOBALS['TSFE']->tmpl->loaded &&!$GLOBALS['TSFE']->pSetup)) { $GLOBALS['TYPO3_DB']->debugOutput = $sqldebug; return false; $GLOBALS['TSFE']->getConfigArray(); //$GLOBALS['TSFE']->getCompressedTCarray(); $GLOBALS['TSFE']->inituserGroups(); $GLOBALS['TSFE']->connectToDB(); $GLOBALS['TSFE']->determineId(); return $GLOBALS['TSFE']->newCObj(); Avec cette fonction nous pouvons obtenir plusieurs fonctions relié exclusivement au frontend telque la fonction typolink, typolink_url et les fonctions de template. Pour initialiser le TSFE : $this->get_tsfe();

Pour l'utilisation des fonction frontend : url : $GLOBALS['TSFE']->cObj->typolink_url($link); $GLOBALS['TSFE']->cObj->typolink($link); Template : $html = "###TEST###<div>###REPLACE###</div>###TEST###"; $templatecomplete = $GLOBALS['TSFE']->cObj->getSubpart($html,"###TEST###"); $markerarray=array(); $subpartarray=array(); $wrappedsubpartarray=array(); $markerarray['###replace###'] = 'ceci est un test'; $content = $GLOBALS['TSFE']->cObj->substituteMarkerArrayCached($templateComplete, $markerarray,$subpartarray,$wrappedsubpartarray);

Hook TCEMain Hook pour les datas (lorsqu'on veux modifier ou créer un enregistrement): Dans le fichier ext_localconf.php : $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/ class.t3lib_tcemain.php']['processdatamapclass'][] = 'EXT:keyextension/file.php:tx_class'; Dans le fichier file.php : // $status : update ou new // $table : table sur laquelle on fait l'opération // $id : reprsente le id de l'enregistrement (lors de la création d'un objet on doit utiliser la fonction $tce->substnewwithids[$id];) // $fieldarray : représente les champs qu'on crée ou modifie. Action à faire après l'enregistrement des données. function processdatamap_afterdatabaseoperations($status, $table, $id, $fieldarray, $tce) { // mettre son code ici Pour récuper le id d'un nouvel enregistrement : $tce->substnewwithids[$id]; Action à faire avant l'enregistrement des données. function processdatamap_preprocessfieldarray(&$incomingfieldarray, $table, $id, $tce) { // mettre son code ici Hook pour les cmd (lorsqu'on veux déplacé, copié ou supprimé un enregistrement) $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/ class.t3lib_tcemain.php']['processcmdmapclass'][] = 'EXT:profweb_pratiques/ class.tx_profwebpratiques_tcemain.php:tx_profwebpratiques_tcemain'; // $command: delete, moce, copy, undelete // $table : table sur laquelle on fait l'opération // $id // $value : représente les champs qu'on crée ou modifie. function processcmdmap_preprocess($command, $table, $id, $value, $tce) { // mettre son code ici

Fonction backend et astuce Cache : Pour supprimer la cache d'une page on peut utiliser la fonction : $tce->clear_cachecmd exemple : require_once (PATH_t3lib."class.t3lib_tcemain.php"); $tce = t3lib_div::makeinstance("t3lib_tcemain"); $tce->clear_cachecmd($uidpage); t3lib_befunc : Pour obtenir les champs startime, endtime, hidden : t3lib_befunc::beenablefields('table'); Pour obtenir le champ deleted : t3lib_befunc::deleteclause('table'); t3lib_userauthgroup : Savoir si un utilisateur est administrateur ou pas : $GLOBALS['BE_USER']->isAdmin Permet d'obtenir les condition SQL pourr les permission d'une page sélectionner dans le backend $GLOBALS['BE_USER']->getPagePermsClause Pour savoir si un utilisateur appartient à un groupe : $GLOBALS['BE_USER']->isMemberOfGroup($idGroup) Autre : Connaitre le ID de la page où l'on se trouve dans le backend : $this->id

Création d'arbre dans le backend Technique 1 : require_once(path_t3lib.'../typo3/class.webpagetree.php'); $tree = t3lib_div::makeinstance('webpagetree'); $content.= $tree->getbrowsabletree(); Utiliser la fonction JumpTo en javascript pour identifier la bonne page. Technique 2 : require_once(path_t3lib.'class.t3lib_treeview.php'); $tree = t3lib_div::makeinstance('t3lib_treeview'); //initialise treeview $tree->init(); $tree->expandfirst =1; $tree->expandall = 1; $tree->mounts = array(1); $tree->table = 'pages'; $tree->clause = ''; //additionnal clause where (begin whith ' AND') $tree->orderbyfields = 'sorting'; debug($tree->tree); $content.=$tree->getbrowsabletree(); Utiliser la fonction JumpTo en javascript pour identifier la bonne page. Technique 3 (arbre statique) : require_once(path_t3lib.'class.t3lib_pagetree.php'); // Initialize starting point of page tree: $treestartingpoint = 1; $treestartingrecord = t3lib_befunc::getrecord('pages', $treestartingpoint); $depth = 2; // Initialize tree object: $tree = t3lib_div::makeinstance('t3lib_pagetree'); $tree->init('and '.$GLOBALS['BE_USER']->getPagePermsClause(1)); // Creating top icon; the current page $HTML = t3lib_iconworks::geticonimage('pages', $treestartingrecord, $GLOBALS['BACK_PATH'],'align="top"'); $tree->tree[] = array(

); 'row' => $treestartingrecord, 'HTML'=>$HTML // Create the tree from starting point: $tree->gettree($treestartingpoint, $depth, ''); #debug($tree->tree); // Put together the tree HTML: $output = ' <tr bgcolor="#999999"> <td><b>icon / Title:</b></td> <td><b>page UID:</b></td> </tr> '; foreach($tree->tree as $data) { $output.=' <tr bgcolor="#cccccc"> <td nowrap="nowrap">'.$data['html'].htmlspecialchars($data['row']['title']).'</td> <td>'.htmlspecialchars($data['row']['uid']).'</td> </tr> '; $content.= '<table border="0" cellspacing="1" cellpadding="0">'.$output.'</table>';

CRON Pour n'importe quelle commande provenant du CLI, il faut faire passer la requête par le fichier typo3/cli_dispatch.phpsh. Celui-ci s'occupe d'initialiser l'environnement TYPO3 et de loader l'utilisateur backend requis. À noter qu'il est très important de créer un utilisateur backend et dont le nom d'utilisateur devra obligatoirement commencer par _CLI_. Dans l'exemple ci-dessous le nom de notre utilisateur backend est _CLI_st_extension ext_localconf.php : $TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']['st_extension'] = array('ext:st_extension/cli/class.tx_st_extension_cli.php','_cli_st_extension'); st_extension : représente le nom de notre cli st_extension : représente la clé unique de notre extension _CLI_st_extension : nom de l'utilisateur backend Code : <?php // Ce fichier est inclu à partir de typo3/cli_dispatch.phpsh if (!defined('typo3_climode')) die('you cannot run this script directly!'); require_once(path_t3lib. 'class.t3lib_cli.php'); class tx_st_extension_cli extends t3lib_cli { function tx_st_extension_cli() { // Make sure the this always calls the parent's constructor parent::t3lib_cli(); function main() { // Check arguments by looping through $this->cli_args! foreach($this->cli_args as $arg => $value) { // Do something function dosomething() { // Do something here return true;

// XCLASS Management if (defined('typo3_mode') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ st_extension/cli/tx_st_extension_cli.php']) include_once($typo3_conf_vars[typo3_mode]['xclass']['ext/st_extension/cli/ tx_st_extension_cli.php']); // Call the functionality $myobj = t3lib_div::makeinstance('tx_st_extension_cli'); $myobj->main(); $myobj->dosomething();?> Tous les arguments passés au script se retrouvent dans la variable membre $cli_args après que le constructeur de t3lib_cli ait été appelé. Plusieurs fonctions sont aussi disponibles pour gérer les arguments. Utiliser $SERVER["argv"] lorsque le paramètre $argv doit être spécifié. Il ne reste plus qu'à appeller le script de cette façon. Le premier argument est obligatoire. Ça doit être le keyname utilisé pour l'array $TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']. On peut ensuite passer tous les arguments qu'on veut. Note: Le binaire de php doit obligatoirement être /usr/bin/php. Utilisez un symlink si ce n'est pas le cas. /srv/www/vhosts/csrsdev.clients.sys-tech.net/typo3/cli_dispatch.phpsh st_extension

Interface de configuration d'une extension dans l'extension manager Créer dans le dossier de base de l'extension le fichier ext_conf_template.txt exemple de ext_conf_template.txt : # cat=basic; type=boolean; label= Titre de page titlepage = 1 # cat=basic; type=string; label= Code code = cat : cat correspond à la catégorie de la variable, les choix possibles sont : basic,menu,content,page,advanced. La plus utilisé est basic. On peut utiliser des sous-catégories pour ajouter des titres : enable dims file typo color links language Exemple de sous-catégorie : # cat=basic/enable; Les type possible : - boolean (case à cocher à la restitution) - int (entier) - int[0-3] (entier entre 0 à 3) - int+ (entier entre 0 et 10000) - color (choix de couleurr) - wrap (permet de mettre deux partie de code -> on récupère dans le code la "partie gauche partie droite") - options[option1,option2,option3,...] (Affiche une select box avec les valeurs définies entre []) - file (pas testé) - string : champ text

quelques exemple : # cat=basic; type=options[label9,test2]; label=test variablename9=test2 # cat=basic/file; type=file[html,jpg]; label=label11 variablename11= # cat=basic; type=int[0-3]; label = 0 a 3 debug = 0 # cat=basic; type=string; label=label2 variablename2 = 123 # cat=basic; type=boolean; label=label1:mettre ici la description description variablename1 = 1 Label : représenter un libellé à afficher. Exploitation des variables Maintenant il suffit de récupérer les variables dans le plugin pour pouvoir les utiliser, on procède de cette manière : global $TYPO3_CONF_VARS; $variable=$typo3_conf_vars["ext"]["extconf"]["nom_extension"]; Ceci nous renvoi dans $variable le tableau sérialisé des variables de configuration. Il suffit de désérialiser ce tableau comme ceci : $variable=unserialize($variable); Ensuite on peut accéder au valeur des variable puisque l'index de $variable est le nom mis dans le fichier ext_conf_template.txt exemple : echo $variable["titlepage"];

TCA exemple de la fonction itemsprocfunc : Permet de modifier la valeur d'un select 'category' => array ( 'exclude' => 0, 'label' => 'test', 'config' => array ( 'type' => 'select', 'foreign_table' => 'tx_stkitchen_category', 'foreign_table_where' => 'ORDER BY tx_stkitchen_category.uid', "itemsprocfunc" => "user_getgenreitems", 'size' => 5, 'minitems' => 0, 'maxitems' => 5, ) ), function user_getgenreitems(&$config, &$item) { $config['items'][2] = array('label0',201); return $config; Exemple de la fonction userfunc : Permet de créer un champ sur mesure "category" => Array ( "label" => "test", 'config' => Array ( 'type' => 'user', 'userfunc' => 'user_getgenreitems', ), ), function user_getgenreitems($pa, $fobj) { //reponse dans $PA['row']['category'] $content = '<select name="data[tx_stkitchen_recipe][3][category]"><option value="1">1</option><option value="2">2</option></select>'; return $content; IRRE

'test' => Array( 'exclude' => 1, 'label' => 'test', 'config' => Array( 'type' => 'inline', 'foreign_table' => 'fe_groups', 'maxitems' => 10, 'appearance' => Array( 'collapseall' => 1, 'expandsingle' => 1, ), ), ), Fichier : 'file' => array ( 'exclude' => 0, 'label' => 'LLL:EXT:bbb/locallang_db.xml:tx_bbb_bbb.file', 'config' => array ( 'type' => 'group', 'internal_type' => 'file', 'allowed' => 'gif,png,jpeg,jpg', 'max_size' => $GLOBALS['TYPO3_CONF_VARS']['BE']['maxFileSize'], 'uploadfolder' => 'uploads/tx_bbb', 'size' => 1, 'minitems' => 0, 'maxitems' => 1, ) ), Lien : 'link' => array ( 'exclude' => 0, 'label' => 'LLL:EXT:bbb/locallang_db.xml:tx_bbb_bbb.link', 'config' => array ( 'type' => 'input', 'size' => '15', 'max' => '255', 'checkbox' => '', 'eval' => 'trim', 'wizards' => array( '_PADDING' => 2, 'link' => array( 'type' => 'popup',

), ) ) ) 'title' => 'Link', 'icon' => 'link_popup.gif', 'script' => 'browse_links.php?mode=wizard', 'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1' Méthode utilisé pour récuper notre lien de la BD : $url = htmlspecialchars($link); $name = explode(' ', $url); $content = $this->cobj->gettypolink('titre du url', $url);

AJAX Coté serveur : Dans le fichier ext_localconf.php $TYPO3_CONF_VARS['BE']['AJAX']['tx_myext::ajaxID'] = 'filename:object->method'; exemple : $TYPO3_CONF_VARS['BE']['AJAX']['SC_alt_db_navframe::expandCollapse'] = 'typo3/ alt_db_navframe.php:sc_alt_db_navframe->ajaxexpandcollapse'; alt_db_navframe.php : public function ajaxexpandcollapse($params, &$ajaxobj) { $this->init(); // do the logic... if (empty($this->tree)) { $ajaxobj->seterror('an error occurred'); else { // the content is an array that can be set through $key / $value pairs as parameter $ajaxobj->addcontent('tree', 'The tree works...'); Coté client : $this->doc->loadjavascriptlib('contrib/prototype/prototype.js'); $this->doc->loadjavascriptlib('js/common.js'); new Ajax.Request('ajax.php', { method: 'get', parameters: 'ajaxid=sc_alt_db_navframe::expandcollapse', oncomplete: function(xhr, json) { // display results, should be "The tree works".bind(this), ont3error: function(xhr, json) { // display error message, will be "An error occurred" if an error occurred.bind(this) );

Versioning et workspace Documentation : http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.2.0/view/ 3/2/ http://typo3.org/documentation/document-library/core-documentation/doc_core_inside/4.1.0/ view/3/7/ http://typo3.org/documentation/document-library/extension-manuals/doc_v4_workspace/1.0.5/ view/ (En allemand) Stage de la version : Editing : Le contenu peut être éditer librement. Reviewer : Le contenu doit être approuver avant d'être publier. Le contenu ne peut être modifier à moins d'avoir les droits de reviewer. Publish : Le contenu peut être publier. Le contenu ne peut être modifer tant et aussi longtemp que le contenu n'a pas été publié officiellement. Seul les membre ayant les droits d'éditer en mode live peuvent changer le contenu. Pour cela il faut avoir les droits sur le "Live workspace" Reject : Le contenu a été rejeter et peut être éditer à nouveau. Toute personne ayant les droit sur le workspace a le droit d'éditer un contenu et passer au mode reviewer. Type de versionning : Element : Versionning sur les enregistrements Page : Versionning sur les pages Branch : Versionning sur copy, deplacé des branches complète de page (page et sous page) Workspace avec templavoila Lorsqu'on crée un nouvel élément dans le workspace nous créons un élément vide qui aura comme label "INITIAL PLACEHOLDER" et un nouvel élément sera créé et aura dans le champ t3ver_oid le uid du premier élément créé. Lorsqu'on modifie un élément de contenu dans le workspace il y aura un nouvel élément de créer avec t3ver_label="auto-created for WS 1" aura dans le champ t3ver_oid le uid de l'élément en ligne. Lorsqu'on supprime un élément de contenu en fait c'est comme si on avait une nouvelle révision de la page car l'élément de contenu était entrer dans la table pages.

Champ dans la base de donnée : t3ver_oid : uid de la version originale t3ver_id : le nieme nombre associer a la page original (incrementiel) pid : -1 pour les versions hots ligne. t3ver_wsid : id du workspace t3ver_label : Description sur la version t3ver_stage : id du stage t3ver_state : 2 version supprimé, 1 nouvel élément, 3 élément déplacé, 4 are move-to pointer elements t3ver_count : Nombre de fois qu'un element a été en ligne t3ver_tstamp : date de publication de la version t3ver_move_id : Contient la source id de l'enregistrement qui doit être déplacé Stage statut : stage reject = -1 stage editing = 0 stage review = 1 stage publish = 10 Différence entre swap et publish : Dans les 2 cas nous allons publié la version en ligne. La différence fondamentale est que lorsqu'on utilise swap, la version hors ligne ira en ligne alors que la version live revient en mode hors-ligne alors que si l'on utilise publish alors la version hors ligne ira en ligne et la version en ligne ira dans les archives. Swap sera souvent utilisé pour un événement pontuel et que l'on veut plus tard revenir avec notre ancienne version. On refera un swap à nouveau. versionol Lorsqu'on selectionne un enregistrement basé sur le uid alors pour qu'on obtienne le bon resultat en mode preview il est important d'utiliser la fonction $GLOBALS['TSFE']->sys_page- >versionol('table',$row); versionol transformera le uid avec le bon uid en mode preview. Frontend : $GLOBALS['TSFE']->sys_page->versionOL($table,&$row, $unsetmovepointers=false) Backend : t3lib_befunc::workspaceol ($table, &$row) exemple :

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tt_content', "uid='80'",'','',''); $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); $GLOBALS['TSFE']->sys_page->versionOL('tt_content',$row,false); if (is_array($row)) { $content = "<br/>content header = {$row['header']"; uid en mode live : 80 uid en mode preview : 82 80 est le uid en mode live mais en mode preview le uid devrait etre 82 pour notre exemple. versionol va transformer notre $row avec les bons paramètres. Notre tableau devra contenir les valeur suivant pour être fonctionnel : "uid", "pid" and "t3ver_state" fixversioningpid Lorsque nous sommes en mode preview et que l'on choisit un uid qui a comme pid -1 alors on utilise la fonction fixversioningpid pour obtenir le pid de la page correspondante. Frontend : $GLOBALS['TSFE']->sys_page->fixVersioningPid(table,$row); Backend : t3lib_befunc::fixversioningpid(table,$row);