Програмное добавление HTML в View

Аватар пользователя Alextr Alextr 13 октября в 21:53

Здравствуйте, хочу добавить программно некий скрипт в View. Делаю с помощью хука views_pre_render,

<?php foreach($view->result as $value){
   
$value->_entity->set('field_action''<div>22222 </div>');
    } 
?>

Все прекрасно добавляет но как текст, а мне нужно чтоб было HTML разметка.
Подскажите как добавить.

0 Thanks

Комментарии

Аватар пользователя Alextr Alextr 13 октября в 22:46

Что то похожее можно сделать из админки в представлениях - перезаписать результат. Но обратно же  <script> </script> - удаляет.
Кто то может подсказать?

Аватар пользователя Alextr Alextr 14 октября в 11:50

Спасибо, кто ответил. Это немного не то, это подключение внешних библиотек, скриптов. А я бы хотел просто внедрить типа  <input type="button" value="Проверить" onclick="isEmail()"> - а оно в первом варианте берется как текст, а во втором вырезает onclick
Мне бы желательно фильтрацию эту обойти - может есть какой нибудь модуль.

Аватар пользователя ivnish ivnish 14 октября в 11:48

Вы лучше напишите какую задачу вы пытаетесь решить. Так больше шансов, что вам подскажут верное и правильное решение

Аватар пользователя Alextr Alextr 14 октября в 11:54

Я хочу внедрить в Views кнопки против каждой ноды, чтобы при нажатии срабатывал скрипт. В теории можно привязаться jquery к событию onclick, но там нада еще nid как то вытянуть тогда.

Аватар пользователя Alextr Alextr 14 октября в 12:06

кнопки быстрого управления - удалить, скрыть, поднять, выделить (это доска объявлений). Прикидывал jQuery можно использовать - но повторюсь, как тогда определить nid. В тех вариантах можно бы было сделать так - onclick="delete({{ nid }})".
Разве что прописать class="button_delete ndd_{{ nid }}" - а потом расшифровывать класс

Аватар пользователя ivnish ivnish 14 октября в 12:05
1

nid можете вывести в виде data-параметра для ссылки (это можно сделать используя "перезапись поля" во views)

Аватар пользователя Alextr Alextr 14 октября в 12:14

это я понимаю, но как мне кажется этот вариант немного неправильный, хотя по идее рабочий. Думал может кто подскажет как обойти фильтры в -перезапись поля или в $value->_entity->set.

Аватар пользователя marassa marassa 14 октября в 12:36
Alextr wrote:

кнопки быстрого управления - удалить, скрыть, поднять, выделить

Я бы для этого задействовал уже имеющуюся функциональность Views - Operations Links. Как минимум "удалить" будет работать уже из коробки, остальные можно добавить программно. Вот пример (один из): https://mushtaq.ch/blog/8/drupal-8-override-content-operations-links

Аватар пользователя Alextr Alextr 14 октября в 16:12

Эта веб-страница находится в списке веб-сайтов с потенциально опасным содержимым.

Аватар пользователя marassa marassa 14 октября в 16:27
Alextr wrote:

Эта веб-страница находится в списке веб-сайтов с потенциально опасным содержимым.

Странно. Ну тогда прямо в документацию дорога: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21...
Вы, похоже, не понимаете, что в данном случае вставка скрипта на страницу - не половина и даже не четверть дела. Никакой javascript не сможет "удалить, скрыть, поднять, выделить" ноду на сервере - для этого нужно писать обработчики/контроллеры на PHP. А весь необходимый клиентский код уже давно написан разработчиками Views - нужно только уметь им воспользоваться.

Аватар пользователя Alextr Alextr 14 октября в 20:32

За ссылку спасибо. Я понимаю что javascript сам не сможет, - я планирую Ajax - а через него php.

Аватар пользователя bumble bumble 14 октября в 13:15
1

В Друпал не принято так просто "обходить фильтрацию".

В Вашем случае, нужно думать о создании кнопок / ссылок которые будут осуществлять необходимые действия программно, и уже потом думать как улучшить их работу на клиенте.

Делайте правильно, и тогда будете чувствовать гибкость и отзывчивость системы, а не ее сопротивление.

Аватар пользователя Alextr Alextr 14 октября в 16:11

Ну и в какую сторону смотреть, чтобы сделать кнопки программно. Через хук не получается - тоже фильтрует.

Аватар пользователя Alextr Alextr 14 октября в 20:36

jQuery событие onclick не всегда привязывается.  window.onload = function() {} выполняется до загрузки всего контента.