在Drupal模块中将节点标题添加到节点标题,而不是在主题图层中

时间:2010-11-23 00:04:20

标签: drupal drupal-6 drupal-modules

我想为Drupal 6模块添加一些功能:我想在某些节点标题旁边插入一个图像(它涉及一个span和一个img标签)。我以为我可以通过实现mymodule_preprocess_node()并修改标题来做到这一点。但是,Drupal剥离所有标签以避免XSS攻击。

我见过许多涉及主题图层的解决方案(最常见的是http://drupal.org/node/28537),但我想在我的模块中执行此操作,而不是在主题中执行此操作。我不想修改任何.tpl.php文件或template.php。谁能给我提示如何做到这一点?

3 个答案:

答案 0 :(得分:2)

你提到你已经尝试过preprocess_node(),并且正确的是,如果你将img标签存储为节点标题的一部分,Drupal确实会将其删除,因为它运行$ node-> title through template_preprocess_node()中的check_plain。

我的建议是将实际图像存储为图像字段(使用imagefield模块和imagecache的某种组合进行大小调整),将该字段的显示设置为隐藏在CCK上显示给定内容类型的选项卡,然后将图像作为模块预处理函数中$ title变量的一部分附加。此解决方案还允许您在可能需要创建的任何视图中在标题旁边显示该图像。

答案 1 :(得分:0)

通过“某些节点标题” - 您是指来自某些节点类型的所有节点标题吗?

如果是这样,您可以仅使用CSS设置节点样式。默认情况下,所有节点都将具有与节点类型对应的类。使用CSS背景图像,您可以将图像添加到节点标题。

您的模块可以调用drupal_add_css并在页面中添加任何所需的CSS。这样,它就是主题独立的。

答案 2 :(得分:0)

我认为更简单的方法是使用javascript / Jquery。 您创建一个Jquery脚本,该脚本仅在某些类型的节点中调用,并将视图的数量从drupal传递给jscript。

您可以在module_preprocess_node中调用drupal_add_js(),并将包含视图数量或图像链接的变量传递给脚本。像这样:

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

然后在my_js_file.js中更改文本。有几种方法可以实现这一点。例如,您可以在文档中搜索并将标题更改为其他内容,或者您​​可以使用确定的ID等...

Find text string using jQuery?

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

相关问题