Neu Anpassung vom navitemdropdown erweitern um Abfrage?

  • JTL-Connect 2022: Ihr habt noch kein Ticket? Jetzt schnell sichern! Die PreConnect ist bereits ausgebucht, auch für die After-Show-Party auf der Ocean Diva sind nur noch wenige Plätze verfügbar! HIER geht es zum Ticketverkauf

  • Das Stable Release von JTL-Wawi 1.6 ist startklar: HIER gehts zum Forenbeitrag

felix.bauerschaefer

Sehr aktives Mitglied
15. November 2019
200
26
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.226
259
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
200
26
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.226
259
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
200
26
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.226
259
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.