Gibt es eine searchProduct function, ähnlich wie searchMedia?

Hallo nochmal,

die Funktion „searchMedia“ ist ja bekannt und man kann mit ihr ein Bild und dessen Kontext über die Id ausgeben. Gibt es eine ähnliche Funktion „searchProduct“ mit der man ggf. ein Produkt und dessen Eigenschaften erhält?
Das Ziel wäre es anschließend Attribute wie den Preis, oder Bilder auszugeben.

Bsp.:
„{% set media = searchMedia([ImageId], context.context) %}“

ca. „{% set product = searchProduct([productId], context.context) %}“

Meine Suche hat hierzu leider nichts ergeben.

Besten Dank!

1 „Gefällt mir“

Genau diese Frage wollte ich gerade auch stellen mit searchCategory([categoryId], context.context)

Hintergrund, wir haben verlinkte Kategorien, die wir in einem Block in einer einzelnen Kategorie darstellen wollen, diese verlinkten Kategorien werden über ein Custom-Field eingetragen…leider bekommen wir nur die IDs der Kategorien raus, aber nicht den Titel / Link

Besten Dank

Eine Twig Funktion gibt es meiner Meinung nach nicht, siehe auch https://developer.shopware.com/docs/resources/references/storefront-reference/twig-function-reference.

Dies könnte man aber nach programmieren, als Beispiel: platform/MediaExtension.php at trunk · shopware/platform · GitHub

Danke @abdullah die Links haben mir sehr weitergeholfen!

@a.hoffmann
ich habe es nun bei uns in das Theme reingebaut und das wären nur wenige Schritte damit es im Theme verwendbar ist.

  1. habe ich eine Datei bei uns im Theme Ordner erstellt. Also
    /custom/plugins/Theme/src/Twig/Extension/CategoryExtension.php

dort habe ich dann folgenden Code reingeschrieben:

<?php

namespace Theme\Twig\Extension;

use Shopware\Core\Content\Category\CategoryCollection;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class CategoryExtension extends AbstractExtension
{

    private EntityRepositoryInterface $entityRepository;

    public function __construct(EntityRepositoryInterface $entityRepository)
    {
        $this->entityRepository = $entityRepository;
    }

    public function getFunctions(): array
    {
        return [
            new TwigFunction('searchCategory', [$this, 'searchCategory'])
        ];
    }

    public function searchCategory(array $ids, Context $context): CategoryCollection
    {
        if(empty($ids)) {
            return new CategoryCollection();
        }
        $criteria = new Criteria($ids);

        return $this->entityRepository->search($criteria, $context)->getEntities();
    }

}

Dann habe ich in der Datei /custom/plugins/Theme/src/Resources/config/services.xml folgendes ergänzt:

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
	<services>

        <service id="Theme\Twig\Extension\CategoryExtension">
            <tag name="twig.extension" />
            <argument type="service" id="category.repository"/>
        </service>

    </services>
</container>

Das war es schon, nun kann ich einfach aus dem Theme heraus an jeder Stelle in einer Twig Datei folgenden Code innerhalb eines Blockes setzen:

{% set linkedCategories = page.header.navigation.active.translated.customFields.custom_category_extension_linked_categories %}
{% if linkedCategories %}
    <ul class="text-center list-unstyled small column-count-2">
        {% set categories = searchCategory(linkedCategories, context.context) %}
        {% for category in categories %}
            <li>
                <a href="{{ seoUrl('frontend.navigation.page', { navigationId: category.id }) }}" class="link d-block p-1">{{ category.translated.name }}</a>
            </li>
        {% endfor %}
    </ul>
{% endif %}

Dies kann man dann auch für Produkte machen…vielleicht hilft dir das ja weiter!

Liebe Grüße

2 „Gefällt mir“