2016-12-28 5 views
1

ごとに複数のタグ私はケースを次ていますTYPO3 - キャッシュのタグ付けと紅潮 - 要求

  1. レコードは、単一の(showAction)で、リストビューページネーション(listAction)とし、また、いくつかの他のアクションの両方に表示されます。
  2. 私は、単一のビューとリストビューの両方で、特定の単一レコードのスケジューラ内からキャッシュをフラッシュしたいと思います。

のでshowActionにあります:

public function showAction(...) { 
    ... 
     $this->addCacheTags('RecordName_' . $item->getUid()); 
    ... 

は、スケジューラに私はキャッシュを削除するにはそのような何かを使用することができます。

$this->cacheManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Cache\\CacheManager'); 
$this->cacheManager->getCache('cache_pages')->flushByTag('RecordName_' . $item->getUid()); 
$this->cacheManager->getCache('cache_pagesection')->flushByTag('RecordName_' . $item->getUid()); 

これは、アクションの場所のためsingleViewのために正常に動作しなくなります私の場合、listActionでの追随はうまくいきません(要求ごとに1つのタグしか追加できません):

foreach($products as $product){ 
      $this->addCacheTags('RecordName_' . $product->getUid()); 
     } 

TYPO3コアキャッシュ機能を使用して誰でも解決する方法はありますか?

答えて

0

私は、リストビューで呼び出されなViewHelperを使用してタグを作成します

+0

うーん、私はあなたのポイントを得ることはありません - とどのようにあなたは、この項目は(単一、リストなど)が表示されているすべてのビューのためのキャッシュを削除している間表示用タグを1つだけ追加できますか? –

2

あなたは本当に(私は以下を参照してください、示唆していない)ので、多くのタグを使用してリストビューをタグ付けしたい場合は、あなたをTYPO3でリクエストごとに複数のタグを追加することができます。

$GLOBALS['TSFE']->addCacheTags(['RecordName_1', 'RecordName_2', 'RecordName_3']); 

レコードのuidのとリストビューをタグ付けの欠点は、あなたはまだ(などの別のキャッシュタグ適切にキャッシュをクリアするために、新しいレコードのリストビューを必要とするだろうということであり、新しいuidのタグはまだキャッシュタグに追加されていません)。 は、したがって、それは(もあなたの「1つのタグだけ要求ごと」の要件に合わせwhich'd)現在の検索クエリを記述するタグを追加すると良いでしょう:

// list view for records stored in pid 10 
$GLOBALS['TSFE']->addCacheTags(['RecordName_pid_10']); 

// list view by category with uid 30 
$GLOBALS['TSFE']->addCacheTags(['RecordName_category_30']); 

// single view for uid 1 
$GLOBALS['TSFE']->addCacheTags(['RecordName_1']); 

は、今すぐあなたのスケジューラコマンドには、いくつかのより多くのキャッシュ・タグをクリアする必要があります。 EXT:nc_staticfilecacheまたはEXT:nginx_cacheのようなカスタムページキャッシュを追加する拡張機能をサポートするには、flushCachesInGroupByTagを使用してcache_pagesおよびcache_pagesectionを暗黙的に呼び出すことはできません。

$this->cacheManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Cache\\CacheManager'); 
$this->cacheManager->flushCachesInGroupByTag('pages', 'RecordName_' . $item->getUid()); 
$this->cacheManager->flushCachesInGroupByTag('pages', 'RecordName_pid_' . $item->getPid()); 

注:TYPO3 8.5を開いている場合は、一度にキャッシュごとに複数のタグをフラッシュするflushByTags(array)/flushCachesInGroupByTag(array)を使用することができます。 [1]

$this->cacheManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Cache\\CacheManager'); 
$this->cacheManager->flushCachesInGroupByTags('pages', ['RecordName_' . $item->getUid(), 'RecordName_pid_' . $item->getPid()]); 

を[1] https://git.typo3.org/Packages/TYPO3.CMS.git/commitdiff/b8621ebfe2b65826d25e80519209e5420df436a8?hp=e664996d6eb096555496774658093bf220566933