Afficher la valeur d'un champ d'une autre table en backend, mode liste
Vous avez créé une extension maison qui répond à vos besoin ? Vous insérez des enregistrements dans un dossier système mais l'affichage en backend pose un petit problème. En effet, vous souhaiteriez que le champ label prenne la valeur d'un champ d'une autre table de la base de données de TYPO3, plutôt que d'un uid ou d'un champ de la même table. Rappelons à ce titre que la valeur est définie dans le fichier ext_tables.php d'une extension, section 'label' ou 'label_alt'.
TYPO3 a introduit un nouveau champ label dans sa version 4.1. Il s'agit de label_userFunc. Ce champ devrait nous permettre d'effectuer une pseudo requête vers une autre table lorsque les données s'affichent dans le backend.
Un exemple avec label_userFunc
Pour ce faire, ouvrez le fichier ext_tables.php. Nous allons inclure une classe qui sera chargée d'effectuer les opérations en base de données. Renseignez la ligne suivante au début du fichier ext_tables.php :
//Custom Labels
require_once(t3lib_extMgm::extPath($_EXTKEY).'class.userLabelClass.php');
Indiquez la ligne suivante après la déclaration de la table.
// enable label_userFunc only for TYPO3 v 4.1 and higher
if (t3lib_div::int_from_ver(TYPO3_version) >= 4001000) {
$TCA['tx_monextension_table1']['ctrl']['label_userFunc'] = "user_LabelClass->getUserLabel";
}
Nous faisons un test de compatibilité sur la version de TYPO3. Nous allons étendre la table tx_monextension_table1 avec le champ label_userFunc. user_LabelClass->getUserLabel signifie que nous allons executer la fonction getUserLabel de la classe user_LabelClass.
Appel à une classe externe
Vous allez créer dans le même répertoire que le fichier ext_tables, un fichier class.userLabelClass.php. Voici le contenu de ce fichier :
<?
// Appel aux fonctions du BE
require_once(PATH_t3lib.'class.t3lib_befunc.php');
class user_LabelClass {
function getUserLabel(&$params, &$pObj) {
$id = $params['row']['fieldUid']; // uid en cours
if ($id) { // si id est défini...
$item = t3lib_BEfunc::getRecord('tx_autreextension_table', $id, '*'); //uid de la table
}
$params['title'] = $item['name'];
}
}
?>
$id est une variable qui récupère l'id de la table en cours dont nous avons besoin et qui nous permettra d'accéder à un enregistrement d'une autre table pour récupérer le champ souhaité. Dans notre exemple, nous prenons la valeur du champ fieldUid de la table tx_monextension_table1.
Nous utilisons ensuite la fonction t3lib_BEfunc::getRecord pour récupérer l'enregistrement de la table tx_autreextension_table. Cette dernière comporte par conséquent le champ que nous souhaitons récupérer, ainsi que sa valeur qui est retournée dans le tableau $item.
$params['title'] reçoit la valeur $item['name'] où 'name' est le nom du champ souhaité dans la table tx_autreextension_table.
Et voilà, ce n'est pas plus compliqué. Retenez bien que cette méthode ne fonctionne pour un TYPO3 égale ou supérieur à la version 4.1 !
Ressources :
Source : http://blog.beimax.de
Documentation sur label_userFunc
Les derniers articles à consulter :
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.
Créer un Google sitemap (plan du site XML)
Comment créer un plan du site XML ou plus communément un Google sitemap pour améliorer l'indexation de son site par Google.