MyBB.de Forum

Normale Version: ACP > DropDown
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Gegeben ist in nachstehender Auszug aus der function pluginname_install()
PHP-Code:
$settings = array(
    array(
        
'name'            => 'Funktion 1',
        
"title"            => $db->escape_string($lang->setting_button),
        
"description"    => $db->escape_string($lang->setting_button_desc),
        
'optionscode'    => 'yesno',
        
'value'            => '1',
        
'disporder'        => '13',
        
'gid'            => intval($gid),
    ),

    array(
        
'name'            => 'Funktion A',
        
'title'            => 'Funktion A',
        
'description'    => 'Wird nur angezeigt wenn Funktion 1 = ON',
        
'optionscode'    => 'text',
        
'value'            => '<div align="right">Mustertext grün</div>',
        
'disporder'        => '14',
        
'gid'            => intval($gid)
    ),

    array(
        
'name'            => 'Funktion B',
        
'title'            => 'Funktion B',
        
'description'    => 'Wird nur angezeigt wenn Funktion 1 = ON',
        
'optionscode'    => 'text',
        
'value'            => '<div align="right">Mustertext rot</div>',
        
'disporder'        => '15',
        
'gid'            => intval($gid)
    ),
    );
    foreach (
$settings as $settingData) {
        $db->insert_query('settings'$settingData); 
Welche "hooks" und "functions" muss ich wie definieren damit im ACP "Funktion A" und "Funktion B" nur angezeigt wird, wenn "Funktion 1 == JA"

Hätte mir jemand freundlicherweise eine Anleitung oder einen Link wo man die Umsetzung hierzu erlernen kann?

Danke vorab für jegliche Tipps und Hinweise.
Dies läuft über JavaScript (peeker.js) und ist fest definiert für bestimmte Optionspunkte. Siehe Quelltext ./admin/index.php

Als kleinen Hack kann man eigene Punkte selbst ins eigene PHP hinen-tüddeln.
Aber für eigene und PlugIn-Optionen ist das schlicht nicht gedacht.

Einzige Möglichkeit wäre, den entsprechenden HTML-Code (JS und eigene Peeker-Variablen) in $settings['title'] oder ['description'] zu schmuggeln.
Das Einschmuggeln funktioniert prinzipiell, weil HTML an dieser Stelle tatsächlich geparst wird.

[ETS]
Sowas könnte man über "admin_settings_print_peekers" realisieren.

Sowas habe ich u.a. im Plugin "MyBB-Darkmode-Switch" mal eingebaut:
=> https://github.com/SvePu/MyBB-Darkmode-S...#L279-L283
@Sven, danke - das kannte ich noch nicht.

Diese Möglichkeit mittels Hook ist die Lösung und macht genau das, was ich oben für manuell beschrieben habe.

[ETS]
Gerne @ExiTuS

Den Hook gibt es (glaub ich) auch noch nicht all zu lange (relativ gesehen) .... vorher musste man das äußerst kompliziert "einschummeln".
(16.01.2024, 15:39)SvePu schrieb: [ -> ]Sowas könnte man über "admin_settings_print_peekers" realisieren.
Besten Dank für den Tipp und den Link. Es funktioniert damit perfekt = so wie es gewünscht war.
Es funktioniert:

PHP-Code:
$plugins->add_hook('admin_settings_print_peekers''pluginname_settings_peekers');
function 
pluginname_settings_peekers(&$peekers)
{
$peekers[] .= 'new Peeker($(".setting_group"), $("#row_setting_group_service, /1/, true)';


Mit vorstehendem Code kann ich durch das Array mit: 'name' => 'group', => und 'optionscode' => 'yesno', das Array 'name' => 'group_service' bei JA einblenden und bei Nein ausgeblenden.



Wie aber bringe ich nachstehende Ein-/Ausblendfunktion zustande?

Array-3 mit:  'name' => 'group_theme', => und 'optionscode' => 'select\n0=Blau\n1=Rot\2=Grün\n3=Lila\n4=Schwarz',
soll das Array-4 mit 'name' => 'group_zensus',
  • nur angezeigt wird wenn im Array-3 Schwarz (=n4) ausgewählt wurde,
  • nicht angezeigt wird, weil im Array-3 Schwarz (=n4) nicht ausgewählt wurde,

Mit meinem Versuch:
PHP-Code:
function pluginname_settings_peekers(&$peekers)
{
    $peekers[] .= '
        var groupPageSelect = $("#setting_ [color=#00369b]group_theme[/color] ");
        new Peeker( groupPageSelect, $("#row_setting_ [color=#00369b]group_zensus[/color] "), function() {
            return groupPageSelect.val() == "4";
        }, true);
    '
;

habe ich keinen Erfolg:

Hat mir hier jemand einen umsetzbaren Tipp zu meinem Anliegen bzw. mir mitteilen wo mein Fehler ist?

Danke vorab.
Probiere mal bitte:
PHP-Code:
$plugins->add_hook('admin_settings_print_peekers''pluginname_settings_peekers');
function 
pluginname_settings_peekers(&$peekers)
{
    
$peekers[] .= 'new Peeker($(".setting_group_theme"), $("#row_setting_group_zensus"), /(4)/, true)';


oder

PHP-Code:
$plugins->add_hook('admin_settings_print_peekers''pluginname_settings_peekers');
function 
pluginname_settings_peekers(&$peekers)
{
    
$peekers[] .= 'new Peeker($(".setting_group_theme"), $("#row_setting_group_zensus"), /(0|1|2|3)/, false)';

Gerti, ich empfehle dir die peeker.js anzuschauen: https://crossreference.mybb.de/nav.html?...ource.html

Code:
/**
* Peeker controls the visibility of an element based on the value of an input
*
* Examples:
* new Peeker($('#myController'), $('#myDomain'), 1, false);
* new Peeker($('.myControllerNode'), $('#myDomain, #myDomain2'), 1, true);
* new Peeker($('#myController'), $('#nestedPeeker'), /works/, false);
* new Peeker($('#nestedPeeker'), $('#nestedPeekerChild'), /\d+/, false);
*/
Code:
    /**
     * 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
     */
Für eine Auswahlliste muss der 4. Parameter also false sein. Und eine function ist kein RegExp und kann nicht funktionieren.
(18.01.2024, 17:13)SvePu schrieb: [ -> ]Probiere mal bitte:
PHP-Code:
$peekers[] .= 'new Peeker($(".setting_group_theme"), $("#row_setting_group_zensus"), /(4)/, true)'
Danke Dir, die vorstehende Lösung von Dir funktioniert wie gewünscht.