Wie Sprachwechsler in Subshops anlegen um zwischen den Supshops zu wechseln?

Ich möchte gerne über den Sprachwechsler zwischen Subshops (in verschiedener Sprache) navigieren; geht das überhaupt? 

Hallo,

dafür müsstest du ins Theme eingreifen, ist aber nur eine “kleine” Sache. Im Standard werden nur die Sprachshops im Template ausgegeben/übergeben. Das sieht dann so aus: shopware/shop_menu.tpl at 5.5 · shopware/shopware · GitHub

Du kannst jetzt unter das Foreach auch noch weitere Einträge packen. Das könnte dann so aussehen:

{extends file="parent:widgets/index/shop_menu.tpl"}

{block name="frontend_index_actions_active_shop_language_form_select"}
    
        
            {foreach $languages as $language}
                getId() === $shop->getId()}selected="selected"{/if}>
                    {$language->getName()}
                
            {/foreach}
            getId() === $shop->getId()}selected="selected"{/if}>
                Localhost
            
        
    
{/block}

Meine Anpassung wäre das hier:

getId() === $shop->getId()}selected="selected"{/if}>
  Localhost

Das “Value” ist da die ID des Shops aus der s_core_shops. Shopware bastelt dann einen Link daraus wie www.meinedomain.de/?__shop=3 und leitet an den Subshop weiter.
Das würde also so funktionieren, wenn du die Shops da mit reinpackst.

Generell bedeutet das natürlich etwas aufwand, da due alle Themes anpassen musst, wo der Sprachwechsler das anzeigen muss.

Grüße

Moritz

1 Like

Danke Moritz, für deine Hilfe. Wie sieht das aus, wenn ich das Fashion-Template benutze, muß ich da was beachten?

@solaradmin schrieb:

Danke Moritz, für deine Hilfe. Wie sieht das aus, wenn ich das Fashion-Template benutze, muß ich da was beachten?

Das müsste da genauso gehen. Du hast ja wahrscheinlich schon ein eigenes Theme, was vom Fashion Theme ableitet?

Dann musst du ja nur eine eigene Datei /themes/Frontend/Mein_Theme/widgets/index/shop_menu.tpl anlegen und dort deine Änderungen so wie oben beschrieben reinpacken.
Wenns da Probleme mit dem Fashion-Theme geben sollte, melde dich einfach nochmal - glaube ich aber eigentlich nicht.

Hallo,

in Blog Kommentaren kommt der älteste zuerst, kann ich da nicht auch eine auswahl einbauen älteste/neueste zuerst mit:

{foreach $sArticle.comments as $vote}

geht das auch?

Mfg

 

@Moritz Naczenski schrieb:

Hallo,

dafür müsstest du ins Theme eingreifen, ist aber nur eine „kleine“ Sache. Im Standard werden nur die Sprachshops im Template ausgegeben/übergeben. Das sieht dann so aus: https://github.com/shopware/shopware/blob/5.5/themes/Frontend/Bare/widgets/index/shop_menu.tpl#L16

Du kannst jetzt unter das Foreach auch noch weitere Einträge packen. Das könnte dann so aussehen:

{extends file=„parent:widgets/index/shop_menu.tpl“}

{block name=„frontend_index_actions_active_shop_language_form_select“}

{foreach $languages as $language}
getId() === $shop->getId()}selected=„selected“{/if}>
{$language->getName()}

{/foreach}
getId() === $shop->getId()}selected=„selected“{/if}>
Localhost

{/block}

Meine Anpassung wäre das hier:

getId() === $shop->getId()}selected=„selected“{/if}>
Localhost

Das „Value“ ist da die ID des Shops aus der s_core_shops. Shopware bastelt dann einen Link daraus wie www.meinedomain.de/?__shop=3 und leitet an den Subshop weiter.
Das würde also so funktionieren, wenn du die Shops da mit reinpackst.

Generell bedeutet das natürlich etwas aufwand, da due alle Themes anpassen musst, wo der Sprachwechsler das anzeigen muss.

Grüße

Moritz

Das hat mit dem Thread hier aber überhaupt nichts zu tun. Wenn du eine Frage hast, mach doch am besten einen neuen Thread auf.

Hallo Moritz, vielen Dank für deine Nachricht. Habe die drei Zeilen mit der entsprechenden ShopID in die shop_menu.tpl eingepflegt und im entsprechenden Theme-Ordner …/index/ hinterlegt, es passiert aber nichts (ja, Cache etc. geleert). Klappt das denn bei dir?

Du hast das aber schon in /themes/Frontend/mein_Theme/Widgets/index/shop_menu.tpl hinterlegt?

Bei mir klappte das direkt - hatte es auch eben getestet, als ich es dir geschickt habe. Im Dropdown erscheint dann bei meinem Beispiel “Localhost”.

Hast du vielleicht keine Sprachshops? Dann müsstest du noch diese Zeile anpassen: 

Ich war jetzt davon ausgegangen, dass das Shop Menü schon angezeigt wird (= es gibt sprachshops) und nur ein Subshop noch mit rein soll.

 

Könnte so aussehen, wenn du die ganzen IFs- einmal entfernst.

{extends file="parent:widgets/index/shop_menu.tpl"}

{block name='frontend_index_actions_active_shop'}
        
            {block name='frontend_index_actions_active_shop_top_bar_language'}
                    
                        {block name="frontend_index_actions_active_shop_language_form_content"}
                            
                                    {$shop->getName()}
                                {block name="frontend_index_actions_active_shop_language_form_select"}
                                    
                                        
                                            {foreach $languages as $language}
                                                getId() === $shop->getId()}selected="selected"{/if}>
                                                    {$language->getName()}
                                                
                                            {/foreach}
                                            getId() === $shop->getId()}selected="selected"{/if}>
                                                Localhost
                                            
                                        
                                    
                                {/block}
                                
                                {block name="frontend_index_actions_active_shop_inline"}{/block}
                            
                        {/block}
                    
            {/block}
        
{/block}

 

Es handelt sich um einen Hauptshop Domain1 mit Sprache 1 und zwei Subshops, jeweils mit Domain 2 und Sprache 2 bzw. Domain 3 und Sprache 3.

In allen drei soll jeweils Sprache 1, 2 und 3 im Sprachwechsler angezeigt werden und bei Auswahl auf z.B. Sprache 2 in den Subshop 2 auf der Domain 2 etc. umgeswitcht werden können.

Es sind also keine Sprachshops im Shopware-Sinne vorhanden, sondern reine Subshops, für die eine Steurungsverbindung untereinander hergestellt werden soll, ich dachte also an den Sprachwechsler. Leider wird dieser bei Subshops nicht angezeigt, sondern nur bei Sprachshops, daher die Ausgangsfrage.

@solaradmin schrieb:

Es handelt sich um einen Hauptshop Domain1 mit Sprache 1 und zwei Subshops, jeweils mit Domain 2 und Sprache 2 bzw. Domain 3 und Sprache 3.

In allen drei soll jeweils Sprache 1, 2 und 3 im Sprachwechsler angezeigt werden und bei Auswahl auf z.B. Sprache 2 in den Subshop 2 auf der Domain 2 etc. umgeswitcht werden können.

Ja, hatte oben noch ein Beispiel dafür reingepackt.

Dafür müsste man auch noch die ganzen Prüfungen entfernen, ob es überhaupt einen Sprachshop gibt. Du kannst das aber nach dem Vorbild so machen, musst dann ggf. noch die CSS-Klassen für die Flaggen selbst setzen. Das sollte aber vom Grundsatz her schon so funktionieren. Du kannst auch die Foreach komplett weg lassen und deine Shops da manuell eintragen - also selbst alle Options anlegen, wäre wahrscheinlich noch sauberer. Dann eher so:

 

{extends file="parent:widgets/index/shop_menu.tpl"}

{block name='frontend_index_actions_active_shop'}
    
        
            
                    {$shop->getName()}
                    
                        
                            
                                Deutsch
                            
                            
                                Englisch
                            
                            
                                Spanisch
                            
                        
                    
                
            
        
    
{/block}

 

Hallo Moritz, die drei Sprachen werden jetzt prima in allen drei Shops (mit Flaggen und Text) angezeigt. Ich kann auch prima vom Hauptshop (englisch) in die beiden Subshops umswitchen, sowohl zwischen beiden Subshops hin- und herswitchen, bloß nicht zurück in den Hauptshop!?

@solaradmin schrieb:

Hallo Moritz, die drei Sprachen werden jetzt prima in allen drei Shops (mit Flaggen und Text) angezeigt. Ich kann auch prima vom Hauptshop (englisch) in die beiden Subshops umswitchen, sowohl zwischen beiden Subshops hin- und herswitchen, bloß nicht zurück in den Hauptshop!?

Schau ich mir morgen mal an! 

Das Problem mit dem “Hauptshop” ist, dass der immer selected/vorausgewählt ist. Dadurch kann man den nicht anklicken. Du könntest das lösen, indem du das selected per IF setzt:

{extends file="parent:widgets/index/shop_menu.tpl"}

{block name='frontend_index_actions_active_shop'}
    

        {assign var="german" value="1"}
        {assign var="english" value="2"}
        {assign var="spain" value="3"}


        
            
                {$shop->getName()}
                
                    
                        getId()}selected="selected"{/if}>
                            German
                        
                        getId()}selected="selected"{/if}>
                            Englisch
                        
                        getId()}selected="selected"{/if}>
                            Spanisch
                        
                    
                
                
            
        
    
{/block}

 

Dann sollte im Dropdown auch immer der aktuell aktive Shop ausgewählt werden und man kann wieder wechseln.

Der Sprachwechsler erscheint jetzt korrekt (auch ohne Vorauswahl), und läßt sich prima umschalten; lediglich die Smarty Debug Console öffnet sich mit folgender Info:

Ich habe die drei Shop-IDs im shop-menu.tpl angepasst, aber irgend etwas funkt noch nicht richtig.

Hauptshop 1 (english), Subshop 6 (german), Subshop 8 (spain)

Schau mal in den Code, ich hatte da ein {debug} vergessen. Einfach rausnehmen die Zeile.

Habe das oben schon angepasst.

1 Like

Herzlichen Dank Moritz, für deine Mühen; jetzt klappt alles prima :wink:

Wer an anderer Stelle mit der Subshop-Variable noch hängebleibt, dem sei gesagt, dass

$shop->getId()

nicht gleich

$Shop->getId()

ist. Kleingeschrieben funktioniert es anscheinend nur an dieser Stelle. 

Vielleicht kann jemand mir dazu Näheres sagen?