Neu Link in Header überall sichtbar machen

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
Hallo,

ich würde gerne einen Link zum gegenwärtig aktiven Wunschzettel in den Header des Shops einbauen und habe folgenden Code erarbeitet:

Code:
{if $oWunschliste_arr[0]->kWunschliste > 0}
     {foreach name=wunschlisten from=$oWunschliste_arr item=Wunschliste}
          {if $Wunschliste->nStandard == 1}
               <a href="jtl.php?wl={$Wunschliste->kWunschliste}&token={$smarty.session.jtl_token}">{lang key="mycurrentwishlist" section="custom"}
               </a>
          {/if}
     {/foreach}
{/if}

Das Problem hierbei: Der Code funktioniert, jedoch nur unter "Mein Konto". Auf allen anderen Seiten des Shops wird der Link nicht angezeigt.

Warum ist das so? Kann mir bitte jemand helfen?

Viele Grüße,

Afox
 

ag-websolutions.de

Sehr aktives Mitglied
29. Dezember 2009
14.548
227

Es werden immer nur die Daten für smarty bereitgestellt, die im Standard auf der jeweiligen Seite auch benötigt werden ....

Sprich das Array $oWunschliste_arr steht nur auf der Seite "Mein Konto" zur Verfügung .. auf anderen Seiten jedoch nicht.

Um das zu ändern müsstest du dir ein Plugin schreiben, welches die notwendige Variable auf allen Seiten bereit stellt.
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
danke für die Antwort. Wo wird denn standardmäßig festgelegt was wo geladen wird? Ich glaube ich benötige Hilfe bei der Erstellung.

Gruß, Afox
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
ich meinte an welchem Ort, also in welcher Datei/welchem Ordner genau. Von deiner Aussage ausgehend muss doch irgendwo stehen, dass z.B. Unter "Mein Konto" die class.JTL- Shop.Wunschliste.php geladen wird oder so ähnlich.
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
also in der jtl.php steht Folgendes:
Code:
    if($_SESSION['Kunde']->kKunde > 0)
    {
        $oWunschliste_arr = $GLOBALS['DB']->executeQuery("SELECT *
                                                            FROM twunschliste
                                                            WHERE kKunde=" . $_SESSION['Kunde']->kKunde . "
                                                            ORDER BY dErstellt desc", 2);
    }

    if(count($oWunschliste_arr) > 0)
    {
        $smarty->assign('oWunschliste_arr',$oWunschliste_arr);
    }

Allerdings wenn ich das in z.B. die index.php einfüge und den Template Cache leere, passiert nichts. Bin um jede Hilfestellung dankbar.

Gruß, Afox
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
ok, also ich nähere mich dem Ziel und habe noch spezielle Fragen:
  • welcher HOOK würde sich für dieses Vorhaben anbieten? oder soll ich mir aus jeder Datei einen raussuchen? Vorschläge: 140, 131, 133, 99
  • angenommen der oben genannte Code ist korrekt, wie injiziere ich diesen mittels Plugin?
Es genügt scheinbar nicht, ein <?php drumherum zu bauen, also

Code:
<?php

    if($_SESSION['Kunde']->kKunde > 0)
    {
        $oWunschliste_arr = $GLOBALS['DB']->executeQuery("SELECT *
                                                            FROM twunschliste
                                                            WHERE kKunde=" . $_SESSION['Kunde']->kKunde . "
                                                            ORDER BY dErstellt desc", 2);
    }

    if(count($oWunschliste_arr) > 0)
    {
        $smarty->assign('oWunschliste_arr',$oWunschliste_arr);
    }

?>

geht nicht.
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
Habe es mit dem Hook 140 probiert, der auf eine php-Datei in Frontend zeigt. Der Inhalt war wie oben beschrieben. Smarty-Debug zeigt nicht an dass die Variable geladen wurde.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
4.901
891
Berlin
Um das mal so zu sagen, wie ich es gerade denke.

Wenn du dir die Logik von dem Code aus der jtl.php anschaust, sollte dir direkt klar sein, dass du den Fehler machst.

Die Wunschliste steht ja wohl in der Datenbank und hat eine direkte Beziehung zur Kunden ID.
Die Session existiert beim 140er Hook bereits.

Du weißt also entweder nicht, wie du diese Info verarbeitest, oder hast gar nichts in der Wunschlistentabelle.
Hast du da mal geschaut?
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
ich denke es liegt daran dass ich nicht weiß wie man diese Info verarbeitet. Eine Wunschliste ist vorhanden und wenn ich den o.g. Code in z.B. die index.php vor einen Hook einfüge, wird der Link angezeigt.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
4.901
891
Berlin
Du musst jetzt mit den infos, wie auch immer, einen html block bauen, ob du dazu nun smarty hinzuziehst oder dir selbst das html baust, bleibt dir überlassen.

Das würde ich mir als erstes mit echo und einem harten exit ausgeben lassen.
Wenn da dann was drin ist, übermittelst du das mit z.b. pq("Header")->append(dein html output); an den 140er hook.

Wenn dir diese Info auch nicht reicht, musst du das in fremde Hände geben.
Gab es da nicht auch ein Beispiel plugin?
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
ich weiß nicht ob wir gerade aneinander vorbeireden aber ich möchte doch nur dieses "$oWunschliste_arr" des Kunden global zur Verfügung haben. Das Einfügen des Links erledige ich über einen manuellen Eingriff in die header.tpl.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
4.901
891
Berlin
Du siehst doch, das die Wunschliste in der Datenbank liegt?

Du hast vier wege:

Template pfusch
Core pfusch


Plugin Lösung
Smarty funktion registrieren über die functions.php
 

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
naja wenn man es nicht besser kann ist gepfuscht besser als gar nicht. Gerne kannst du mir aber auch ein Angebot per PN unterbreiten, was es kosten würde das ordentlich zu machen.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
4.901
891
Berlin
naja, das ist so ein kleines ding, da lohnt der ganze Aufwand nicht, das zu verhandeln, mach das hier in eine functions.php vom Template

und füge wo auch immer {wunschListe} ein.

Code:
$smarty->registerPlugin('function', 'wunschListe', 'wunschListe');

function wunschListe($params, &$smarty) {
 if($_SESSION['Kunde']->kKunde > 0) {
        $oWunschliste_arr =  \NiceDB::getInstance()->executeQuery("SELECT *
                                                            FROM twunschliste
                                                            WHERE kKunde=" . $_SESSION['Kunde']->kKunde . "
                                                            ORDER BY dErstellt desc", 2);
    }

    if(count($oWunschliste_arr) > 0) {
        \JTLSmarty::getInstance(false,false)->assign('oWunschliste_arr',$oWunschliste_arr);
                $list =
                '{if $oWunschliste_arr[0]->kWunschliste > 0}
                        <ul>
                     {foreach name=wunschlisten from=$oWunschliste_arr item=Wunschliste}
                          {if $Wunschliste->nStandard == 1}
                               <li><a href="jtl.php?wl={$Wunschliste->kWunschliste}&token={$smarty.session.jtl_token}">{lang key="mycurrentwishlist" section="custom"}</a></li>
                          {/if}
                     {/foreach}
                        </ul>
               {/if}
                ';
                 return \JTLSmarty::getInstance(false,false)->fetch('string:'.$list);
    }
    return '';
}
 
Zuletzt bearbeitet:

Afox

Gut bekanntes Mitglied
12. April 2012
333
4
ok, danke :)
Leider kommt nach der Änderung eine weiße Seite. Hast du gesehnen dass es hier um den Shop 3 geht? ^^
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
4.901
891
Berlin
Ich hatte mir das schon fast gedacht, das es nen 3er ist, meine Lösung bezieht sich auf den 4er, damit du gezwungen bist, upzudaten :)


{wunschListe}

Code:
    $smarty->register_function('wunschListe', 'wunschListe');
    
    function wunschListe($params, &$smarty) {
     if($_SESSION['Kunde']->kKunde > 0) {
            $oWunschliste_arr =  $GLOBALS['DB']->executeQuery("SELECT *
                                                                FROM twunschliste
                                                                WHERE kKunde=" . $_SESSION['Kunde']->kKunde . "
                                                                ORDER BY dErstellt desc", 2);
        }
        if(count($oWunschliste_arr) > 0) {
            $smarty->assign('oWunschliste_arr',$oWunschliste_arr);
                    $list =
                    '{if $oWunschliste_arr[0]->kWunschliste > 0}
                            <p>liste</p>
                            <ul>
                         {foreach name=wunschlisten from=$oWunschliste_arr item=Wunschliste}
                              {if $Wunschliste->nStandard == 1}
                                   <li><a href="jtl.php?wl={$Wunschliste->kWunschliste}&token={$smarty.session.jtl_token}">{lang key="mycurrentwishlist" section="custom"}</a></li>
                              {/if}
                         {/foreach}
                            </ul>
                   {/if}
                    ';
                    return  smarty_function_eval(array('var'=>$list), $smarty);
        }
        return '';
    }