Intégrateur certifié et Développeur TYPO3

Les autres blogs

Hook lors de la création d'une page avec TYPO3 7.6

Au cours d'un projet, j'ai créé un type de page spécifique "Curriculum Vitae" et j'avais besoin d'utiliser un Backend Layout spécifique uniquement pour ce type de page.

Lors de la création d'une page de type CV, je voulais que le Backend Layout "CV" soit automatiquement associé à ce type de page, pour éviter à mon client d'effectuer cette modification à chaque fois qu'il a besoin de créer une nouvelle page de ce type.

Il est possible, en utilisant du TSConfig, de définir une valeur par défaut dans une table ciblée. Ainsi, ce code fonctionnait parfaitement pour définir un Backend Layout par défaut :

TCAdefaults.pages.backend_layout = belayout_3

Le problème de cette instruction, c'est qu'elle définit le Backend Layout par défaut, mais pour tous les types de page. Après de multiples recherches, il semble impossible de faire une condition sur le doktype dans du TsConfig (à moins que l'un d'entre vous me donne la solution dans les commentaires ?).

Je suis donc passé par un Hook opérant à la création de ma page. J'ai pu alors tester le doktype de ma nouvelle page et lui associer mon BELayout "CV" si ma page est de type "CV".

Déclaration de mon Hook dans le fichier ext_localconf.php :

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:nom_extension/Classes/Utility/Hook/RecordUpdateEvent.php:EXL\NomExtension\Utility\Hook\RecordUpdateEvent';

Création de mon Hook dans Classes/Utility/Hook/RecordUpdateEvent.php :

<?php
namespace EXL\NomExtension\Utility\Hook;

/***************************************************************
 *  Copyright notice
 *	...
 ***************************************************************/


class RecordUpdateEvent {

    /**
     * Initially fill the marker field from title
     *
     * @param string $status mode of change
     * @param string $table the table which gets changed
     * @param string $uid uid of the record
     * @param array $fieldArray the updateArray
     * @return void
     */
    public function processDatamap_postProcessFieldArray($status, $table, $uid, &$fieldArray){

		// 11 = Specific page doktype for Curriculum Vitae
        if ( ($status == 'new') && ($table == 'pages') && ($fieldArray['doktype'] == 11) ){
            $fieldArray['backend_layout'] = 'beLayout__CurriculumVitae';
        }
    }
}

Et voilà, le Backend Layout "CV" est automatiquement associé aux pages "CV" lorsqu'elles sont créées.

Merci à Julian LAYEN pour son aide précieuse sur ce sujet :)

Commentaires

commentaires générés par Disqus