solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

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

2 Answers

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

    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"}
        <div class="select-field">
            <select name="__shop" class="language--select" data-auto-submit="true">
                {foreach $languages as $language}
                    <option value="{$language->getId()}" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                        {$language->getName()}
                    </option>
                {/foreach}
                <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                    Localhost
                </option>
            </select>
        </div>
    {/block}
    
    

    Meine Anpassung wäre das hier:

    <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
      Localhost
    </option>

    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

    Quote
    Accepted Answer
    Thanked by 1solaradmin
  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

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

    Habe das oben schon angepasst.

    Quote
    Accepted Answer
    Thanked by 1solaradmin
  • Accepted Answers

Answers

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

    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"}
        <div class="select-field">
            <select name="__shop" class="language--select" data-auto-submit="true">
                {foreach $languages as $language}
                    <option value="{$language->getId()}" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                        {$language->getName()}
                    </option>
                {/foreach}
                <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                    Localhost
                </option>
            </select>
        </div>
    {/block}
    
    

    Meine Anpassung wäre das hier:

    <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
      Localhost
    </option>

    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

    Quote
    Accepted Answer
    Thanked by 1solaradmin
  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

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

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

    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.

  • e-z-de-z-d MemberComments: 18 Received thanks: 0 Member since: October 2014

    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

     

    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"}
        <div class="select-field">
            <select name="__shop" class="language--select" data-auto-submit="true">
                {foreach $languages as $language}
                    <option value="{$language->getId()}" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                        {$language->getName()}
                    </option>
                {/foreach}
                <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                    Localhost
                </option>
            </select>
        </div>
    {/block}
    
    

    Meine Anpassung wäre das hier:

    <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
      Localhost
    </option>

    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

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

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

  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

    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?

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 edited October 2018 Member since: September 2013

    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: 

    https://github.com/shopware/shopware/blob/5.5/themes/Frontend/Bare/widgets/index/shop_menu.tpl#L3

    https://github.com/shopware/shopware/blob/5.5/themes/Frontend/Bare/widgets/index/shop_menu.tpl#L6

    https://github.com/shopware/shopware/blob/5.5/themes/Frontend/Bare/widgets/index/shop_menu.tpl#L10

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

     

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

    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'}
            <div class="top-bar--language navigation--entry">
                {block name='frontend_index_actions_active_shop_top_bar_language'}
                        <form method="post" class="language--form">
                            {block name="frontend_index_actions_active_shop_language_form_content"}
                                <div class="field--select">
                                        <div class="language--flag {$shop->getLocale()->toString()}">{$shop->getName()}</div>
                                    {block name="frontend_index_actions_active_shop_language_form_select"}
                                        <div class="select-field">
                                            <select name="__shop" class="language--select" data-auto-submit="true">
                                                {foreach $languages as $language}
                                                    <option value="{$language->getId()}" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                                                        {$language->getName()}
                                                    </option>
                                                {/foreach}
                                                <option value="3" {if $language->getId() === $shop->getId()}selected="selected"{/if}>
                                                    Localhost
                                                </option>
                                            </select>
                                        </div>
                                    {/block}
                                    <input type="hidden" name="__redirect" value="1">
                                    {block name="frontend_index_actions_active_shop_inline"}{/block}
                                </div>
                            {/block}
                        </form>
                {/block}
            </div>
    {/block}

     

  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

    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.

  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

    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.

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

    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'}
        <div class="top-bar--language navigation--entry">
            <form method="post" class="language--form">
                <div class="field--select">
                        <div class="language--flag {$shop->getLocale()->toString()}">{$shop->getName()}</div>
                        <div class="select-field">
                            <select name="__shop" class="language--select" data-auto-submit="true">
                                <option value="1">
                                    Deutsch
                                </option>
                                <option value="2">
                                    Englisch
                                </option>
                                <option value="3">
                                    Spanisch
                                </option>
                            </select>
                        </div>
                    <input type="hidden" name="__redirect" value="1">
                </div>
            </form>
        </div>
    {/block}

     

  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

    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!?

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

    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! 

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 edited October 2018 Member since: September 2013

    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'}
        <div class="top-bar--language navigation--entry">
    
            {assign var="german" value="1"}
            {assign var="english" value="2"}
            {assign var="spain" value="3"}
    
    
            <form method="post" class="language--form">
                <div class="field--select">
                    <div class="language--flag {$shop->getLocale()->toString()}">{$shop->getName()}</div>
                    <div class="select-field">
                        <select name="__shop" class="language--select" data-auto-submit="true">
                            <option value="{$german}" {if $german == $shop->getId()}selected="selected"{/if}>
                                German
                            </option>
                            <option value="{$english}" {if $english == $shop->getId()}selected="selected"{/if}>
                                Englisch
                            </option>
                            <option value="{$spain}" {if $spain == $shop->getId()}selected="selected"{/if}>
                                Spanisch
                            </option>
                        </select>
                    </div>
                    <input type="hidden" name="__redirect" value="1">
                </div>
            </form>
        </div>
    {/block}

     

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

  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

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

    image

    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)

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9290 Received thanks: 2779 Member since: September 2013

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

    Habe das oben schon angepasst.

    Quote
    Accepted Answer
    Thanked by 1solaradmin
  • solaradminsolaradmin MemberComments: 437 Received thanks: 9 Member since: October 2011

    Herzlichen Dank Moritz, für deine Mühen; jetzt klappt alles prima ;-)

  • spielerspieler MemberComments: 32 Received thanks: 1 Member since: January 2015

    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?

Sign In or Register to comment.