homtata hat geschrieben: ↑Fr 23. Okt 2020, 20:05
...die Hooks übergeben schon immer ein Array an die Callbackfunktion, aber halt nie das gleiche...
Der Aufruf der CEC Hooks übergibt nicht immer eine Liste an die Callback-Funktionen.
Früher gab es in CONTENIDO eine config.chains.php, in der alle vorhandenen Chains registriert und dokumentiert waren, so konnte man an einer Stelle sehen, welche Parameter die Callback-Funktionen bekommen. Irgendwann in CONTENIDO 4.9 ist die Datei config.chains.php als veraltet markiert, es wird nicht mehr verwendet.
Um herauszufinden, welche Parameter an die Callback-Funktionen übergeben werden, sollte man die
Chain Doku-Seite dazu ansehen, sicherheitshalber die Stelle im Sourcecode, in die CEC Hook ausgeführt wird, da die Doku-Seite vielleicht nicht auf dem neuesten Stand ist.
Hier einige Beispiele:
Aufruf von 'Contenido.Frontend.AfterLoadPlugins', übergibt keine Parameter
Code: Alles auswählen
cApiCecHook::execute('Contenido.Frontend.AfterLoadPlugins');
// Callback-Funktion kann so implementiert werden
function myAfterLoadPluginsCallback() {
// ...
}
Aufruf von 'Contenido.Frontend.AllowEdit', übergibt vier Parameter
Code: Alles auswählen
$allow = cApiCecHook::executeWhileBreakCondition('Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid']);
// Callback-Funktion kann so implementiert werden
function myAllowEditCallback($lang, $idcat, $idart, $authUid) {
// ...
}
Aufruf von 'Contenido.Article.ConMakeOnline', übergibt einen Parameter (assoziative Liste)
Code: Alles auswählen
cApiCecHook::execute('Contenido.Article.ConMakeOnline', array(
'idart' => $idart,
'idlang' => $lang,
'state' => $online
));
// Callback-Funktion kann so implementiert werden
function myConMakeOnlineCallback(array $data) {
// ...
}
homtata hat geschrieben: ↑Fr 23. Okt 2020, 20:05
...Der Hook Contenido.Content.AfterStore übergibt sogar unterschiedliche Arrays, je nachdem ob ein Content-Container gespeichert wurde oder ob der Artikel bei "Eigenschaften" gespeichert wurde...
Die Hook für 'Contenido.Content.AfterStore' wird in CONTENIDO an einer einzigen Stele ausgeführt und da sieht der Code so aus:
Code: Alles auswählen
$articleIds = array(
'idclient' => $idclient,
'idlang' => $idlang,
'idcat' => $idcat,
'idcatlang' => $idcatlang,
'idart' => $idart,
'idartlang' => $idartlang
);
// iterate chain Contenido.Content.AfterStore
$iterator = cRegistry::getCecRegistry()->getIterator('Contenido.Content.AfterStore');
while (false !== $chainEntry = $iterator->next()) {
$chainEntry->execute($articleIds);
}
Die Callback-Funktionen bekommen hier also immer eine assoziative Liste, die Werte darin können mit denen im globalen Kontext übereinstimmen, das müssen sie aber nicht.