Einkaufswelt unter Kategorielisting

Hallo Leute,

ich hab mich in das Thema schon gut eingelesen und bin schon relativ weit gekommen, hänge jetzt aber an… ich weiß nicht mal an was! Meiner Ansicht nach müsste das eigentlich funktionieren.

Mein Plan: über Freitext Feld auswählen ob eine Einkafswelt über oder unter dem Listing angezeigt wird.

Schritte:

  • Freitextfeld Anlegen ---- erledigt (bei mir „under_listing“)
  • Freitextfeld im Listing auslesbar machen ---- erledigt (mit kleinem Plugin)
  • Templatedatei listing/listing.tpl anpassen ---- fail

hier mein aktueller Code:

{extends file='parent:frontend/listing/listing.tpl'}

{block name="frontend_listing_emotions"}
	{if $hasEmotion}
        {$fullscreen = false}

        {block name="frontend_listing_emotions"}
            

                {foreach $emotions as $emotion}
                    {if $emotion.attributes.under_listing == 0 || empty($emotion.attributes.under_listing) || $emotion.attributes.under_listing == ""}
						{if $emotion.fullscreen == 1}
							{$fullscreen = true}
						{/if}
						
						
						
					{/if}
                {/foreach}

                {block name="frontend_listing_list_promotion_link_show_listing"}

                    {$showListingCls = "emotion--show-listing"}

                    {foreach $showListingDevices as $device}
                        {$showListingCls = "{$showListingCls} hidden--{$emotionViewports[$device]}"}
                    {/foreach}

                    {if $showListingButton}
                        
                            
                                {s name="ListingActionsOffersLink"}Weitere Artikel in dieser Kategorie »{/s}
                            
                        
                    {/if}
                {/block}
            
        {/block}
    {/if}
{/block}

{* Listing wrapper *}
{block name="frontend_listing_listing_wrapper"}
    {$smarty.block.parent}
{/block}

{* Emotion worlds under Listing *}
{block name="frontend_listing_list_promotion_unten"}
	{if $hasEmotion}

        {block name="frontend_listing_emotions_unten"}
            

                {foreach $emotions as $emotion}
                    {if $emotion.attributes.under_listing == 1}
						
						
						
					{/if}
                {/foreach}
            
        {/block}
    {/if}
{/block}

 

Ich hab das ganze in einer Staging Umgebung getestet und bekomme als Resultat eine weiße Seite mit 

Service Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Einen Fehler kann ich jetzt nicht feststellen, beim herumprobieren habe ich es auch geschaft, dass alle Einkaufswelten sowohl oben als auch unter dem Listing angezeigt wurden. Jedoch will ich ja über das Freitextfeld bestimmen wo die Einkaufswelt plaziert wird und nicht alles einfach doppelt drin haben.

Hat jemand Erfahrung damit und kann mir weiter helfen? 

Hallo,

siehe beispielsweise hier: https://forum.shopware.com/discussion/67319/einkaufswelt-unter-dem-listing-ausgeben-via-freitextfeld (über die Forumssuche). Kurzum: an deiner Stelle stehen gar nicht die Einkaufswelten - Freitextfelder zur Verfügung, du müsstest sie dir also erst einmal verfügbar machen, beispielsweise über ein eigenes Smarty - Plugin oder ähnliches. Oder wie und wo hast du die Einkaufswelten - Freitextfelder im Listing auslesbar gemacht?

Grüße

Sebastian

@sschreier schrieb:

Hallo,

siehe beispielsweise hier: https://forum.shopware.com/discussion/67319/einkaufswelt-unter-dem-listing-ausgeben-via-freitextfeld (über die Forumssuche). Kurzum: an deiner Stelle stehen gar nicht die Einkaufswelten - Freitextfelder zur Verfügung, du müsstest sie dir also erst einmal verfügbar machen, beispielsweise über ein eigenes Smarty - Plugin oder ähnliches. Oder wie und wo hast du die Einkaufswelten - Freitextfelder im Listing auslesbar gemacht?

Grüße

Sebastian

Ja wie ich es geschreiben habe, das hab ich schon erledigt und den Forum Eintrag habe ich gelesen und befolgt. 

Allerdings funktioniert das leider so nicht bei mir und ich finde den Grund nicht.

 

Hallo,

wie hast du denn die Einkaufswelten - Freitextfelder an dieser Stelle verfügbar gemacht? Ohne diese Information, ob dies nicht sogar der Fehler ist, kann dir auch keiner weiterhelfen. Kommt der Fehler denn auch, wenn du $emotion.attributes.under_listing aus der Templatedatei wieder rausnimmst?

Nur durch den Aufruf “{$emotion.attributes.under_listing}” machst du die Einkaufswelten - Freitextfelder ja nicht verfügbar sondern fragst nur einen Wert ab, der niemals ein Ergebnis liefern wird, da {$emotion.attributes} an dieser Stelle im Standard von Shopware überhaupt nicht verfügbar ist.

Bei deiner weißen Seite dürfte aber trotzdem auch ein Logeintrag erstellt werden, wo die entsprechende Fehlermeldung stehen dürfte.

Grüße

Sebastian

@sschreier schrieb:

Hallo,

wie hast du denn die Einkaufswelten - Freitextfelder an dieser Stelle verfügbar gemacht? Ohne diese Information, ob dies nicht sogar der Fehler ist, kann dir auch keiner weiterhelfen. Kommt der Fehler denn auch, wenn du $emotion.attributes.under_listing aus der Templatedatei wieder rausnimmst?

Nur durch den Aufruf „{$emotion.attributes.under_listing}“ machst du die Einkaufswelten - Freitextfelder ja nicht verfügbar sondern fragst nur einen Wert ab, der niemals ein Ergebnis liefern wird, da {$emotion.attributes} an dieser Stelle im Standard von Shopware überhaupt nicht verfügbar ist.

Bei deiner weißen Seite dürfte aber trotzdem auch ein Logeintrag erstellt werden, wo die entsprechende Fehlermeldung stehen dürfte.

Grüße

Sebastian

so hier der Code vom Plugin 

scheduleClearCache(ActivateContext::CACHE_LIST_DEFAULT);
    }
    public function deactivate(DeactivateContext $context)
    {
        $context->scheduleClearCache(DeactivateContext::CACHE_LIST_DEFAULT);
    }
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing' => 'onFrontendListing'
        ];
    }
    public function onFrontendListing(\Enlight_Event_EventArgs $args)
    {
        /** @var \Enlight_Controller_Action $controller */
        $controller = $args->get('subject');
        $view = $controller->View();

        $emotions = $view->getAssign('emotions');


        $service = $this->container->get('shopware_attribute.data_loader');

        $i = 0;
        foreach ($emotions as $emotion)
        {
            $attributes['attributes'] = $service->load('s_emotion_attributes', $emotion['id']);
            $emotions[$i] = $emotions[$i] + $attributes;
            $i++;
        }

        $view->assign('emotions', $emotions);
    }
}

 

Die if-Abfrage hab ich jetzt noch nicht im einzelnen raus genommen, kann ich gleich mal probieren

 

EDIT:

also ich hab die if-abfragen auskommentiert und komme zum gleichen Ergebnis wie vorher, weiße Seite. auch komplett raus löschen bringt das selbe Ergebnis.

OMG okay hab es hin bekommen! ein Kollege hat den fehler gefunden… hatte einen Block Namen Doppelt drinne xD

hab noch etwas getüftelt und jetzt funktioniert es mit dem Code (falls jemand das auch mal machen möchte)

{extends file='parent:frontend/listing/listing.tpl'}

{block name="frontend_listing_list_promotion"}
	{if $hasEmotion}
        {$fullscreen = false}

        {block name="frontend_listing_emotions"}
            

                {foreach $emotions as $emotion}
                    {if $emotion.attributes.under_listing == 0 || empty($emotion.attributes.under_listing) || $emotion.attributes.under_listing == ""}
						{if $emotion.fullscreen == 1}
							{$fullscreen = true}
						{/if}
						
						
						
					{/if}
                {/foreach}

                {block name="frontend_listing_list_promotion_link_show_listing"}

                    {$showListingCls = "emotion--show-listing"}

                    {foreach $showListingDevices as $device}
                        {$showListingCls = "{$showListingCls} hidden--{$emotionViewports[$device]}"}
                    {/foreach}

                    {if $showListingButton}
                        
                            
                                {s name="ListingActionsOffersLink"}Weitere Artikel in dieser Kategorie »{/s}
                            
                        
                    {/if}
                {/block}
            
        {/block}
    {/if}
{/block}

{block name="frontend_listing_listing_wrapper" append}
{* Emotion worlds under Listing *}
{block name="frontend_listing_list_promotion_unten"}
	{if $hasEmotion}
        {$fullscreen = false}

        {block name="frontend_listing_emotions_unten"}
            

                {foreach $emotions as $emotion}
                    {if $emotion.attributes.under_listing == 1}
						{if $emotion.fullscreen == 1}
							{$fullscreen = true}
						{/if}
						
						
						
					{/if}
                {/foreach}

                {block name="frontend_listing_list_promotion_link_show_listing_unten"}

                    {$showListingCls = "emotion--show-listing"}

                    {foreach $showListingDevices as $device}
                        {$showListingCls = "{$showListingCls} hidden--{$emotionViewports[$device]}"}
                    {/foreach}

                    {if $showListingButton}
                        
                            
                                {s name="ListingActionsOffersLink"}Weitere Artikel in dieser Kategorie »{/s}
                            
                        
                    {/if}
                {/block}
            
        {/block}
    {/if}
{/block}
{/block}

 

Hallo,

als Hinweis, wenn den Code wirklich mal jemand verwenden möchte: append und prepend darf bzw. soll man schon seit Jahren nicht mehr nehmen / verwenden sondern stattdessen {$smarty.block.parent} (da oben append verwendet wird) .

Grüße

Sebastian

@sschreier schrieb:

Hallo,

als Hinweis, wenn den Code wirklich mal jemand verwenden möchte: append ubd prepend darf bzw. soll man schon seit Jahren nicht mehr nehmen sondern stattdessen {$smarty.block.parent} .

Grüße

Sebastian

ja das habe ich auch probiert und das hat nicht funktioniert. vll krigt es ja jemand damit hin, würde mich interessieren. 

Hallo,

mit {$smarty.block.parent} funktioniert es zu 100%. Dein Code sollte so wie erwähnt nicht (mehr) verwendet werden, ist also ein schlechtes Beispiel.

Im Prinzip entfernt man einfach den Begriff append und setzt gleich am Anfang des Blocks {$smarty.block.parent} - fertig. Das funktioniert so 100%ig.

Grüße

Sebastian