2010-08-21 7 views
6

Tengo una vista de Drupal que debe generar un reproductor de video usando flash. Estoy tratando de generar un script que llame a la película flash. El problema es que Views aplica algún tipo de filtro que elimina mis etiquetas <script>, las de apertura y cierre. Estoy buscando una solución (algunas configuraciones en vistas que deshabilitarán ese filtro), pero no puedo encontrar una respuesta. Otras etiquetas HTML funcionan, pero parece que la etiqueta del script se está eliminando, probablemente por algún motivo de seguridad.Vistas elimina etiquetas de la salida

He seleccionado la opción de volver a escribir la salida del campo y estoy usando las etiquetas correctamente

Vistas también tiras atributos de estilo de mis etiquetas. Por ejemplo:

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

aparece así:

<h3>Some text here</h3> 

¿Hay una solución para esto? Gracias.


Begin editado


estoy pegando por debajo del código que estoy utilizando en mi opinión.

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

nuevamente la edición de


El código anterior se beinng publicado en mi opinión. He creado una vista para manejar esto. Esta es la zona de campos de mi vista:

campos Nodo: Nid Nodo: Título (título, es en pt-br) Nodo: Enlace "Editar" (edit) Nodo: Enlace "apagar" (eliminar) Conteúdo: Imagem imagen en miniatura Conteúdo: URL de video do Arquivo (URL del archivo de vídeo) nodo: Corpo (cuerpo)

he desactivado la visualización de todos los campos anteriores y se han embalado todo el código en el cuerpo campo. Allí seleccioné la opción que quiero reescribir la salida del campo.

+0

¿Qué es el video? ¿Es un video incrustado de youtube? Si es así, ¿dónde está incrustado? ¿Utiliza un reproductor alojado en su sitio como Wimpy? ¿Se ha subido un archivo de video a un campo de archivo CCK? ¿Está pegando HTML en un nodo que se supone que debe mostrar el video y, de no ser así, cómo se suben/muestran los videos? Si se cargan en los nodos, ¿se muestran al ver el nodo directamente? – CitrusTree

+0

Hola, es un archivo flv. Estoy usando JWPlayer. Estoy usando código de JavaScript para incrustarlo (swfobject.swf) como se sugiere aquí: http://www.longtailvideo.com/support/jw-player-setup-wizard. El video fue cargado a través de un campo de archivo CCK.En el campo de video, estoy solicitando su URL en bruto y luego estoy reescribiendo el resultado para usar el script para extraer el video usando su URL sin procesar. Al ver los nodos directamente, los videos se muestran como enlaces para descargar, que es la temática predeterminada para el campo de archivo con un enlace de descarga. –

+0

"En el campo de video, estoy solicitando su URL en bruto y luego estoy reescribiendo el resultado para usar el script" - ¿Dónde está procesando esto? En un mod personalizado? – CitrusTree

Respuesta

5

kiamlaluno identificó el problema básico, pero para resolverlo, vas a tener que utilizar una plantilla de campo que evitar el uso del sistema de filtrado utiliza Vistas. Group 42 has a great guide para guiarlo a través de los aspectos básicos de la temática de Vistas, por lo que voy a pasar por alto esos detalles y hablar sobre su caso específico.

Primero, debe identificar qué campo desea reescribir: creo que está haciendo eso usando la configuración de campo, pero no está claro en qué campo está reescribiendo. Voy a suponer que es el campo del cuerpo. Consulte la guía del Grupo 42 para crear un nuevo archivo de plantilla para el campo del cuerpo en su tema.

En el nuevo archivo de plantilla, utilice el siguiente código:

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

guardar su nuevo archivo de plantilla, y ahora el campo del cuerpo será reemplazado con la salida correcta. Sólo asegúrese de que todos los campos que ha referenciado en la plantilla están delante del campo del cuerpo dentro de la lista de campos al editar el Ver.

Se puede ver que esto es sobre todo HTML con unos pocos bits de PHP. Código como este:

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

da salida a los contenidos de un campo que no sea actual (es decir, se utiliza este código cuando se desea hacer referencia a otros campos distintos del cuerpo). Hace referencia a la misma fila y encuentra el valor del campo.

Y código como este:

<?php print $output ?> 

Emite el valor del campo actual, en este caso, del cuerpo.

+0

Hola, Mark, muchas gracias, fue un gran consejo, ¡estoy completamente en el camino correcto ahora! El único problema al que me enfrento ahora es que cuando obtengo los datos brutos para mis campos de archivos, todo lo que puedo obtener es el ID de los archivos. En lugar de la URL (la salida procesada de mis campos), probablemente obtenga los datos brutos. Lo que me gustaría es la salida $ de la imagen y los campos de video. ¿Tienes alguna idea de cómo puedo hacer eso? Gracias. –

+1

Ah, perdón por eso; '$ row' devuelve la salida sin formato. He editado mi respuesta para usar '$ view-> field ['field_name'] -> render ($ row)', que generará los contenidos renderizados. –

+0

Hola, Mark, gracias. He resuelto todo. Al final, decidí usar views-view-fields que me pareció un enfoque un poco mejor. Nunca tuve la paciencia para repasar realmente la documentación de las vistas. Es muy iterante. Aunque he dedicado algunas horas a esto hoy, probablemente sea muy útil en el futuro. –

2

No creo que la vista esté causando el problema. kiamlaluno tiene toda la razón de que el formato de entrada despojará mucho de tu código, a menos que modifiques el formato de entrada, sin embargo, no estoy seguro de que puedas lograr lo que estás tratando de hacer usando el campo del cuerpo en cualquier tipo de manera elegante.

Use las vistas para generar el contenido que necesita de cada tipo de nodo, pero nunca uso vistas para determinar cómo se mostrará (aparte de ordenar campos, etc.). Tiendo a hacer esto usando la opción de campos de visualización (/ admin/content/node-type/[your-node-type]/display) o en el tema. En otras palabras, tema el nodo (tipo de contenido) o el campo en sí.

Consideraría buscar aquí - http://drupal.org/node/206980 - para ver cómo campos individuales de temas. use el campo_ (prefijo de nombre de campo) al comienzo de una copia de content-field.tpl.php en su carpeta de temas (lo encontrará en la carpeta de temas de su carpeta cck) y utilícelo para aplicar el tema al campo la forma en que desea que se presente (utilizando su código anterior). Entonces, cuando la vista lo levante para mostrarlo, lo reproducirá utilizando su código anterior.

Esto, por supuesto, tiene la ventaja adicional de que no necesita agregar ningún código al elemento del cuerpo de la página, que no es una forma escalable de hacer esto en absoluto.

Alternativamente, usted podría write a small module que utiliza hook_field() (link 1, link 2) para reescribir la pantalla de campo, pero a menos que usted quiere ser capaz de personalizar cualquiera de esto en el área de administración del sitio, su mejor opción es probablemente a tema el campo en sí mismo como arriba.

0

que tenían casi exactamente este problema (gracias por la publicación de ella!), Pero algunas cosas han cambiado (obviamente) en los tres años desde que este post.

En mi caso, usando Views 3 y D7, pude pegar todo el código swfobject relevante en un encabezado o pie de página de mi vista, asegurándome de usar el tipo de área de texto con HTML completo como el filtro de entrada de texto .

No modificar la template.php era necesario. Incluso usé el reemplazo de token para proporcionar argumentos de filtro contextual a los flashvars de mi película.

Cuestiones relacionadas