На даний момент я намагаюся реалізувати поле зображень, на яке посилається вузол, на моєму сайті Drupal 7, яке змінить його "режим перегляду" в залежності від програмної логіки безпосередньо перед візуалізацією. Наразі це поле рендерується для кількох типів вмісту через їх налаштування режиму відображення, кожен з яких використовує форматник поля "Наданий вузол".
перша спроба
Моя перша ідея полягала в тому, щоб реалізувати наступне, вважаючи, що гак - це гак - це гачок:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
Очевидно, міняючи HOOK на ім'я мого модуля.
Це на самому ділі не має значення , якщо вище стрілятиме до або після вихідної функції node_reference_field_formatter_view
в node_reference.module
тому , що я або перевизначити його висновок повністю або, сподіваюся, змінити його значення перед візуалізацією. Єдина проблема полягає в тому, що вищезазначений гак, здається, функціонує лише на основі кожного модуля, тобто він не є загальномісцевим, тому в основному він не працює для мого модуля.
Тепер, очевидно, я можу написати власний форматник поля для виведення виведеного вузла. Але це, здається, трохи марно, враховуючи, що вже є такий, який існує.
інші підходи
Мої інші підходи були до HOOK_preprocess_node
і , HOOK_preprocess_field
але перший не містить будь - яких view_mode
інформації, а друга містить , щонайменше , 5 різних складних структур , які все мають посилання на view_mode
власність на різних рівнях - і він відчуває себе досить Hacky , щоб змінити у кожного з них значення. Навіть коли я змінив певні view_mode
властивості, отримане зображення не змінюється.
питання
Хтось знає про чистий спосіб вступити до того, як формувач поля виведе (модуля вкладки) та змінить його налаштування на основі запиту на сторінку - тобто не потрібно змінювати фактичні параметри постійного режиму перегляду типу вмісту?
view_mode
на hook_preprocess_node
, нерозумно мене! Цікаво, чи є щось подібне hook_field_formatter_view_alter()
в D8 ...
hook_field_formatter_view_alter()
подібне або, мабуть, вже більше року, він, на жаль, не існує. FYI,hook_preprocess_node()
безумовно, має в своємуview_mode
розпорядженні це, але це$vars['view_mode']
не те,$vars['node']->view_mode
що ви могли б спробувати спробувати.