视图从输出中剥离标记

时间:2010-08-21 18:50:40

标签: drupal content-management-system tags drupal-views

我有一个Drupal视图,应该使用flash输出视频播放器。我正在尝试输出一个可以调用flash影片的脚本。问题是,Views应用了某种过滤器来剥离我的<script>标签,即开始和结束标签。我正在寻找一个解决方案(视图中的一些设置将禁用该过滤器),但似乎无法找到答案。其他HTML标签可以工作,但似乎脚本标签被剥离,可能出于某些安全原因。

我选择了重写字段输出的选项,我正确使用了标签

视图还会从我的标签中删除样式属性。例如:

<h3 style="border-bottom: solid 1px #ffcc99;">Some text here</h3>

看起来像这样:

<h3>Some text here</h3>

有解决方案吗?谢谢。


开始编辑


我粘贴在我正在使用的代码下面。

<div class="bloco-filme">
  [title]
  <div class="field-imagem">
    [field_imagem_fid]

    <script type='text/javascript' src='sites/default/files/js/swfobject.js'></script>

    <div id='mediaspace[nid]'>Se você estiver visualizando esta mensagem, significa o Flash Player não está instalado em sua máquina. Para assistir ao vídeo é preciso instalar o Flash player</div>

    <script type='text/javascript'>
      var so = new SWFObject('sites/default/files/plugins/jqplayer/player.swf','mpl','205','undefined','9');
      so.addParam('allowfullscreen','true');
      so.addParam('allowscriptaccess','always');
      so.addParam('wmode','transparent');
      so.addVariable('file','[field_video_fid]');
      so.addVariable('quality','false');
      so.write('mediaspace[nid]');
    </script>
    [field_video_fid]
  </div>
  <div class="field-resumo">
    <p>[body]</p>
  </div>
</div>

再次编辑


上面的代码已经发布在我的视图中。我创建了一个视图来处理这个问题。这是我观点的FIELDS区域:

字段 节点:Nid 节点:Título(标题,它是在pt-br) 节点:链接“editar”(编辑) 节点:链接“apagar”(删除) Conteúdo:Imagem缩略图 Conteúdo:视频URL做arquivo(视频文件URL) 节点:Corpo(Body)

我已禁用上面所有字段的显示,并已在Body字段中打包所有代码。在那里,我选择了我想要重写字段输出的选项。

3 个答案:

答案 0 :(得分:5)

kiamlaluno确定了基本问题,但要解决它,您将不得不使用一个字段模板,这将避免使用视图使用的过滤系统。 Group 42 has a great guide向您介绍了视图主题的基础知识,因此我将简单介绍这些细节,并讨论您的具体案例。

首先,您需要确定要重写的字段:我相信您正在使用字段配置执行此操作,但不清楚您要重写哪个字段。我将假设它是身体领域。浏览Group 42的指南,为主题中的body字段创建一个新的模板文件。

在新模板文件中,使用以下代码:

<div class="bloco-filme">
  <?php print $view->field['title']->render($row) ?>
  <div class="field-imagem">
    <?php print $view->field['field_imagem_fid']->render($row) ?>

    <script type='text/javascript' src='sites/default/files/js/swfobject.js'></script>

    <div id="mediaspace<?php print $view->field['nid']->render($row) ?>">Se você estiver visualizando esta mensagem, significa o Flash Player não está instalado em sua máquina. Para assistir ao vídeo é preciso instalar o Flash player</div>

    <script type='text/javascript'>
      var so = new SWFObject('sites/default/files/plugins/jqplayer/player.swf','mpl','205','undefined','9');
      so.addParam('allowfullscreen','true');
      so.addParam('allowscriptaccess','always');
      so.addParam('wmode','transparent');
      so.addVariable('file','<?php print $view->field["field_video_fid"]->render($row) ?>');
      so.addVariable('quality','false');
      so.write('mediaspace<?php print $view->field["nid"]->render($row) ?>');
    </script>
    <?php print $view->field['field_video_fid']->render($row) ?>
  </div>
  <div class="field-resumo">
    <p><?php print $output ?></p>
  </div>
</div>

保存新模板文件,现在正文字段将替换为正确的输出。在编辑视图时,只需确保模板中引用的所有字段都位于字段列表中的正文字段之前。

你可以看到这主要是带有几个PHP位的HTML。像这样的代码:

<?php print $view->field['title']->render($row) ?> 

输出当前字段以外的字段的内容(即,当您要引用Body以外的字段时,请使用此代码)。它引用同一行并找到该字段的值。

这样的代码:

<?php print $output ?> 

输出当前字段的值,在本例中为Body。

答案 1 :(得分:2)

我不认为该观点导致了这个问题。 kiamlaluno是完全正确的,输入格式将从你的代码中剥离很多,除非你改变输入格式,但是我不确定你是否真的能够使用任何体字段来实现你想要做的事情一种优雅的方式。

使用视图从每个节点类型输出所需的内容,但我从不使用视图来确定如何显示它(除了排序字段等)。我倾向于使用显示字段选项(/ admin / content / node-type / [your-node-type] / display)或在主题中执行此操作。换句话说,我主题是节点(内容类型)或字段本身。

我会考虑在这里查看 - http://drupal.org/node/206980 - 看看如何主题单个字段。在主题文件夹中的content-field.tpl.php副本的开头使用field_(字段名称前缀)(您将在cck文件夹的主题文件夹中找到它),并使用它来主题字段您希望它呈现的方式(使用上面的代码)。因此,当视图选中它以显示它时,它将使用上面的代码对其进行主题化。

当然,这有一个额外的好处,就是你不需要在页面的body元素中添加任何代码,这根本不是一种可扩展的方法。

或者,您可以write a small module使用hook_field()(link 1link 2)来重写字段显示,但除非您希望能够自定义其中任何一个网站的管理区域,您最好的选择可能是如上所述主题字段。

答案 2 :(得分:0)

我几乎已经完成了这个问题(感谢发布它!),但是自从这篇文章发布以来的三年里,有些事情发生了变化(显然)。

在我的情况下,使用视图3和D7,我能够将所有相关的swfobject代码粘贴到我的视图的页眉或页脚中,确保使用带有完整HTML的文本区域类型作为文本输入过滤器。

不需要编辑template.php。我甚至使用令牌替换来为我的电影的flashvars提供上下文过滤器参数。