Neu Plugin Customlink-Tabs mit der Plugin-URL#plugin-tab-nnn, woher nnn nehmen?

fibergirl

Sehr aktives Mitglied
14. April 2016
832
263
Hallo,

mein neues Plugin wird Customlink-Tabs haben, die in info.xml definiert sind.
Dort gibt es jeweils ein Fomular, das beim Abschicken wieder auf derselben Seite (in demselben Tab) landen soll.

Äußerlich unterscheiden sich die Custom-Links auf das Plugin durch einen angehängten Hash "#plugin-tab-(irgendeine Zahl)".
Zum Beispiel https://meine.domain.tld/admin/plugin.php?kPlugin=138#plugin-tab-135

Meine Frage ist: woher kommt diese Zahl 135?

kPlugin steht in $plugin->getID().
Aber wo finde ich die Zahl im Hash #plugin-tab-? Gibt es da eine auch Variable oder Funktion?

Den erzeugten Quelltext untersuchen und abschreiben ist doch vermutlich eine ganz schlechte Idee...

Dank & Gruß,
fibergirl
 

fibergirl

Sehr aktives Mitglied
14. April 2016
832
263
Hallo @NETZdinge.de ,
vielen Dank!

Ich hatte diese Version schon hier im Forum gesehen, aber gleich verworfen und noch nicht mal ausprobiert, war ja uralt und für den Shop 3.
Aber es funktioniert tatsächlich!

Mittlerweile habe ich aber auch eine alternative Implementation mit einer eigenen Funktion, die tatsächlich die Plugin-Tab Nummer herausfindet.
Aber so ist es viel besser und einfacher.

Dank&Gruß,
fibergirl
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
347
Halle (Saale)
Noch einfacher geht das, wenn du in deiner Boostrap.php die Methode renderAdminMenuTab() implementierst, siehe dazu auch https://gitlab.com/jtl-software/jtl-shop/plugins/jtl_test/-/blob/master/Bootstrap.php#L192

Wenn du im Template dieses Tabs auch noch ein hidden-Input mit name="kPluginAdminMenu" anlegst, bleibt der Tab dann auch nach Absenden eines Formulars aktiv.

Also z.B. in so:

Code:
public function renderAdminMenuTab(string $tabName, int $menuID, JTLSmarty $smarty): string
{
    $smarty->assign('menuID', $menuID);
    return $smarty->fetch($this->getPlugin()->getPaths()->getAdminPath() . '/templates/meineTemplateDatei.tpl');
}

Und in meineTemplateDatei.tpl:
Code:
<form method="post">
    {$jtl_token}
    <input type="hidden" name="kPluginAdminMenu" value="{$menuID}">
    <input type="text" name="foo_tab3" class="form-control">
    <button class="btn btn-default" type="submit">Absenden</button>
</form>
 

SportNet

Sehr aktives Mitglied
16. Oktober 2014
249
56
Hallo @NETZdinge.de ,


Mittlerweile habe ich aber auch eine alternative Implementation mit einer eigenen Funktion, die tatsächlich die Plugin-Tab Nummer herausfindet.
Aber so ist es viel besser und einfacher.
Kannst du uns daran teilhaben lassen? Die Methode von Felix funktioniert für uns leider nicht wie gewünscht, da bei Definition von <Filename>script.php</Filename> in der info.xml scheinbar die renderAdminMenuTab Funktion nicht aufgerufen wird.

bzw. @FMoche wie können wir aus unserem Script oder der zugehörigen Templatedatei auf menuID zugreifen, wenn die bootstrap.php nicht genutzt wird?

Die Variante von @NETZdinge.de "?kPlugin=" . $plugin->getID() . "&cPluginTab='NameDesTabs'" geht in 5.2 zwar auch noch, aber wir hätte es gern variabler.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.290
2.486
Berlin
Firma
css-umsetzung
Ich Regel das bei mir per JS, so lande ich immer wieder in dem Tab den ich im Plugin zuletzt offen hatte, ohne das ich hier Parameter übergeben muss
Das nutze ich seit dem 4er Shop in allen Plugins, du musst also nichts weiter tun als dieses JS im Backend einzubinden.

Code:
var cssHashCode  = function() {
    var hash = 5381, i = this.length
    while(i)
        hash = (hash * 33) ^ this.charCodeAt(--i)
    return hash >>> 0;
};

jQuery(document).ready(function() {
    cssHashCode(document.location.href);
    $('.tabs-nav a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        var target = $(e.target).attr("href"); // activated tab
        $.cookie('target', target, {expires: 7});
    });

    if ($.cookie('target') != 'undefined') {
        $(".tabs-nav li.nav-item a[href='" + $.cookie('target') + "']").tab('show');
    }
});
 

Ähnliche Themen