如何从 drupal 视图中的字段中删除 HTML

Posted

技术标签:

【中文标题】如何从 drupal 视图中的字段中删除 HTML【英文标题】:How to strip HTML from a field in drupal views 【发布时间】:2016-08-29 20:40:06 【问题描述】:

我正在尝试添加一个函数来从 drupal 视图中的字段中删除 html。我为 sql server 找到了一个名为“udf_StripHTML”的函数。

http://blog.sqlauthority.com/2007/06/16/sql-server-udf-user-defined-function-to-strip-html-parse-html-no-regular-expression/

我正在使用以下代码:

/**
 * Implements hook_views_query_alter().
 */
function cviews_views_query_alter(&$view, &$query) 
    // Add a strip html tags from content.
    $fields = array('field_data_body.body_value');

    foreach ($query->where as $key1 => $value) 
        foreach ($value['conditions'] as $key2 => $coditions) 
          if (in_array($coditions['field'], $fields)) 
            $query->where[$key1]['conditions'][$key2]['field'] = 'dbo.udf_StripHTML(' . $coditions['field'] . ')';
      
    
  

当视图模块将查询对象转换为字符串时,该字段变为 从: 'dbo.udf_StripHTML(field_data_body.body_value)';

到: [dbo].[udf_StripHTMLfield_data_body.body_value]

我的问题是,我怎样才能在那里添加一个函数?

谢谢,

【问题讨论】:

【参考方案1】:

朋友,你在这里走得太深了。我将假设您使用的是 Drupal 7,但对于 Drupal 8,这应该是相似的(因为视图是两者的核心)。

关于您的方法的几点说明:

该函数是用户定义的函数,这意味着它需要在低得多的级别(在 SQL 数据库中)进行定义才能在查询中使用它 em>。 然而,这是一种红鲱鱼方法,因为您甚至不需要接触 SQL 即可完成您想要的操作(您可以通过strip_tags 使用 php 来做到这一点!) 这里不需要查询更改钩子(我们不需要转到数据库来执行此操作)。您可以使用我之前观点中链接的函数,使用field API 或views API 中的预处理或字段挂钩之一来完成此操作。 更好的是,您甚至不必触摸代码即可完成此操作。您可以直接在 Drupal UI 中完成

在视图的字段设置下,选择rewrite results,然后选择Strip HTML tags。 Presto,该字段中不再有 HTML 标记。

图片来源:https://www.drupal.org/node/750172

【讨论】:

感谢您的回答。我找到了解决我的问题的方法。选中“去除 HTML 标签”选项将从字段中去除 html 标签,我需要在过滤器上执行此操作。所以我注意到,如果我使用运算符“公式”,我可以得到我想要的。这是代码: $query->where[$key1]['conditions'][$key2]['field'] = 'dbo.udf_StripHTML(' . $coditions['field'] . ')'; $query->where[$key1]['conditions'][$key2]['operator'] ='formula'; $query->where[$key1]['conditions'][$key2]['value'] = array(); 好的。如果不查看实际代码,我只是不确定。在我看来,这在根本不触及 SQL 查询的情况下是可行的(见我的第三点)。过滤器也可以在 php 中调整,而无需触及 SQL(Google Drupal 中的过滤器组暴露的过滤器 Drupal)。无论哪种方式,给猫剥皮的方法不止一种,如果它有效,它就有效;)如果您觉得我的回答有帮助,请将其标记为已接受。 See why accepting an answer is important.【参考方案2】:

这是对我有用的解决方案:

// Traverse through the 'where' part of the query.
foreach ($query->where as &$condition_group) 
   foreach ($condition_group['conditions'] as &$condition) 

      if (in_array($condition['field'], $fields)) 
         $value = $condition['value'];
         $field = $condition['field'];

         $condition = array(
           'value' => array(),
           'field' => t('dbo.udf_StripHTML(!field) like \'@value\'', array(
           '!field' => $field,
           '@value' => $value)),
           'operator' => 'formula',);
      
   

【讨论】:

以上是关于如何从 drupal 视图中的字段中删除 HTML的主要内容,如果未能解决你的问题,请参考以下文章

如何从drupal 6中的视图中删除节点

drupal 7删除样式标签形式rss视图字段

如何在 Drupal 的视图中设置内联字段?

如何使用 drupal 6 中的自定义字段将自定义版本的节点/添加表单放在视图中?

将货币字符串转换为数字 Drupal Views / PHP

在视图中删除具有 drupal 重复日期的重复项