Sylius: Как ввести переменную данных своей записи в сетке рендеринга - PullRequest
0 голосов
/ 07 января 2020

Я хочу добавить что-то к отображению канала сетки заказов в представлении администратора в зависимости от некоторых продуктов в этом заказе. Мне понадобится способ вставить данные записи в шаблон веточки в примере.

Не могу понять это. Сетка выглядит так:

sylius_grid:
    grids:
        sylius_admin_order:
            driver:
                name: doctrine/orm
                options:
                    class: "%sylius.model.order.class%"
                    repository:
                        method: createListQueryBuilder
            sorting:
                number: desc
            fields:
                ...
                channel:
                    type: twig
                    label: sylius.ui.channel
                    sortable: channel.code
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"

Я вижу, что в других столбцах они добавляют переменные: в параметрах: в примере, например:

                    options:
                        template: ...
                        vars: 
                            labels: "@SyliusAdmin/Order/Label/State"

, но как это сделать с собой, Я имею в виду с остальными данными из записи? Мне нужно что-то вроде этого:

                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                        vars: 
                            order: self

Кто-нибудь знает способ сделать это?

1 Ответ

1 голос
/ 08 января 2020

Короче говоря, вы должны создать новый шаблон и указать его путь в параметрах поля сетки -> шаблон. Затем получите переменную {{ options.vars.order }} в этом шаблоне.

Как это работает:

Sylius-Grid передает переменную options в шаблон при рендеринге. Например, как выглядит стандартный label параметр:

Определение сетки в @ SyliusAdmin / config / grids / order.yml:

...
                paymentState:
                    type: twig
                    label: sylius.ui.payment_state
                    sortable: ~
                    options:
                        template: "@SyliusUi/Grid/Field/state.html.twig"
                        vars:
                            labels: 
...

@SyliusUi/Grid/Field/label.html .twig:

{% set value = 'sylius.ui.' ~ data %}

{% if options.vars.labels is defined %}
    {% include [(options.vars.labels ~ '/' ~ data ~ '.html.twig'), '@SyliusUi/Label/_default.html.twig'] with {'value': value} %}
{% else %}
    {% include '@SyliusUi/Label/_default.html.twig' with {'value': value} %}
{% endif %}

В этом примере переданная переменная labels, переданная в определении Gam Yaml, доступна в переменной Twig options.vars.labels.

EDIT : если вы хотите получить доступ к другим атрибутам объекта-сущности в шаблоне, а не только к channels, как в этом примере, добавьте это в определение поля сетки root:

                channel:
                    type: twig
                    label: sylius.ui.channel
                    path: .

, возможно, вам потребуется refre sh Кеш ветки с php bin/console cache:clear. Узнайте больше об этом в https://docs.sylius.com/en/1.6/components_and_bundles/bundles/SyliusGridBundle/field_types.html#twig -twig

...