Views is stripping tags from the output

Marcos Buarque picture Marcos Buarque · Aug 21, 2010 · Viewed 8.4k times · Source

I have a Drupal view which should output a video player using flash. I am trying to output a script that will call the flash film. The problem is that Views applies some sort of filter that strips my <script> tags, the opening and the closing one. I am searching a solution (some setting in views that will disable that filter), but cannot seem to find an answer. Other HTML tags work, but it seems the script tag is being stripped, probably for some security reason.

I have selected the option to rewrite the output of the field and I am using the tags correctly

Views also strips style attributes from my tags. For example:

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

appears like this:

<h3>Some text here</h3>

Is there a solution for this? Thank you.


Begin edited


I am pasting below the code I am using in my view.

<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>

Edited again


The code above is beinng posted in my view. I have created a view to handle this. This is the FIELDS area of my view:

Fields Node: Nid Node: Título (title, it is in pt-br) Node: Link "editar" (edit) Node: Link "apagar" (delete) Conteúdo: Imagem thumbnail image Conteúdo: Video URL do arquivo (video file URL) Node: Corpo (Body)

I have disabled the display of all the fields above and have packed all the code in the Body field. There I selected the option that I want to rewrite the output of the field.

Answer

user113292 picture user113292 · Aug 21, 2010

kiamlaluno identified the basic problem, but to solve it, you're going to have to use a field template which will avoid using the filtering system Views uses. Group 42 has a great guide to walk you through the basics of Views theming, so I'll just gloss over those details and talk about your specific case.

First, you need to identify which field you want to rewrite: I believe you're doing that using the Field configuration, but it's not clear which field you are rewriting. I'm going to assume it's the body field. Go through Group 42's guide to create a new template file for the body field in your theme.

In the new template file, use the following code:

<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>

Save your new template file, and now the body field will be replaced with the correct output. Just make sure all the fields you've referenced in the template are before the body field within the Fields list when you edit the View.

You can see that this is mostly HTML with a few PHP bits. Code like this:

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

outputs the contents of a field other than current one (i.e. you use this code when you want to reference fields other than Body). It references the same row and finds the value of the field.

And code like this:

<?php print $output ?> 

Outputs the value of the current field, in this case, Body.