MyBB.de Forum
ACP > DropDown - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Entwicklung (https://www.mybb.de/forum/forum-74.html)
+--- Thema: ACP > DropDown (/thread-39032.html)



ACP > DropDown - Gerti - 16.01.2024

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.


RE: ACP > DropDown - [ExiTuS] - 16.01.2024

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]


RE: ACP > DropDown - SvePu - 16.01.2024

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-Switch/blob/main/UPLOAD/inc/plugins/darkmodeswitch.php#L279-L283


RE: ACP > DropDown - [ExiTuS] - 16.01.2024

@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]


RE: ACP > DropDown - SvePu - 16.01.2024

Gerne @ExiTuS

Den Hook gibt es (glaub ich) auch noch nicht all zu lange (relativ gesehen) .... vorher musste man das äußerst kompliziert "einschummeln".


RE: ACP > DropDown - Gerti - 16.01.2024

(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.


RE: ACP > DropDown - Gerti - 18.01.2024

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.


RE: ACP > DropDown - SvePu - 18.01.2024

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)';




RE: ACP > DropDown - StefanT - 18.01.2024

Gerti, ich empfehle dir die peeker.js anzuschauen: https://crossreference.mybb.de/nav.html?admin/jscripts/peeker.js.source.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.


RE: ACP > DropDown - Gerti - 19.01.2024

(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.