MyBB.de Forum
Menüpunkte bei Einstellungen aus- und einblenden lassen? - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Diskussionen (https://www.mybb.de/forum/forum-38.html)
+--- Thema: Menüpunkte bei Einstellungen aus- und einblenden lassen? (/thread-21020.html)



Menüpunkte bei Einstellungen aus- und einblenden lassen? - querschlaeger - 07.12.2008

Hallo,

beim Entwickeln von Plugin haben manche von ihnen auch Einstellungen. Das ganze funktioniert sehr gut. Nur eine Frage habe ich:

Wie kann man bestimmte Einstellungen abhängig von einer anderen Einstellung ein- bzw. ausblenden lassen?

Wer genau wissen möchte, was ich meine:

Unter Konfiguration > Einstellungen > Beitragserstellung lautet eine Einstellung "Zeit zwischen Beiträgen". Abhängig von der Wahl erscheint eine weitere Einstellung darunter.

Wie kann ich sowas in eigenen Plugins realisieren?

gruß querschlaeger


RE: Menüpunkte bei Einstellungen aus- und einblenden lassen? - StefanT - 07.12.2008

Ich habe mich damit noch nicht beschäftigt, bin aber sehr skeptisch. Ich glaube nicht, dass man das mit einer Einstellung bewirken kann.


RE: Menüpunkte bei Einstellungen aus- und einblenden lassen? - kastun - 07.12.2008

Aber ich hab mich damit mal beschäftigt Wink
Eins vorweg, das in ein Plugin zu kriegen ist mir bisher nicht gelungen Sad

Dazu musst du in admin/modules/config/settings.php einen neuen Peeker anlegen, und zwar in der Funktion loadPeekers() ganz am Ende.

PHP-Code:
new Peeker($$(".setting_[setting_name_1]"), $("row_setting_[setting_name_2]"), /1/, true);

/**
 * Constructor
 * @param string ID of the controlling select menu
 * @param string ID of the thing to show/hide
 * @param regexp If this regexp matches value of the select menu, then the 'thing' will be shown
 * @param boolean Should be set to true for radio/checkboxes
 */ 

setting_name_1: Name der Einstellung, von deren Einstellung die Anzeige der anderen Einstellungen abhängen soll.
setting_name_2: Abhängige Einstellungsnamen
Der folgende Parameter enthält den Wert, bei dem [setting_name_2] angezeigt wird.
Damit kann man nicht nur auf true/false reagieren, sondern z.B. auch auf Radio Buttons (da dann einfach den Schlüssel eintragen).

Da ich es noch nicht in Plugins zum Laufen gekriegt habe, hab ich mich auch nicht näher damit beschäftigt, ist also vll. nicht alles wichtige dazu gesagt.

EDIT: Hab die "Beschreibung" dazu gefunden, vll hilft die noch Wink


RE: Menüpunkte bei Einstellungen aus- und einblenden lassen? - Zwoetzen - 08.12.2008

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 Wink

(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 Big Grin

.php   test_settings.php (Größe: 3 KB / Downloads: 6)
(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 Wink

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


RE: Menüpunkte bei Einstellungen aus- und einblenden lassen? - querschlaeger - 16.12.2008

DANKE DANKE DANKE!!! Smile

Ihr seit echt super!

@Zwoeten: Ich habe dein Plugin als Vorlage verwendet und gleich eines meiner Plugins damit ausgestattet: Individueller Profilhintergrund

Ich musste war etwas frickeln, um herauszufinden, wie die Ein- bzw. Ausblendung im true/false-Fall funktioniert, aber ich habe das Prinzip verstanden und werde in Zukunft bei Plugin-Updates und Neuerscheinungen immer mal wieder dieses Feature nutzen!

Nochmals DANKE Smile

gruß querschlaeger