Romain CANON
Développeur Web passionné, spécialisé dans TYPO3. Joueur de StarCraft II et DotA 2. Fan de Led Zepp'.



Rajouter l'icône d'un plugin dans la création d'un contenu


Lorsque vous créez un plugin pour TYPO3, vous voudrez sans aucun doute rajouter son icône ainsi qu'une brève description dans l'onglet « Plugins » de la création d'un contenu sur une page, comme ci-dessous.

Il n'existe pas de solution vraiment propre pour gérer ça, mais je vous propose de partager un bout de code que vous pourrez copier/coller dans vos extensions à l'avenir. Ce script s'occupera de tout pour vous, et vous n'aurez qu'un appel de fonction à effectuer.


Tout d'abord, créez un nouveau fichier PHP au chemin suivant :

my_extension/Classes/Backend/WizardIconProvider.php

Insérez-y le code ci-dessous.

Attention : n'oubliez pas de modifier le namespace de la classe en fonction du nom de votre extension.

<?php
namespace MyVendor\MyExtension\Backend;

/***************************************************************
 *
 *  Copyright notice
 *
 *  (c) 2014 Romain CANON <romain.canon@exl-group.com>, EXL Group
 *
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
 *  free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  The GNU General Public License can be found at
 *  http://www.gnu.org/copyleft/gpl.html.
 *
 *  This script is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/

use \TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use \TYPO3\CMS\Core\Utility\GeneralUtility;

/**
 * This class allows you to manage the plugins list showed in the "Plugins" tab
 * in the creation of a new content on a page. Use the addWizardIconForPlugin
 * function to add a new entry for your plugin.
 */
class WizardIconProvider {
	// Used not to declare the "xMOD_db_new_content_el" hook twice.
	private static $instanced = false;

	// Stores the current extension key.
	private static $extKey = null;

	// Plugins list.
	private static $plugins = array();

	/**
	 * Adds a plugin entry. See class documentation for more information.
	 *
	 * @param string	$pluginName		The name of the plugin.
	 * @param string	$icon			Relative path in the extension to the icon file.
	 * @param string	$title			Title of the plugin.
	 * @param string	$description	Description of the plugin.
	 * @param string	$params			Additional params to add in the URL of the link.
	 */
	public static function addWizardIconForPlugin($pluginName, $icon, $title, $description, $params = '') {
		if (!self::$instanced) {
			global $TBE_MODULES_EXT, $_EXTKEY;
			self::$instanced = true;
			self::$extKey = $_EXTKEY;

			// Adding hook.
			$TBE_MODULES_EXT['xMOD_db_new_content_el']['addElClasses'][__CLASS__] = __FILE__;
		}

		self::$plugins[$pluginName] = array(
			'icon' 			=> $icon,
			'title' 		=> $title,
			'description'	=> $description,
			'params'		=> $params
		);
	}

	/**
	 * Adds the plugins to the content element wizard.
	 *
	 * @param	array	$wizardItems	The wizard items
	 * @return	array 	Array with wizard.
	 */
	public function proc($wizardItems) {
		if (!self::$extKey) return $wizardItems;

		$cleanedExtKey = GeneralUtility::strtolower(GeneralUtility::underscoredToLowerCamelCase(self::$extKey));

		foreach(self::$plugins as $pluginName => $params) {
			$cleanedPluginName = strtolower($pluginName);

			$wizardItemName = 'plugins_tx_' . $cleanedExtKey . '_' . $cleanedPluginName;

			// Creating final URL.
			$urlParams = '&defVals[tt_content][CType]=list&defVals[tt_content][list_type]=' . $cleanedExtKey . '_' . $cleanedPluginName . $params['params'];

			$wizardItems[$wizardItemName] = array(
				'icon'			=> ExtensionManagementUtility::extRelPath(self::$extKey) . $params['icon'],
				'title'			=> $params['title'],
				'description'	=> $params['description'],
				'params'		=> $urlParams
			);
		}

		return $wizardItems;
	}

}

Rendez-vous ensuite dans le ext_tables.php de votre extension, et insérez le code suivant – en adaptant bien entendu à vos besoins.

\MyVendor\MyExtension\Backend\WizardIconProvider::addWizardIconForPlugin(
	'MyPlugin',
	'ext_icon.png',
	'LLL:EXT:my_extension/Resources/Private/Language/locallang.xlf:my_plugin_title',
	'LLL:EXT:my_extension/Resources/Private/Language/locallang.xlf:my_plugin_description'
);

Videz les caches, et observez votre plugin s'ajouter à la liste.


N'hésitez pas à me donner vos impressions dans les commentaires. ;-)