Neu Template / Theme wechseln je Kategorie

Anarchnophobia

Gut bekanntes Mitglied
26. Oktober 2010
228
24
Leipzig
Mahlzeit Gemeinde

Shop 4.06.16

Folgendes Anliegen:
Wir haben einen Shop (hurra!)
Und ein Child-Template mit zwei Themes (welche sich bislang nur in der custom.css und der bootstrap.css unterscheiden)

Nun möchten wir als Hersteller zu unserer vorhandenen Marke eine neue Marke anlegen - deren Design sich in der Shopkategorie vom "Rest" unterswcheiden soll. Nur css-kram, also kein komplett anderes Layout, daher denke ich lässt sich das einfacher alles mit einem anderem Theme (und nicht einem komplett anderem Template) bewerkstelligen.

Nun möchte ich der Kategorie ein Funktionsattribut ala "Marke:NeueMarke" und den jeweiligen Artikeln darin ebenfalls ein Funktionsattribut "Marke:NeueMarke" mitgeben.

Soweit, so logisch.

Woran ich nun scheitere ist das Theme standard/neueMarke auch zu ändern. Ich vermute mal das müsste im header.tpl passieren, da gibt es ja folgenden Schnippsel:

Code:
{block name="head-resources"}
        {* css *}
        {if !isset($Einstellungen.template.general.use_minify) || $Einstellungen.template.general.use_minify === 'N'}
            {foreach from=$cCSS_arr item="cCSS"}
                <link type="text/css" href="{$cCSS}?v={$nTemplateVersion}" rel="stylesheet">
            {/foreach}

            {if isset($cPluginCss_arr)}
                {foreach from=$cPluginCss_arr item="cCSS"}
                    <link type="text/css" href="{$cCSS}?v={$nTemplateVersion}" rel="stylesheet">
                {/foreach}
            {/if}
        {else}
            <link type="text/css" href="asset/{$Einstellungen.template.theme.theme_default}.css{if isset($cPluginCss_arr) && $cPluginCss_arr|@count > 0},plugin_css{/if}?v={$nTemplateVersion}" rel="stylesheet">
        {/if}


........
{/block}

Die richtige Stelle um, so dachte ich mir, irgendwie mit:

Code:
{if $AktuelleKategorie->KategorieAttribute.marke=="neue Marke" || $Artikel->FunktionsAttribute.marke=="neue Marke" }
Theme-Auswahl neue Marke
{else}
standarddesign
{/if}

weiterzukommen... aber wie? An der Stelle ist die Themauswahl ja schon lange übergeben? Die ganzen von dem theme benutzen css Dateien (in $cCSS_arr) werden wohl in der \includes\letzterInclude.php generiert, bin mir auch nicht sicher ob ich darin überhaupt die Kategorie abfragen kann und... achachach. Ich drehe mich da gedanklich im Kreis und bekomms nicht hin.

Ob mir mal jemand das Händchen halten und weiterhelfen könnte? :)

Grüße
Matthias

PS: beim schreiben fiehl mir selber die Lösung ein: Nur für die neueMarke eine weitere custom2.css anzulegen, die in der Template.xml NICHT eingebunden wird, und diese dann mit meinem vorgeschlagenem Weg zusätzlich einzubinden? Da wird dann nur fast die gesamte bootstrap.css drin kopiert sein (welche man ja wieder aus dem Template.xml rausnehmen könnte...?)

PS2: Vllt hat ja noch jemand eine geschicktere Idee wie das ganze Theme zu wechseln wäre, falls nicht schicke den Thread nun dennoch mal ab, ist vllt für andere ja auch interessant :)
 

301Moved

Sehr aktives Mitglied
19. Juli 2013
930
188
Es gibt doch sogar Funktionsattribute zur Steuerung des Designs der Kategorien, vll hilft dir das ja direkt schon? (Nie benutzt, fällt mir nur gerade ein....)

Krieg den Link hier mobil nicht rein kopiert zum Guide, aber findet man schnell selbst ;)
 

Qwartz

Sehr aktives Mitglied
29. August 2012
511
93
Bayern
Wie veekop schon sagte geht das z.b über https://guide.jtl-software.de/jtl-s...uebersicht-funktionsattribute-fuer-kategorien
Wobei ich gerade nicht sagen kann ob das dann schon im Body vorhanden ist oder erst ab container o.ä. wirkt, noch nicht benutzt :)

Aber falls das nicht geht so aus dem Stehgreif... ohne Gewehr :)
HTML:
<body class="{if deinfunktionsattribut == } marke2{/if} >

und dann nich das Theme wechseln sondern einfach in die Standard css sowas wie...

CSS:
body.marke2{background-color:#78879}

u.s.w über die klasse kommst du ja dann auch an die unteren Elemente.

Nachtrag:
Ah ok, wer lesen kann ist klar im Vorteil ;)
"Die Ausgabe der CSS-Class erfolgt im <a>-Tag im Kategoriebaum. "
 
Zuletzt bearbeitet:

eRock Marketing

Offizieller Servicepartner
SPBanner
9. Januar 2018
502
203
Wenn es "nur ein paar CSS Sachen" sind - im <head> bereich (nach den standard geladenen CSS Sachen) einfach einen Inline Block einfügen.
HTML:
{if $AktuelleKategorie->KategorieAttribute.marke=="neue Marke" || $Artikel->FunktionsAttribute.marke=="neue Marke" }
  <style type="text/css">
     {literal}
       #content a {color: red;}
     {/literal}
  </style>
{/if}

Paar Zeilen CSS sind da einfacher und performanter, wenn diese Inline anstatt als eine zusätzliche Datei zu laden.
Sofern die assets Datei von JTL genutzt wird (Zusammenführen von CSS/JS im Template aktiv - kann ich auch nur empfehlen), kann nicht wirklich daran manipuliert werden. Dazu wären weitere Parameter notwendig +Eingriffe in den "Core" da hier leider kein Hook vorhanden ist, mit dem Thema hatten wir schonmal ausführlicher zu tun ;)