
Diesen Artikel zum Anlass nehmend

habe ich für die CEC von Contenido mal eine neue Chain gebastelt.
Vorgabe:
Für einen "vielschreibenden" Redakteur soll es die Möglichkeit geben die Erneuerung des Eintrages der Artikel im Cache anzustossen um im Frontend immer die aktuelleste Version anzuzeigen.
Überlegungen:
In benanntem Post wird dazu ein komplettes Leeren der con_code über ein FE-Modul welches einen Button nur im Artikeleditor anzeigt vorgeschlagen. IMO hat dieses Vorgehen gerade bei großen Auftritten oder in Mehrmandantensystemen so seine Nachteile und kann dort recht schnell auch zu einer Performancebremse werden.
Besser wäre es wenn nur die entsprechenden geänderten Artikel für eine Erneuerung der con_cache markiert werden. Da diese Möglichkeit bereits automatisiert in Contenido mit dem Flag 'createcode' in der Tabelle con_cat_art genutzt wird und eine CEC beim Speichern von Content (Contenido.Content.SaveContentEntry) vorhanden ist, bietet sich hier eine Chain für Contenido an.
Lösung:
Die hier vorgestellte Chain ermöglicht es über eine Benutzer-, Mandanten- oder Systemeinstellung das Markieren des gerade bearbeiteten Artikels (beim Speichern von Inhalten) für eine Erneuerung des Caches (con_code). Sobald dann für diese Artikel ein Aufruf im Frontend (oder im BE-Edit) erfolgt, wird der Eintrag in der con_code erneuert.
Für einen "Power-Redakteur" muss man dazu nur folgende Benutzereinstellung hinzufügen, wobei ein Entfernen des Eintrages wenn man die Funktion nicht mehr benötigt sinnvoller ist als ein auf false-Setzen.
save_article | clear_cache | [true|false]
Installation:
Das geht kurz und schmerzlos.

- Erstelle eine Datei mit dem folgenden Code und dem Namen include.chain.content.set_clear_cache.php in contenido/plugins/chains/includes
- Öffne die Datei contenido/plugins/chains/includes/config.plugin.php und ergänze diese mit dem 2. Codeschnipsel
- Fertisch

Freue mich natürlich über Fragen, Anregungen und Verbesserungen. Viel Spaß mit der Chain.
Gruß aus Franken
Ortwin
Datei: include.chain.content.set_clear_cache.php
Code: Alles auswählen
<?php
/**
* Project:
* Contenido Content Management System
*
* Description:
* Enables regeneration of con_cache for specific article when article content changes.
* To enable this chain function you need to set a system-, client- or userproperty
*
* save_article | clear_cache | [true|false]
*
* so you may set it to true for only one power user or something like that.
*
* Requirements:
* @con_php_req 5.0
*
*
* @package Contenido Backend classes
* @subpackage Contenido Chain
* @version 1.0
* @author Ortwin Pinke
* @copyright DCEonline <www.dceonline.de>
* @license http://www.contenido.org/license/LIZENZ.txt
* @link http://www.contenido.org
* @link http://www.ortwinpinke.de
* @link http://forum.contenido.org/viewtopic.php?f=66&t=31432
*
* {@internal
* created 2011-07-14
*
* $Id:$
* }}
*
*/
if(!defined('CON_FRAMEWORK')) {
die('Illegal call');
}
/**
*
* @param int $idartlang
* @param int $type
* @param int $typeid
* @param string $value
* @return bool
*/
function cecContentSetClearCache($idartlang, $type, $typeid, $value) {
$bClearCache = getEffectiveSetting('save_article', 'clear_cache', false);
if($bClearCache) {
cInclude("classes", "contenido/class.articlelanguage.php");
$oArtLang = new cApiArticleLanguage();
if($oArtLang->loadByPrimaryKey($idartlang)) {
cInclude("classes", "contenido/class.categoryarticle.php");
$oArtCat = new cApiCategoryArticle();
if($oArtCat->loadBy('idart', $oArtLang->get('idart'))) {
$bCreateCode = !$oArtCat->get('createcode');
if($bCreateCode) {
$oArtCat->set('createcode', 1);
$oArtCat->store();
}
}
}
}
return $value;
}
?>
Code: Alles auswählen
cInclude("plugins", "chains/includes/include.chain.content.set_clear_cache.php");
$_cecRegistry->addChainFunction("Contenido.Content.SaveContentEntry", "cecContentSetClearCache");