Hallo!
Kennt jemand einen Hook, der genau da eingreift, wo im Frontend entschieden wird ob eine Seite sichtbar ist oder nicht? Also ob z.B. "Seite deaktivieren" (Hidden) gesetzt ist. Oder ob eine Seite aufgrund von fehlenden FE-User-Rechten nicht angezeigt werden darf. Oder weil das heutige Datum vor dem gesetzten Veröffentlichungsdatum oder nach dem gesetzten Ablaufdatum liegt. Ich glaube es dürfte klar sein was ich meine.
Mein Ziel: Ich muss in einer Extension weitere Bedingungen einführen die darüber entscheiden, ob eine Seite ein- oder ausgeblendet wird. Ein Entscheidungskriterium ist z.B. die Domain.
Vielleicht noch ein bisschen konkreter. In meiner Vorstellung läuft das in etwa so:
Die Website ist unter 2 Domains erreichbar, sagen wir www.domain-A.de und www.domain-B.de (bitte jetzt nicht über Duplicate Content diskutieren).
Die Extension baut im BE zwei neue Checkboxen in die Seiteneigenschaften ein:
- Diese Seite NUR bei domain-B anzeigen
- Diese Seite NICHT bei domain-B anzeigen
Beim FE-Rendering wird dann die aktuelle Domain geprüft. Ist die Domain www.domain-B.de, dann werden alle Seiten mit dem Kenner "NICHT bei domain-B" so behandelt als wären sie deaktiviert (in keinem Menü, in keiner Sitemap, wenn man sie oder eine ihrer Unterseiten direkt über ID anspringt kommt ein Fehler, all das). Ist die Domain www.domain-A.de, dann werden alle Seiten mit "NUR bei domain-B" wie deaktiviert behandelt.
Alles googeln und Forensuchen hat bisher nichts gebracht.
Deshalb die Frage an die Experten: Jemand ne Idee?
Ja, das ist schon ziemlich nahe dran.
Allerdings kann man damit offensichtlich nur Contents Domain-abhängig ein-/ausblenden, ich brauche das aber für Seiten bzw. ganze Teile des Seitenbaums. Und die Domain ist bei mir leider auch nicht das einzige Kriterium.
Aber das ist ein guter Ansatz, das schaue ich mir auf jeden Fall genauer an. Vielleicht kann ich diese Ext. ja aufbohren - oder zumindest abgucken, welchen Hook sie für Contents verwendet - denn das wäre für meinen Fall natürlich eine luxuriöse Erweiterung.
Meine Frage nach dem Seite-anzeigen-oder-nicht-Hook bleibt allerdings erst mal offen.
Weil es von euch keiner wusste musste ich es eben selber finden 😉.
Hier meine Lösung:
Der gesuchte Hook heißt getPage_preProcess und steckt in class.t3lib_page.php in der Methode getPage. Den kann man abgreifen und der Eigenschaft where_hid_del des parentObjects nach Belieben ein paar WHERE-Klauseln anhängen.
Cache-Problematik löst sich damit auch wie von selbst, da where_hid_del Teil des Cache-Schlüssels ist.
In der selben Datei steckt auch der Hook, um das Gleiche für Contents zu veranstalten: In der Methode enableFields. Das ist ein Hook "vom alten Schlag", der über callUserFunction funktioniert. Was die UserFunction zurückliefert wird der WHERE-Klausel angehängt.
Funktioniert für mich einwandfrei.
Hier zur Erbauung noch mein Beispielcode:
In der ext_localconf.php:
if (TYPO3_MODE == 'FE') {
// Hook-Script einbinden:
require_once(t3lib_extMgm::extPath($_EXTKEY).'class.tx_myextension_hooks.php');
// Hooks abgreifen:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_page.php']['getPage'][] = 'tx_myextension_pagehook';
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_page.php']['addEnableColumns'][] = 'tx_myextension_contenthook';
}
In der class.tx_myextension_hooks.php:
// Klasse für Page-Hook
class tx_myextension_pagehook implements t3lib_pageSelect_getPageHook {
public function getPage_preProcess(&$uid, &$disableGroupAccessCheck, t3lib_pageSelect $parentObject) {
// Hier ein bisschen Code ...
$parentObject->where_hid_del .= " AND irgendein_pages_feld='irgendwas'";
}
}
// User-Function für Content-Hook:
function tx_myextension_contenthook($params, $parentObject) {
$myWhere = '';
// Nur für Content!
if ($params['table'] == 'tt_content') {
// Hier ein bisschen Code ...
$myWhere = " AND irgendein_tt_content_feld='irgendwas'";
}
return $myWhere;
}