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
}
Les derniers articles à consulter :
Afficher une page 404
Comment créér une page non trouvée (404) sous TYPO3
TYPO3 et le e-Commerce (1ère partie)
Quelle extension utiliser pour faire du e-Commerce avec TYPO3 ?
Felogin, la newloginbox intégrée (TYPO3 v 4.2)
Felogin remplace l'extension newloginbox et offre la possibilité d'offrir une boite de connexion pour protéger l'accès à certaines pages.
