Eigenes Standard Produktlayout lässt sich nicht zuweisen

Die einzelnen Artikel haben alle keinen Wert im Feld cms_page_id zugewiesen.
Ein eigenes Produktlayout wird angelegt und bei den Erlebniswelten als Standard Produktlayout zugewiesen, nennen wir es myProductPage.
Die ID des Layouts myProductPage ist in der DB als core.cms.default_product_cms_page sichtbar.
Jetzt müsste als cms_page_id der Wert aus der DB verwendet werden.

In der Debug-Ausgabe im Frontend wird für die Produktseite kein Pagetype (none) angegeben, egal welches Layout ausgewählt ist. Für die Kategorieseiten steht da product_list.
BEGIN: Debug information
Theme: Plants
Edition: Pro
Version: 2.0.3
CMS page type: none

END: Debug information

Selbst, wenn ich in \Shopware\Core\Defaults::CMS_PRODUCT_DETAIL_PAGE die ID von myProductPage eintrage, wird es nicht verwendet. Obwohl doch, der Wert hier, als Fallback verwendet werden sollte.

In \Shopware\Core\Content\Product\ProductDefinition::CONFIG_KEY_DEFAULT_CMS_PAGE_PRODUCT steht
final public const CONFIG_KEY_DEFAULT_CMS_PAGE_PRODUCT = ‚core.cms.default_product_cms_page‘;
Auch wenn ich hier direkt die ID von myProductPage eintrage, wird das Layout nicht verwendet.

Natürlich sind alle Caches mehrmals geleert worden.

Selbst wenn ich überall die ID des built in Layouts mit der ID des von mir angelegten Layouts (myProductPage) überschreibe, wird es trotzdem nicht verwendet.

Gibt es hier einen Bug, oder einen Deep-Cache in dem das noch gespeichert ist.

Welche Shopware Version nutzt du denn?

Werden die Produktlayouts übernommen, wenn du diese manuell einem Produkt zuweist?

Bekannte Bugs findest du hier: https://issues.shopware.com

Vielen Dank für deine Reaktion!
Gestartet haben wir die Migration mit Version 6.5.2.
Regelmäßig alle Updates gemacht, bis 6.5.4.1. Mit jedem Update hatten wir die Hoffnung, dass sich das Verhalten ändert.
Core, Theme und Plugins sind alle auf der neusten Version.

Das Layout wird übernommen, wenn es manuell einem Produkt zugewiesen wird.

Zwei Sachen fallen hierbei auf.
Im Debug wird nicht beim Standard-Layout (egal welches eingestellt ist) ausgegeben: CMS page type: none
Bei manueller Zuweisung CMS page type: product_detail

Wenn man überall in DB-Config und Defaults die ID des Shopware-Standards durch die eigen Page-ID ersetzt, wird trotzdem der Shopware-Standard verwendet.

Die Bugs habe ich auch schon durchgesehen, aber nichts offenes zum Thema gefunden.

Was mich hier generell mal interessieren würde ist, funktioniert es denn überhaupt ein eigenes Standard-Layout für Produkte zuzuweisen.
Soviel ich weiß, gibt es das Feature ja auch erst seit Version 6.5.

Shopware 6.5 gibt es nun schon ein paar Monate.

Wenn die Funktion bei allen nicht funktionieren würde, ich glaube dann würde hier im Forum definitiv schon Beiträge dazu geschrieben worden sein.

Das Problem trat bei einem Shop auf, der von Version 5.7 auf 6.5 migriert wurde.
Ich habe jetzt noch einmal eine frische Testinstallation mit Version 6.5.5.1 aufgesetzt. Hier zeigt sich das gleiche Verhalten.
Ein eigenes Layout kann nicht als Standard für alle Produkte ausgewählt werden.

Hat denn niemand dieses Problem? Oder weist ihr den Produkten alle individuell Layouts zu?
Wenn das ein genereller Bug ist, kann es doch nicht sein, dass das seit Version 6.5 keinem aufgefallen ist, oder?

Ich kann es derzeit selbst nicht testen… hast du vielleicht ein Layout erstellt, dass kein Kategorie Layout ist?

Probier mal in der Tabelle system_config den Eintrag für configuration_key „core.cms.default_product_cms_page“ anzupassen. Halt auf die UUID des neuen Layouts.

(Klar Cache löschen usw)

herzlichst

Die ID des eigenen Layouts trägt Shopware selbst in „core.cms.default_product_cms_page“ ein, soweit ist das Verhalten von Shopware korrekt. Der Wert wird nur nicht verwendet.
Selbst, wenn ich in \Shopware\Core\Defaults::CMS_PRODUCT_DETAIL_PAGE die ID meines eigenen Layouts eintrage, wird es nicht verwendet.
Das ist ja das Problem, selbst, wenn ich an allen Stellen die ID des Shopware-Defaults auf die ID des eigenen Layouts ändere, wird es nicht verwendet.

Ich habe das „Problem“ gefunden.
in der Datei /vendor/shopware/core/Content/Product/Subscriber/ProductSubscriber.php

steht ab Zeile 94 der Code

private function setDefaultLayout(Entity $product, ?string $salesChannelId = null): void
{
    if (!Feature::isActive('v6.6.0.0') || !$product->has('cmsPageId')) {
       // HIER ist das Problem 
       // return;
    }

    if ($product->get('cmsPageId') !== null) {
        return;
    }

    $cmsPageId = $this->systemConfigService->get(ProductDefinition::CONFIG_KEY_DEFAULT_CMS_PAGE_PRODUCT, $salesChannelId);

    if (!$cmsPageId) {
        return;
    }

    $product->assign(['cmsPageId' => $cmsPageId]);
}

Tatsächlich wird hier auf das Feature v6.6.0.0 abgefragt (Z.96) was sicher nicht gesetzt ist. Wenn man das return auskommentiert (so wie oben im Code), dann läuft das so wie es soll.
Aber das Ganze ist natürlich nicht update-sicher, sprich dafür müsste man ein Plugin bauen und dort dann die Zuordnung machen.
(Kann ich gerne übernehmen, bei Interessen kurze private Nachricht).

Super, vielen Dank!
Das bedeutet ja, ich bin nicht zu blöd, sondern das Feature funktioniert generell nicht. Wundert mich nur, dass es dafür keinen Bug-Eintrag gab. Habe das gestern eingetragen.
Den Hinweis auf V6.6 habe ich noch an anderer Stelle gefunden. Offenbar ist geplant, ab Version 6.6 die cmsPageId anders zu behandeln.
Ich kommentiere das jetzt mal aus und hoffe, dass mit 6.6 funktionieren wird.
Falls nicht, komme ich gerne auf dein Angebot zurück.

müsste dann halt nach jedem Shopware Update wieder gepatcht werden …

Hast du im Issuetracker https://issues.shopware.com ein Ticket für das Problem erstellt?

Ja, habe ich gemacht, mit Bezug auf deine Lösung.

Kannst ja mal voten:

Hi,

das gleich ist auch in der Version 6.4.20.0 drin…

   private function setDefaultLayout(Entity $product, ?string $salesChannelId = null): void
    {
        if (!Feature::isActive('v6.5.0.0') || !$product->has('cmsPageId')) {
            return;
        }

        if ($product->get('cmsPageId') !== null) {
            return;
        }

        $cmsPageId = $this->systemConfigService->get(ProductDefinition::CONFIG_KEY_DEFAULT_CMS_PAGE_PRODUCT, $salesChannelId);

        if (!$cmsPageId) {
            return;
        }

        $product->assign(['cmsPageId' => $cmsPageId]);
    }

Das Ticket wurde von Shopware ohne Kommentar geschlossen.
Offenbar ist man nicht daran interessiert, dass Standardlayouts ausgewählt werden können. Obwohl es dieses Feature gibt.
Seltsam!

Wir haben ein kleines Plugin auf GitHub veröffentlicht, mit dem das Standard Produktlayout geändert werden kann - Link zu GitHub ist in folgendem Thread: