Добавьте HTML к заголовку узла в модуле Drupal, а не в слое темы - PullRequest
1 голос
/ 23 ноября 2010

Я хочу добавить некоторые функциональные возможности в мой модуль Drupal 6: я хочу вставить изображение рядом с определенными заголовками узлов (оно включает в себя span и тег img). Я думал, что смогу сделать это, просто реализовав mymodule_preprocess_node () и изменив заголовок. Однако Drupal удаляет все теги, чтобы избежать атак XSS.

Я видел много решений, которые включают слой темы (чаще всего http://drupal.org/node/28537),, но я хочу сделать это в моем модуле, а не в теме. Я не хочу изменять любой .tpl.php файлы или template.php. Кто-нибудь может дать мне советы, как это сделать?

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Вы упоминаете, что вы пробовали preprocess_node (), и вы правы, что, если вы сохраняете тег img как часть заголовка узла, Drupal действительно удалит это, поскольку он запускает $ node-> title через check_plain в template_preprocess_node () .

Я бы предложил сохранить фактическое изображение в виде поля изображения (используя некоторую комбинацию модуля imagefield и imagecache для определения размера), установить отображение этого поля равным скрытый на вкладке отображения CCK для данного типа контента, а затем прикрепите изображение, чтобы быть частью переменной $ title в функции предварительной обработки вашего модуля. Это решение также позволит вам отображать это изображение рядом с заголовком в любых видах, которые вам могут понадобиться.

0 голосов
/ 01 июня 2011

Я думаю, что проще с Javascript / Jquery.Вы создаете сценарий Jquery, который вызывается только в определенных типах узлов и передаете количество представлений из drupal в jscript.

Вы можете вызвать drupal_add_js () внутри вашего module_preprocess_node и передать переменную, которая содержит числопросмотры или ссылки на изображения к сценарию.Примерно так:

<?php
drupal_add_js("var mymodule_imagelink = " . drupal_to_js($imagelink) . ";", 'inline');
drupal_add_js("my_js_file.js");
?>

тогда в my_js_file.js просто измените текст.Есть несколько способов сделать это.Например, вы можете выполнить поиск в документе и изменить заголовок на что-то другое, или вы можете использовать определенный идентификатор и т. Д. *

Найти текстовую строку с помощью jQuery?

http://api.jquery.com/replaceWith/

0 голосов
/ 23 ноября 2010

Под «определенными заголовками узлов» - вы подразумеваете названия всех узлов из определенных типов узлов?

Если это так, вы можете стилизовать узел, используя только CSS. По умолчанию все узлы будут иметь класс, соответствующий типу узла. Используя фоновые изображения CSS, вы можете добавить изображение к заголовку узла.

Ваш модуль может вызвать drupal_add_css и добавить любой необходимый CSS на страницу. Таким образом, тема не зависит от темы.

...