Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 5 Gast/Gäste
ACP > DropDown
#1
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.
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#2
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]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#3
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
Zitieren
#4
@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]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#5
Gerne @ExiTuS

Den Hook gibt es (glaub ich) auch noch nicht all zu lange (relativ gesehen) .... vorher musste man das äußerst kompliziert "einschummeln".
Zitieren
#6
(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.
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#7
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.
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#8
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)';

Zitieren
#9
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.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#10
(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.
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren