【问题标题】:How to strip HTML from a field in drupal views如何从 drupal 视图中的字段中删除 HTML
【发布时间】: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]

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

谢谢,

【问题讨论】:

    标签: sql-server drupal views


    【解决方案1】:

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

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

    • 该函数是用户定义的函数,这意味着它需要在低得多的级别(在 SQL 数据库中)进行定义才能在查询中使用它 em>。
    • 然而,这是一种红鲱鱼方法,因为您甚至不需要接触 SQL 即可完成您想要的操作(您可以通过strip_tags 使用 PHP 来做到这一点!)
    • 这里不需要查询更改钩子(我们不需要转到数据库来执行此操作)。您可以使用我之前观点中链接的函数,使用field APIviews 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',);
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多