Toute l'actualité du CMS TYPO3, typoscripts, extensions, liens et téléchargements
Nous sommes le 10/02/2012
Le développement d'extensions sous TYPO3 (suite)
Code PHP
function main($content,$conf) {
$this->conf=$conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
## Debug
//t3lib_div::debug($this->conf['templateFile']);
## Autre debug
//t3lib_div::debug($this->cObj->fileResource($this->conf["templateFile"]));
# Page ID
// $GLOBALS['TSFE']->id
# Get the template code
$this->templateCode = $this->cObj->fileResource($this->conf["templateFile"]);
$template = array();
# Get the total template
$template['total'] = $this->cObj->getSubpart($this->templateCode, '###TEMPLATE###');
# Get a row
$template['item'] = $this->cObj->getSubpart($template['total'], '###ITEM###');
# Construct the DB query
$this->orderby = 'lastname, sorting';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'user_contactlist_members', 'pid IN (' . intval($GLOBALS['TSFE']->id) . ')', '' . $this->orderby . '', '','');
# Loop
$markerArray = array();
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
# Fill the markers in each item
$markerArray['###FIRSTNAME###'] = $row['firstname']; // get first name
$markerArray['###LASTNAME###'] = $row['lastname']; // get last name
$markerArray['###STREET###'] = $row['street']; // get street
$markerArray['###POSTCODE###'] = $row['postcode']; // get postcode
$markerArray['###CITY###'] = $row['city']; // get city
$markerArray['###IMAGE###'] = $row['image']; // get picture
// Fill the temporary item
$contentItem .= $this->cObj->substituteMarkerArrayCached($template['item'],$markerArray);
}
// Fill the content with items in $contentItem
$subpartArray['###CONTENT###'] = $contentItem;
// Fill the TEMPLATE subpart
$content = $this->cObj->substituteMarkerArrayCached($template['total'], array(), $subpartArray);
//return $content;
//$this->pi_getPageLink($GLOBALS['TSFE']->id)
//$this->pi_linkToPage('get to this page again',$GLOBALS['TSFE']->id)
//$content='';
// Return content
return $this->pi_wrapInBaseClass($content);
}
Les fonctionnalités de l'extension sont assez simples il est vrai ! Voici le résultat en frontend :
Pas mal mais le rendu des images n'est pas terrible. Forcément, nous avons simplement récupéré le champ à l'état brut.
III. Compléter le développement
Les extensions envoyées depuis notre backend sont stockées automatiquement dans le répertoire uploads/tx_usercontactlist.
Nous pourrions coder directement la balise image dans le code PHP mais ce n'est pas propre. Nous allons donc utiliser un cObject de type IMAGE. L'intérêt de cette méthode ? Il sera possible de passer des paramètres en Typoscript directement depuis le Setup de notre gabarit pour controler dynamiquement l'affichage des images. Il en serait de même pour d'autres types d'objet bien évidemment.
La fonction getImage sera ajoutée à notre classe user_contactlist_pi1
// Function for FE image rendering
function getImage($imageName) {
// get image configuration in the template Setup field
$confImage = $this->conf['image.'];
// build the image path
$confImage['file'] = "uploads/tx_usercontactlist/" . $imageName;
// return IMAGE content object
return $this->cObj->IMAGE($confImage);
}
Modifions ensuite la méthode main() :
//$markerArray['###IMAGE###'] = $row['image']; // get picture
$markerArray['###IMAGE###'] = $this->getImage($row['image']);
Vous pouvez également modifier le Setup de votre gabarit avec le code suivant :
// Mon extension perso
plugin.user_contactlist_pi1 {
templateFile = EXT:user_contactlist/pi1/user_contactlist_template.html
# cObj IMAGE
image = IMAGE
}
