Home » xt:Commerce Templates

Verschiedene Templates in einem xt:Commerce Onlineshop

11 Mai 2010

In vielen der großen Onlineshops sieht man in letzter Zeit immer häufiger, dass sich die Startseite oder eine Kategorie vom Aussehen der “normalen” Seiten im Shop stark unterscheidet. Zum Beispiel ist ein großes Teaser-Bild, ein Bilder-Menu oder eine Flash-Animation nur auf der Startseite.

Kann xt:Commerce das auch?

“Out of the Box” leider nicht, jedoch benötigt es nur wenige Handgriffe. Zuerst benötigen wir ein alternatives Template. Das erstellt man sich einfach indem man die index.html Datei im Templateordner dupliziert. Die neue Datei benennt man um, z.B in Startseite.html

Als nächstes müssen wir xt:Commerce beibringen, auf der Startseite die neue Template-Datei zu benutzen, dieses kann man in der index.php im Hauptordner des Onlineshops (nicht im xtc Template) einstellen.

Ganz am Ende der index.php Datei befinden sich folgende Zeilen:

if (!defined(RM))
$smarty->load_filter('output', 'note');
$smarty->display(CURRENT_TEMPLATE.'/index.html');
 
include ('includes/application_bottom.php');  
?>

Für unsere Änderungen ist nur die Anweisung $smarty->display von Interesse, hier wird der Template Engine Smarty, auf welcher xt:Commerce aufbaut ist mitgeteilt, welches Template zum anzeigen der jeweiligen Datei (hier die index.php) verwendet werden soll, index.html im aktiven (CURRENT_TEMPLATE) Template hier.

Tauschen wir die Zeile gegen diese aus:

if($category_depth == 'top'){
$smarty->display(CURRENT_TEMPLATE.'/startseite.html');  
}else{
$smarty->display(CURRENT_TEMPLATE.'/index.html');
}

Nun wird zur anzeige der Startseite das Template in der zuvor erstellten Datei verwendet. Jede Änderung die nun in der Startseite.html vorgenommen wird wirkt sich nicht auf die anderen Seiten des Onlineshops aus.

Natürlich kann man diese Änderungen für fast jede Seite des Shops machen, die nötigen .php Dateien liegen im Hauptordner des Onlineshops. Die Dateien welche mit Checkout_ anfangen, beschreiben den Bestellprozess, hier könnte man z.B. die linke oder rechte Spalte des Onlineshops ausblenden usw.

Die Dateinamen sind überwiegend selbsterklärend, im Zweifel einfach mal testen ;)

Like it? Then share, rate or comment it:

Themenrelevante Artikel:

Hinweis: Die mit * gekennzeichneten Links sind Partnerlinks

30 Comments »

  • Mehrere Templates in einem xt:Commerce « Xt:Commerce News said:

    [...] Commerce-tricks erschien letzte Woche eine schöne Anleitung um das zu realisieren: In vielen der großen Onlineshops sieht man in letzter Zeit immer häufiger, [...]

  • Moohain said:

    hallo,
    … ja das stimmt alles, nur wenn Kategorien angelegt sind, dann beginnt die URL ja auch mit index.php?cat=c27, bedeutet also, dass auf den Seiten auch das neue Template startseite.html angezeigt werden. Für alles andere seiten funktioniert es so wie es soll…

  • Alex (author) said:

    Da hatte sich ein Fehler beim Copypasten eingeschlichen, die If funktion muss natürlich die “tiefe” der Navigation abfragen…

    Danke für den Hinweis

  • Robert said:

    Hi

    Gibts nen Tip wie ich die Top Categorie abfragen kann? Ich weiß das ich diese im $top_navigation im Array als 1 finde (0 ist ja immer die Startseite). Ich müsste jetzt den Namen auslesen.
    Hat jemand ein Snap wie ich das abfragen kann?

    danke :)
    Robert

  • Alex (author) said:

    In der Datei /templates/DEIN_TEMPLATE/source/boxes/categories.php wird das Menü zusammengebaut, hier stehen auch die Menüs mit Namen zur Verfügung.
    Hier könntest du ansetzten um z.B. ein Menü auszublenden…

    Viel Erfolg

  • Robert said:

    Danke für die schnelle Antwort.
    In meinem Fall müsste ich in der Index.html einfach nur abfragen unter welcher Topnavi ich mich befinde. Ist es A dann mach dies und ist es B dann mach das.
    Nur weiß ich nicht wie eine foreach schleife für die $top_navigation geht um nur den Name aus Array 1 auszulesen. :(
    Wenn du für sowas ein Snip hättest wäre das genial. :)

    Robert

  • Alex (author) said:

    Oh, ich glaube das ist garnicht so trivial…
    In der index.html sollte das array nicht zur Verfügung stehen, was soll sich den ändern wenn TopnaviX aktiv ist?

  • Robert said:

    Danke für deine Zeit. Hab die Abfrage hin bekommen. Hab jetzt nur noch ein Problem das ich mit IF keine Kategorien abfragen kann die Umlaute haben.

    Das heisst meine {If $cat.name == “Fitness”} funktioniert.
    Aber die {If $cat.name == “Gartenmöbel”} funktioniert nicht.

    Mache ich {$cat.name} ins template schreibt er mir das richtige mit umlaute raus. :(
    Ich flipp noch aus mit dem Veyton.

  • Alex (author) said:

    Prüfe lieber auf die cat.id , weil das geht auch bei zwei Sprachen und eine Zahl hat keine Umlaute :)

  • jimmi said:

    ganz eine blöde Frage: ist die index.php im Hauptverzeichnis nicht geioncubed? Ich würde diese Lösung auch gerne mal ausprobieren, doch weiß ich nicht wie ich decoden soll? Geht es ohne decoding auch?
    lG und vielen Dank.

  • Alex (author) said:

    Diese Anleitung ist für die Version 3 von xt:Commerce, da ist nix verschlüsselt.

  • jimmi said:

    vielen Dank für die Antowrt, aber gibt es für vayton auch eine Möglichkeit, wie ich eine andere Startseite (z.B. index2.html) mit einer swf animation z.b. zw. top_menu und main, anlegen kann. Vielen Dank schon mal.

  • Alex (author) said:

    Du kannst zum einen im plugin xt_startpageproducts ein template für das listing festlegen.
    Zum anderen kannst du in jedem template bzw. sub-template {if page == ‘index’}… bzw. mit {if $smarty.get.page == ‘index’}… abfragen und so auf eine andere Schleife leiten.

  • jimmi said:

    Vielen Dank Alex für deine raschen Antworten!

    Kannst du mir vielleicht eine Tip geben, wie diese Umleitung mit der smarty Abfrage funktioniert? Was passiert nach dem if?
    Nochmals vielen Dank und entschuldige die vielen Fragereien, ich bin aber noch relativ am Anfang und meine Kenntnisse über die smarty-tags sind dementsprechend auch begrenzt.

  • Alex (author) said:

    Na ja,
    also Beispielsweise im /templates/xt_default/xtCore/pages/product_listing_v1.html

    {if $smarty.get.page == “index”}
    {foreach name=aussen item=module_data from=$product_listing}
    [INHALT DER SCHLEIFE, WENN $page == index, also auf Startseite]
    {/foreach}

    {else}

    {foreach name=aussen item=module_data from=$product_listing}
    [INHALT DER SCHLEIFE, WENN $page != index, also auf NICHT Startseite]
    {/foreach}
    {/if}

  • jimmi said:

    hmm,
    vielen Dank. Aber wann genau tritt der Fall auf, dass nicht ‘index’ aufgerufen wird? Ist hier die template index, oder die index.php gemeint? D.h. also auch, dass wenn ich nur die default seite umleiten möchte, ich nur die passage from=$default umändern muss. In diesem Fall kommt dann der ganze Inhalt der Schleife nur in der else-Abzweigung?
    Fragen über Fragen. Entschuldige nochmals, aber ich stehe echt an.
    Auch hier bin ich dir zu Dank verpflichtet ;)
    lG,
    p.s. und wie sage ich ihm welche seite er dann anzeigen muss? Am besten die umgearbeitete Kopie der index.html seite index1 z.B?

  • Alex (author) said:

    hmm, ich glaube du solltest dich noch etwas genauer mit dem System befassen, denn ich hab keinen Schimmer was du mit “umleiten” meinst… :)
    schreib mal

    <h1>$page = {$page}</h1>

    an den Anfang deiner index.html ( template/xt_default/ )

  • jimmi said:

    Hi nochmals,

    aber ich versthe das ganze nicht. Wie sage ich default.html, dass wenn die Seite index.html ist, er auf index1.html springen soll? geht das überhaupt? Ich hoffe nicht, dass wir einander vorbei reden. Ich möchte nur eine 2 modifizierte index seite auf der nur default.html angezeigt wird, also nur Startseite anders.
    Jetzt bringt mir aber die Abfrage nur wenn es index.html ist dann zeig mir diesen inhalt an, wenn nicht einen anderen. Ich möchte aber nicht die default verändern.
    Ich bin echt am Verzweifeln. Bitte hilf mir noch ein mal.
    Vielen lieben Dank.

  • Alex (author) said:

    Ok, das geht nur sehr kompliziert, vorzugsweise mit einem Plugin, über das Template könnte aber auch funktionieren…

    Mit default.html meinst du die Startseite oder eine bestimmte Seite? Beschreib mal was exakt du machen willst.
    Ich wollte eh mal wieder etwas bloggen, vielleicht finde ich etwas Zeit dafür.

  • jimmi said:

    Alex,
    als Erstes, vielen lieben Dank für deine Hilfe! Also das was ich vorhabe ist Folgendes: analog zu dem hier beschriebenen Vorgang, wie die index.php zu ändern wäre falls man eine andere startseite (index.html) haben möchte. Die default.html ist die content Seite die in die index.html als Startseite im main Bereich geladen wird. Die brauche ich nicht, da ich die index.html zw. dem header und main bereich ändern möchte. D.h. explizit nur die Startseite soll eine andere sein als die index.html (von mir aus index1.html) die nur im Falle dessen mit dem defaultcontent geladen wird, wenn der user das erste mal die Seite aufmacht, oder zurück auf home clickt. Also genauso wie es in deinem Artikel steht, nur eben für vayton, da hier die index.php geioncubed ist und ich die, so wie beschrieben, nicht editirern kann, außer du kennst einen freien decoder. Habe zwar hierfür lang und breit gegoogelt, aber nichts vernünftiges gefunden. GIbt es eine andere Möglichkeit? Ich will ja nur einen flash-film (eine Art slideshow) auf der Startseite (und nur dort) positionieren? Hast du eine Idee?

  • Alex (author) said:

    Ok, mach exakt folgendes:

    Falls die linke und rechte Spalte auf der Startseite ausgeblendet sein sollen, öffne die Datei /xtCore/pages/index.php und schreibe vor “?>” die Zeile:

    $show_index_boxes = 'false';

    Dann öffnest du die “installierte Plugin”-Seite und deaktivierst “xt_startpage_products”, jetzt öffnest du im Contentmanager die Seite index und aktivierst den HTML-Modus vom Editor (oben rechts am editor).
    Da fügst du deine Flash ein und fertig.

    Das alles setzt voraus, das du das defaulttemplate benutzt, aber das sollte jetzt auch genügen, sonst muss ich dir ne Rechnung schreiben :)

  • jimmi said:

    Vielen Dank Alex!
    wir haben es immer noch nicht ganz ;) das mit dem flash einfügen in der default seite habe ich ja schon ausprobiert, er fügt den Inhalt direkt in der default ein, die will ich aber nicht ändern, weil ich den flash banner, oder slieder oder was auch immer zw. dem top menu und dem maincontent (wo ja default angezeigt wird) einfügen will. Ich brauche also wirklich eine Möglichkeit, wie ich der index.php sage, dass die startpage nicht index.html ist sondern die bearbeitete index1.html (mit dem flashcontent). Schau dir das mal an:

    http://www.htpcshop.at

    Der slider dort soll nur auf der Startseite sein und nicht auf allen anderen.
    lG,

  • as (author) said:

    Ne, du brauchst kein zweites Template.

    Setz dein Flasch in die Datei index.html an die richtige Stelle und füge davoe “{if $page == ‘index’}” ein, dahinter “{/if}”

  • jimmi said:

    keine Idee?

  • jimmi said:

    Jepp,
    so einfach ist das? Ab und zu ist die Lösung wirklich so nah, dass man sie übersieht. ;)
    Vielen Dnak für deine Hilfe und weiter so mit der guten Arbeit.
    lG,

  • Max said:

    Klasse, genau so etwas habe ich gesucht :-) Vielen Dank für dieses HowTo! Für mich als PHP-Dau ist das wirklich sehr hilfreich.

    Eine Frage habe ich dennoch dazu. Wie muss ich die Zuweisung erweitern, damit ich auch im Checkout eine andere Templatedatei verwenden kann? Denn das soll möglichst minimalistisch erscheinen, ohne störende Boxen und sonstige ablenkende Inhalte.

    Vielen Dank im voraus für die Hilfe.

    Gruß Max

  • Alex (author) said:

    Im letzten Absatz steht was dazu.

    Um ehrlich zu sein hab ich xt:Commerce 3 und dessen Forks seit ca. nem Jahr nicht mehr benutzt, hab nichtmal eine demo zum testen installiert.

    Seit die xt:Commerce 4 CE auch kostenlos ist kann ich den Einsatz auch nicht mehr nachvollziehen.

  • Chriz said:

    Vielen lieben Dank,

    Der ganze IF Else Quatsch direkt im Template hat bei mir zu Problemen geführt, weil die “Index” auch Kategorien listet. Jetzt funktioniert alles bestens!

  • Jule said:

    Hi,
    erstmal vielen Dank, soweit funktioniert alles.
    Ich habe aber noch eine Frage:
    Was muss angegeben werden, wenn ich ein anderes Template für einen Contentpart will, z.B. Impressum?
    Vielen Dank für eine schnelle Antwort.

  • Alex (author) said:

    Puh, der Artikel ist für xt:Commerce 3, da hab ich mitlerweile nicht mal mehr einen Testshop mehr zum testen, alles auf xt:Commerce 4 umgestellt.
    Sorry :(

Leave your response!

Um Quelltext in Kommentaren lesbar zu posten nutzt bitte <pre lang="php">EUER CODE</pre>

Um Quelltext in Kommentaren lesbar zu posten nutzt bitte <pre lang="php">EUER CODE</pre>