Benutzer: Gast
Eintrag: Extbase 6+: CacheMenuItems erweitern

Extbase 6+: CacheMenuItems erweitern

von: marcel
Kreise: Typo3

Beschreibung

Bei einer Extension, die ich schrieb, wird sozusagen ein eigener Mini-FileCache benutzt, der nicht über das CachingFramework von Typo3 funktioniert. Diese Extension fasst alle im Frontend benutzten CSS- und JS-Dateien zusammen und legt je eine CSS- und JS-Datei in einem Ordner ab, um diese im Frontend zu laden. Beim Zusammenführen der Dateien wird unter Anderem der Code bereinigt, Kommentare entfernt und es sind Ersetzungen möglich.

Nun zurück zum Cache:
Um Änderungen in den CSS- und JS-Dateien im Frontend zu aktualisieren, ist es nötig, die generierten Dateien zu entfernen. Beim nächsten Aufruf des Frontends werden diese Dateien automatisch erneut generiert.

Um das manuelle Leeren des Caches im Backend zu ermöglichen, bietet Typo3 zwei Hooks an:

  1. $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['additionalBackendItems']['cacheActions']
    Hier wird dem Backend-Menu mit den Cache-Optionen ein Item hinzugefügt.
  2. $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearCachePostProc']
    Hier wird nach dem Klick auf ein ClearCache-Item abgefragt, ob der Cache der Extension geleert werden soll und dann auch geleert.

Die Implementierung umfasst nur die Definition der zwei Hooks in ext_localconf.php und die Klasse mit den Hook-Methoden selbst.

lbr_merge/ext_localconf.php

Code: PHP
<?php
if (!defined ('TYPO3_MODE')) {
	die ('Access denied.');
}

/*
 * Plugin registration
 */
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
	'LBR.' . $_EXTKEY,
	'Pi1',
	array('Pi1' => 'merge'),
	array('Pi1' => 'merge')
);


/*
 * add hooks to clear cache
 */
// The Backend-MenuItem in ClearCache-Pulldown
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['additionalBackendItems']['cacheActions'][] = 'EXT:lbr_merge/Classes/ClearCacheHook.php:&LBR\\LbrMerge\\ClearCacheHook';

// The AjaxCall to clear the cache
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearCachePostProc'][] = 'EXT:lbr_merge/Classes/ClearCacheHook.php:&LBR\\LbrMerge\\ClearCacheHook->clear';
?>

lbr_merge/Classes/ClearCacheHook.php

Code: PHP
<?php
namespace LBR\LbrMerge;

/***************************************************************
 *
 *  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!
 ***************************************************************/

/**
 *
 * @version $Id$
 * @copyright Copyright belongs to the respective authors
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
 */

class ClearCacheHook implements \TYPO3\CMS\Backend\Toolbar\ClearCacheActionsHookInterface {

  /**
   * Add an entry to the CacheMenuItems array
   *
   * @param array $cacheActions Array of CacheMenuItems
   * @param array $optionValues Array of AccessConfigurations-identifiers (typically  used by userTS with options.clearCache.identifier)
   * @return
   */
  public function manipulateCacheActions(&$cacheActions, &$optionValues) {
    // Clearing of cache-files in typo3temp/tx_lbrmerge
    if ($GLOBALS['BE_USER']->isAdmin()) {
      $cacheActions[] = array(
        'id'    => 'lbr_merge',
        'title' => "CSS/JS-Cache",
        'href'  => $this->backPath . 'tce_db.php?vC=' . $GLOBALS['BE_USER']->veriCode() . '&cacheCmd=lbr_merge&ajaxCall=1' . \TYPO3\CMS\Backend\Utility\BackendUtility::getUrlToken('tceAction'),
        'icon'  => \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('actions-system-cache-clear-impact-low')
      );
    }
  }
  
  /**
   * This method is called by the CacheMenuItem in the Backend
   * @param \array $_params
   * @param \TYPO3\CMS\Core\DataHandling\DataHandler $dataHandler
   */
  public static function clear($_params, $dataHandler) {
    if (in_array($_params['cacheCmd'], array("all", "lbr_merge"))&&$GLOBALS['BE_USER']->isAdmin()) { // it is our cache, that should be flushed
      // check, if dir exists
      $dir = PATH_site . "typo3temp/tx_lbrmerge/";
      if (is_dir($dir)) {
        // get the files and remove all except . and ..
        if ($handle = opendir($dir)) {
          while (false !== ($filename = readdir($handle))) {
            if ($filename != "." && $filename != "..") {
              @unlink($dir . $filename);
            }
          }
          closedir($handle);
        }
      }
    }
  }

}
?>

Download Extension

Größe: 8061 Bytes
Typ: application/zip
Es gibt noch keine Kommentare.