Вы здесь

Как получить NID в наследнике класса DsFieldBase?

0

Есть модуль, который реализует кастомные поля для Display Suite в нодах (в тизерах).

Мне нужно узнать текущий Node ID, когда данный модуль рендерит поле для тизера каждой ноды.
Но не знаю каким образом это можно сделать. Нужно вызывать какой-то хук, или прописывать дополнительный неймспейс в файле этого модуля?

пытался использовать
$node = \Drupal::routeMatch()->getParameter('node');
но конечно это не помогло, т.к. тут предполагается что мы находимся на странице ноды, а в нашем случае мы рендерим поле для тизеров находясь на странице представления.

То есть для каждого тизера нужен свой NID, и для каждого кастомного поля в тизере будет свои данные (галерея), вычисленные на основе NID

Если-бы мы находились в шаблоне ноды - то никаких проблем с тем чтобы узнать ее NID не возникло-бы; но так как теперь в шаблонах Twig, такой возможности как-бы нет.

Как внутри класса DsFieldBase получить доступ к текущей ноде и ее свойствам?

Мой модуль:
\modules\custom\ds_custom_fields\src\Plugin\DsField\TeaserGallery.php

<?php

namespace Drupal\ds_custom_fields\Plugin\DsField;
use Drupal\ds\Plugin\DsField\DsFieldBase;
use Drupal\Component\Render\FormattableMarkup;

/**
 * 
 * @DsField(
 *   id = "ds_node_type",
 *   title = @Translation("Teaser Gallery"),
 *   provider = "ds_custom_fields",
 *   entity_type = "node",
 *   ui_limit = {"build|full", "build|teaser"}
 * )
 */
class TeaserGallery extends DsFieldBase {

    public function build() {

            // не работает
            // $node

        // не работает
        // $node = \Drupal::routeMatch()->getParameter('node');

        return [
            '#type' => 'markup',
            '#markup' => 'my custom field content'
        ];

    }
}

UPD.
Вот тут прочитал, может можно передать аргументами в функцию как здесь?
https://drupal.stackexchange.com/questions/229780/get-current-node-id-fr...

Попробовал вот так:

public function build($node) {

но получил ошибку

Fatal error: Declaration of Drupal\ds_custom_fields\Plugin\DsField\TeaserGallery::build($node) must be compatible with Drupal\ds\Plugin\DsField\DsFieldInterface::build() in \modules\custom\ds_custom_fields\src\Plugin\DsField\TeaserGallery.php on line 18

в итоге не понял как получить доступ к переменной $node внутри функции в данном классе

Версия Drupal: 
8.x
Связанные проекты: 
Display Suite
Вопрос задан 12.09.2017 - 23:36

спасибо, работает!)))
надо было в виде ответа писать ну ладно xD

написал так:

$this->entity()->id();
Комментарий оставлен 13.09.2017 - 07:09

Ответы