Ich habe mir mal vorgenommen, das ganze rauszufinden, wie das geht, und habe bereits ein (halbwegs) akzeptable Lösung gefunden. Ich werde das ganze noch etwas aufpolieren und anschließend inklusive Erklärungen zur Verfügung stellen
(Also im Klartext: Es funktioniert bereits, ist aber bisher ein miserabler Weg xD)
Okay, habe nun eine relativ hübsche Methode gefunden, das ganze umzusetzen. Der beste Weg, es zu zeigen, ist wohl ein Plugin
[
attachment=6648]
(Einfach in den Plugin-Ordner kopieren, aktivieren, und in den Einstellungen gucken und hoffen, dass es bei euch auch funktioniert, wie bei mir xD)
Die Funktionen
settings_test_info(),
settings_test_activate() und
settings_test_deactivate() brauch ich wohl nicht erklären, sind halt wie in jedem Plugin mit eigenen Einstellungen.
Interessanter sind die anderen beiden Funktionen:
test_settings_change():
Diese Funktion klinkt sich bei den Einstellungen ein (Hook:
admin_config_settings_change), definiert vorerst aber nur eine Variable, die uns sagt, dass wir noch unseren Peeker (= Der Mechanismus, dass Einstellungen "verschwinden") hinzufügen müssen.
PHP-Code:
$test_settings_peeker = ($mybb->input['gid'] == $gid) && ($mybb->request_method != "post");
Nur wenn die erhaltene GID unserer SettingsGroup entspricht (die vorher aus der DB geholt wird), und nur wenn wir die Einstellungen nicht gerade speichern, setzen wir die Variable auf true und merken uns so, dass wir den Peeker noch einzufügen haben.
Warum wird der Peeker nicht direkt ausgegeben?
Zu dem Zeitpunkt, wenn unsere Funktion aufgerufen wird, wurde noch nichtmal der HTML-Header ausgegeben, sodass unsere Ausgabe vor allem stehen würde, was ziemlich schlechter Stil wäre. Deshalb müssen wir die Ausgabe noch etwas "verzögern".
test_settings_footer()
Diese Funktion kümmert sich nun um die Ausgabe des zusätzlichen Javascripts, der für das "Verschwinden" der Einstellungen sorgt. Sie klinkt sich dabei im Footer ein (Hook:
admin_page_output_footer), da dort eben ein großteil der Seite bereits steht (inklusive unserer Einstellungen), und das der passendste Platz für unser kleines Script ist.
Es sollte klar sein, dass die IF-Abfrage nur erfolgreich ist, wenn vorher (in der
test_settings_change()) die abgefragte Variable auf true gesetzt wurde
Den in der Ausgabe stehenden Javascript-Code habe ich größtenteils aus der /admin/modules/config/settings.php übernommen. Die wichtigste Zeile dabei ist:
PHP-Code:
new Peeker($$(".setting_ts_independend"), $("row_setting_ts_dependend"), /1/, true);
Der erste Parameter für Peeker() ist unsere unabhängige Einstellung (
ts_independend), die festlegt, ob die andere Einstellung ein oder ausgeblendet sein soll. Der zweite Parameter ist die abhängige Einstellung (
ts_dependend), die letzten beiden Parameter müssen nicht verändert werden.
Diese Zeile funktioniert nur, wenn die unabhöngige (bestimmende) Einstellung entweder On/Off oder Yes/No ist, sonst nicht!
(Bei anderen bestimmenden Einstellungen müssen die letzten beiden Werte angepasst werden, aber das hab ich jetzt nicht weiter untersucht. Ein Blick in die /admin/.../settings.php ganz unten könnte da event. hilfreich sein.)
So, ich hoffe, die Erklärungen waren hilfreich, sodass ihr nun die gewünschten Einstellungen verstecken könnt. Falls nicht, einfach fragen, wo es hakt ^^
MfG Zwoetzen