Per aspera ad astra
Home Le DATAHANDLER
Example of Category Blog layout (FAQs/General category)
Le DATAHANDLER PDF Imprimer Envoyer
Écrit par Administrator   
Mardi, 16 Février 2010 02:54

Le DataHandler gère la lecture écriture des données.  Il est optionnel. Si vous le mettez il fonctionnera de base en mode création.

 

Datahandler en mode édition

Si vous spécifier un id d'enregistrement comme ci dessous, vous pouvez éditez un enregistrement et le datahandler va automatiquement remplir les valeurs des renderlet dont les noms correspondent aux colonnes de la table avec les valeurs de cette ligne.

<datahandler:DB>
 <tablename>tx_bdd_pathologies</tablename>
 <keyname>uid</keyname>
 <editEntry>
 <userobj>
 <php><![CDATA[/*<?php*/
//ici on récupérer l'id depuis l'URL, mais vous pouvez mettre <editEntry>53</editEntry> par exemple
 $paramurl = t3lib_div::_GET();
 return $paramurl['fiche'];
 /*?>*/]]></php>
 </userobj>
 </editEntry>
 </datahandler:DB>
 



Datahandler en mode création

Sans editEntry vous êtes en mode CREATION c'est à dire qu'a la validation de votre formulaire le DataHandler va AUTOMATIQUEMENT ajouter un enregistrement dans votre table avec les champs remplis du formulaire qui matchent les colonnes de votre table (c'est le champ "name" des renderlet qui doit être égal au nom de la colonne)

Une fois que vous avez créer votre enregistrement, le datahandler switch en mode edition, le beforeCreation et afterCreation ne sera plus exécuté, ca sera beforeEdition et afterEdition. Simple non ?

 

 <datahandler:DB>
 <tablename>tx_bdd_faq</tablename>
 <keyname>uid</keyname>
 <process>
 <beforeCreation>
 <userobj>
 <php><![CDATA[
 
 $aData = $this->getParams();
 $aData["hidden"] = "1";
 $aData["crdate"] = time();
 $aData["tstamp"] = time();
 $aData["pid"] = 63;
 $aData["cruser_id"] = $GLOBALS["TSFE"]->fe_user->user['uid'];

 return $aData;
 
 ]]></php>
 </userobj>
 </beforeCreation>

 <afterCreation>
 <userobj>
 <php><![CDATA[/*<?php*/
 
 $this->oSandBox->message = "La question a bien été créé. Elle sera soumise à l\'administrateur pour validation.";

 $GLOBALS["TSFE"]->fe_user->setKey("ses", "confirmation_message", $this->oSandBox->message);
 $GLOBALS["TSFE"]->fe_user->storeSessionData();

 return $this->getParams();

 /*?>*/]]></php>
 </userobj>
 </afterCreation>
 
 <beforeEdition>
 <userobj>
 <php><![CDATA[/*<?php*/
 $params = t3lib_div::_GET();
 $postId = $params['fiche'];
 $currentEntryId = $this->oDataHandler->currentEntryId();
 $uid = ($currentEntryId) ? $currentEntryId : $postId; 
 
 $admin_condition = "0";    
 $groups = explode(",", $GLOBALS["TSFE"]->fe_user->user['usergroup']);                        
 if (in_array("2", $groups) || in_array("3", $groups)) {
 $admin_condition = "1";
 }

 $temp= $GLOBALS["TYPO3_DB"]->exec_SELECTgetRows(
 "uid",
 "tx_bdd_faq",
 "deleted = 0 AND pid = 63 AND uid=".$uid ." AND ( ". $admin_condition ." OR cruser_id = " . $GLOBALS["TSFE"]->fe_user->user['uid'] .")",
 "",
 "");

 if (sizeof($temp) == 0) { //pas habilité
 header('Location: /index.php?id=30'); 
 }
 
 $aData = $this->getParams();
 $aData["tstamp"] = time();
 return $aData;

 /*?>*/]]></php>
 </userobj>
 </beforeEdition>
 <afterEdition>
 <userobj>
 <php><![CDATA[/*<?php*/

 $this->oSandBox->message = "Les modifications ont bien été enregistrées dans la faq. Elles seront soumises à l\'administrateur pour validation.";

 $GLOBALS["TSFE"]->fe_user->setKey("ses", "confirmation_message", $this->oSandBox->message);
 $GLOBALS["TSFE"]->fe_user->storeSessionData();

 return $this->getParams();
 
 /*?>*/]]></php>
 </userobj>
 </afterEdition>
 </process>
 </datahandler:DB>

 

 

 

Basculer en mode édition


  <sandbox>
  <userobj>
  <php><![CDATA[
 
   var $message = "";
 
  function init() {
 $params = t3lib_div::_GET();
 $postId = $params['fiche'];
 $currentEntryId = $this->oForm->oDataHandler->currentEntryId();
 $fiche = ($currentEntryId) ? $currentEntryId : $postId;
 if (isset($fiche) && $fiche != "" && !$currentEntryId) {
   $this->oForm->forceEntryId($fiche);
 }
  }
 
  ]]></php>
  </userobj>
  </sandbox>

Mise à jour le Jeudi, 16 Décembre 2010 12:46