Neu Anpassung vom navitemdropdown erweitern um Abfrage?

felix.bauerschaefer

Sehr aktives Mitglied
15. November 2019
228
33
Nienburg/Weser
Hi,

ich bin etwas verwirrt. Ich würde gerne dem navitemdropdown für den Account, eine Smarty-Abfrage ergänzen.
Dafür schreibe ich diese im Child in die header- shop-nav-account.tpl

Doch, diese wird nicht interpretiert. Obwohl die Abfrage an sich, vorher in Shop4 valide war. Edit: Hatte ich zu dem damaligen Zeitpunkt auch aus dem Forum. Möchte folgendes tun, sobald sich ein Kunde anmeldet/registriert ist, soll entsprechend oben im Header für den Account - Dropdown stehen Hallo Herr/Frau Mustermann.

Dies war früher einfach so möglich da noch keine eigene Sprachvariable für {navitemdropdown] in Shop 4 vorhanden war. Hier nur der Link als HTML-Element gesetzt war.

Frühere Version die funktioniert, geschrieben in der header_category_nav.tpl für Evo
Code:
<a href="#" class="dropdown-toggle" aria-label="Benutzer" data-toggle="dropdown">
    <span class="fa fa-user"></span>
    <span class="hidden-xs hidden-sm hidden-md"> {lang key="hello" section="global"} {if $smarty.session.Kunde->cAnrede === 'w'}{$Anrede_w}{elseif $smarty.session.Kunde->cAnrede === 'm'}{$Anrede_m}{/if} {$smarty.session.Kunde->cNachname}</span>
    <span class="caret"></span>
</a>

Habe diese jetzt etwas umgeschrieben für Nova-Template, auch probiert unten statt text= als Eigenschaft, HTML, Smarty zu setzen. Leider setzt er das ganze als Text und interpretiert es mit Smarty nicht.:
Code:
{extends file="{$parent_template_path}/layout/header_shop_nav_account.tpl"}
{block name='layout-header-shop-nav-account'}
    {navitemdropdown tag="li"
        aria=['expanded' => 'false']
        router-aria=['label' => {lang key='myAccount'}]
        no-caret=true
        right=true
        text='<span class="fas fa-user"></span>{if $Kunde->nRegistriert="1"}<span class="hidden-xs hidden-sm hidden-md"> {lang key="hello" section="global"} {if $Kunde->cAnrede}{$Anrede_m}{elseif}{$Anrede_w}{/if} {$Kunde->cNachname}</span>{/if}<span class="fas fa-caret-down"></span>'
        class="account-icon-dropdown"}

Hoffe es ist verständlich was ich umsetzen möchte. Man kann mich vielleicht auf meinen Denkfehler hinweisen.

Mit freundlichen Grüßen
Felix Bauerschäfer
 
Zuletzt bearbeitet:

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
345
Halle (Saale)
Also erstmal ist da ein Logikfehler drin - leeres elseif.
Das {extends} sollte raus.
Und dann nicht mit einfachen Hochkommata arbeiten.
So sollte es funktionieren:
Code:
{$customer = JTL\Session\Frontend::getCustomer()}
{navitemdropdown tag="li"
    aria=['expanded' => 'false']
    router-aria=['label' => {lang key='myAccount'}]
    no-caret=true
    right=true
    text="<span class=\"fas fa-user\"></span>{if $customer->getID() > 0}<span class=\"hidden-xs hidden-sm hidden-md\"> {lang key="hello" section="global"} {if $customer->cAnrede === 'm'}{lang key='salutationM'}{else}{lang key='salutationW'}{/if} {$customer->cNachname}</span>{/if}<span class=\"fas fa-caret-down\"></span>"


//...
 
  • Gefällt mir
Reaktionen: felix.bauerschaefer

felix.bauerschaefer

Sehr aktives Mitglied
15. November 2019
228
33
Nienburg/Weser
Erst einmal vielen dank für die Mühe das funktioniert Einwandfrei wie angedacht.
Zweitens, vielleicht sehe ich auch den Wald vor lauter Bäume nicht mehr. Doch seit, wann gibt es englische Smarty Variablen zu benutzen im Shop.
Warum kann ich die oben erwähnten Variablen über das JTL-Debug Plugin nicht aufrufen?
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
345
Halle (Saale)
Ich verstehe die Frage nicht.
Was für englische Variablen? Die kannst du nennen wie du lustig bist.
Und was sollte man da in JTL-Debug sehen können?
 

felix.bauerschaefer

Sehr aktives Mitglied
15. November 2019
228
33
Nienburg/Weser
Ich verstehe die Frage nicht.
Was für englische Variablen? Die kannst du nennen wie du lustig bist.
Und was sollte man da in JTL-Debug sehen können?
Das Problem ist ich verstehe zentral gesehen nicht wie ich dort eine entsprechende Smarty-Abfrage mache.
Ich glaube (ab hier an ist alles Laienvermutung) wird jetzt erst bewusst das vorne es irrelevant ist was ich da abfrage nach dem $ bin davon ausgegangen das wären gesetzte feste Klassenwerte wie bei CSS, HTML.
Das ein Objekt auch nur einen Bezugspunkt hat. Weil ich dachte du beziehst dich hier auf arrays, dann ist es nicht mehr egal wie vorher das Array einsortiert ist etc.

Mir persönlich ist selbst mit der Die Shop-Klasse erklärung aus der Dokumentation das ganze noch etwas schleierhaft momentan.
Ich verstehe nicht ganz das Prinzip hinter der Abfrage mittels Smarty, bin davon ausgegangen das nur damit ausgelesen werden kann, man anhand von globalen Variablen die meisten abfragen schreibt im Shop.

Diejenigen die ja auch direkt im JTL-Debug Fenster sichtbar sind. Ich hoffe das macht meine Unwissenheit etwas verständlicher.
 
Zuletzt bearbeitet:

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
345
Halle (Saale)
Dann schrittweise:
Ich hole mir in der Zeile
Code:
{$customer = JTL\Session\Frontend::getCustomer()}
die Instanz des aktuellen Kunden und speicher sie in der Smartyvariablen "$customer". Alternativ könnte man mit der Session arbeiten, ungefähr so:
Code:
{$customer = $smarty.session.Kunde}

Alle weiteren Abfragen arbeiten auf dieser Instanz der Klasse JTL\Customer\Customer. Wenn die ID > 0 ist ($customer->getID() > 0) heißt das, dass es sich um einen eingeloggten Kunden handelt.
Dann kann man dessen Anrede und Name abfragen.

In JTL-Debug siehst du das nicht in der Liste der Smarty-Variablen, dafür müsstest du dann auch die Anzeige von $_SESSION aktivieren.
 

Groundhog

Sehr aktives Mitglied
11. Januar 2011
410
49
Austria
@FMoche

Ich häng mich hier nochmal ran, weil ich aktuell noch nicht so durchblicke - VIelliecht kannst du mir das kurz erklären:

Ich hab schon öfter im Template folgendes gesehen: {navitemdropdown}, {container}, {row} etc.... - Wo kommt der Code in der Ausgabe daraus her und warum macht ihr das? Sind das HTML Custom Properties die ihr vorweg definiert habt oder kommt das über Smarty und wo finde ich dazu ne Doku?AKtuell nutze ich einen übergeordneten css Selektor und ändere das dann im CSS - würde aber auch gerne mal eine Klasse auf eine tiefere Ebene einfügen. Der HTML Codesteht aber nicht klar im Template sondern erst in der Ausgabe.

Auch die get... Parameter sind mir noch nicht ganz klar. Wo finde ich heraus, welche es gibt und auf welche ich zugreifen kann. Aktuell würde ich einfach gerne den IsoCode der aktuell angezeigten Sprache anzeigen und habe dazu in der Debug die Session JTL/Language/LanguageModel currentLanguage - ich komm da aber nicht hin.