2010-08-21 9 views
6

Ich habe eine Drupal-Ansicht, die einen Video-Player mit Blitz ausgeben sollte. Ich versuche, ein Skript auszugeben, das den Flash-Film aufrufen wird. Das Problem ist, dass Views eine Art Filter anwendet, der meine <script> Tags, die öffnende und die schließende, streift. Ich suche nach einer Lösung (einige Einstellungen in Ansichten, die diesen Filter deaktivieren), aber ich kann keine Antwort finden. Andere HTML-Tags funktionieren, aber anscheinend wird das Skript-Tag entfernt, wahrscheinlich aus Sicherheitsgründen.Ansichten ist Stripping-Tags von der Ausgabe

ich die Option ausgewählt haben, die Ausgabe des Feldes neu zu schreiben, und ich bin mit den Tags korrekt

Ansichten Streifen auch Stil von meinem Tags Attribute. Zum Beispiel:

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

scheint wie folgt aus:

<h3>Some text here</h3> 

Gibt es eine Lösung für dieses? Vielen Dank.


Begin

bearbeitet

Ich bin Einfügen unter dem Code verwende ich in meiner Ansicht.

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

wieder Herausgegeben


Der obige Code in meiner Sicht geschrieben ist beinng. Ich habe eine Ansicht erstellt, um damit umzugehen. Dies ist der FIELDS Bereich meiner Ansicht:

Felder Knoten: Nid Knoten: Título (Titel, es ist in pt-br) Knoten: Link "editar" (edit) Knoten: Link "apagar" (löschen) conteudo: Imagem thumbnail image conteudo: Video-URL tun arquivo (Videodatei URL) Knoten: Corpo (Body)

ich die Anzeige aller Felder deaktiviert haben oben und haben den gesamten Code im Körper verpackt Feld. Dort habe ich die Option ausgewählt, dass ich die Ausgabe des Feldes neu schreiben möchte.

+0

Was ist das Video? Ist es ein eingebettetes YouTube-Video? Wenn ja, wo ist es eingebettet? Wird ein auf Ihrer Website gehosteter Player wie Wimpy verwendet? Wird eine Videodatei in ein CCK-Dateifeld hochgeladen? Fügen Sie HTML in einen Knoten ein, der das Video anzeigen soll, und wenn nicht, wie werden die Videos hochgeladen/angezeigt? Wenn sie auf die Knoten hochgeladen werden, werden sie angezeigt, wenn der Knoten direkt angezeigt wird? – CitrusTree

+0

Hallo, es ist eine FLV-Datei. Ich benutze JWPlayer. Ich verwende JavaScript-Code, um es (swfobject.swf) einzubetten, wie hier vorgeschlagen: http://www.longtailvideo.com/support/jw-player-setup-wizard. Das Video wurde über ein CCK-Dateifeld hochgeladen.Im Videofeld ersuche ich seine rohe URL und dann schreibe ich die Ausgabe um, um das Skript zu verwenden, um das Video mit seiner rohen URL zu ziehen. Beim direkten Betrachten der Knoten werden die Videos als Links zum Download angezeigt, das ist die Standard-Theming für das Dateifeld mit einem Download-Link. –

+0

"Im Video-Feld ersuche ich seine rohe URL und dann schreibe ich die Ausgabe um das Skript zu verwenden" - Wo bearbeiten Sie das? In einer benutzerdefinierten Mod? – CitrusTree

Antwort

5

kiamlaluno identifiziert das Grundproblem, aber um es zu lösen, müssen Sie eine Feldvorlage verwenden, die die Verwendung des Filtersystems Views vermeidet. Group 42 has a great guide, um Sie durch die Grundlagen der Ansichten Theming zu gehen, so werde ich nur über diese Details beschönigen und über Ihren speziellen Fall sprechen.

Zunächst müssen Sie angeben, welches Feld Sie neu schreiben wollen: Ich glaube, Sie tun das mit der Feldkonfiguration, aber es ist nicht klar, welches Feld Sie umschreiben. Ich gehe davon aus, dass es das Körperfeld ist. Gehen Sie durch das Handbuch der Gruppe 42, um eine neue Vorlagendatei für das Feld body in Ihrem Design zu erstellen.

In der neuen Vorlagendatei, verwenden Sie den folgenden Code ein:

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

Ihre neue Vorlage-Datei speichern, und jetzt wird der Körper Feld mit dem richtigen Ausgang ersetzt werden. Stellen Sie nur sicher, dass alle Felder, auf die Sie in der Vorlage verwiesen haben, vor dem Feld body innerhalb der Felder Liste sind, wenn Sie die Ansicht bearbeiten.

Sie können sehen, dass dies vor allem HTML mit ein paar PHP-Bits ist. Code wie folgt aus:

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

gibt den Inhalt eines anderen Feld als aktuelle (das heißt Sie diesen Code verwenden, wenn Sie andere Felder als Körper verweisen möchten). Es referenziert die gleiche Zeile und findet den Wert des Feldes.

Und Code wie folgt:

<?php print $output ?> 

Gibt den Wert des aktuellen Feldes, in diesem Fall Körper.

+0

Hallo, Mark, vielen Dank, das war ein toller Rat, ich bin jetzt völlig auf dem richtigen Weg !! Das einzige Problem, dem ich jetzt gegenüberstehe, ist, dass wenn ich die Rohdaten für meine Dateifelder erhalte, alles, was ich bekommen kann, die ID der Dateien ist. Statt der URL (der verarbeiteten Ausgabe meiner Felder) bekomme ich wahrscheinlich die Rohdaten. Was ich möchte, ist die $ Ausgabe des Bildes und der Videofelder. Hast du irgendwelche Ideen wie kann ich das machen? Vielen Dank. –

+1

Ah, tut mir leid; '$ row' gibt die rohe Ausgabe zurück. Ich habe meine Antwort bearbeitet, um '$ view-> field ['field_name'] -> render ($ row)' zu verwenden, was den gerenderten Inhalt ausgeben wird. –

+0

Hallo, Markus, danke. Ich habe alles gelöst. Am Ende entschied ich mich, Views-View-Felder zu verwenden, die mir als etwas besserer Ansatz erschienen. Ich hatte nie die Geduld, wirklich über die Dokumentation der Ansichten Theming zu gehen. Es ist sehr iteresting. Obwohl ich heute einige Stunden damit verbracht habe, wird es wahrscheinlich in der Zukunft sehr nützlich sein. –

2

Ich glaube nicht, dass die Ansicht das Problem verursacht. kiamlaluno ist ziemlich richtig, dass das Eingabeformat viel aus deinem Code streichen wird, wenn du das Eingabeformat nicht änderst, aber ich bin mir nicht sicher, ob du tatsächlich in der Lage sein wirst, das zu erreichen, was du mit dem body-Feld machen willst Art von anmutiger Art und Weise.

Verwenden Sie Ansichten, um den Inhalt auszugeben, den Sie von jedem Knotentyp benötigen, aber ich verwende nie Ansichten, um zu bestimmen, wie dies angezeigt wird (abgesehen von Bestellfeldern usw.). Ich tendiere dazu entweder die Anzeigefeld-Option (/ admin/content/node-type/[Ihr-Knotentyp]/display) oder das Thema. Mit anderen Worten, ich theme den Knoten (Inhaltstyp) oder das Feld selbst.

Ich würde in Betracht ziehen, hier zu suchen - http://drupal.org/node/206980 - zu sehen, wie einzelne Felder Thema. Verwenden Sie das field_ (Feldname-Präfix) am Anfang einer Kopie der content-field.tpl.php in Ihrem Theme-Ordner (Sie finden es im Theme-Ordner Ihres Cck-Ordners) und verwenden Sie dies, um das Feld zu gestalten so wie Sie es möchten (mit Ihrem Code oben). Also, wenn die Ansicht es annimmt, um es anzuzeigen, wird es es mit Ihrem Code oben theme.

Dies hat natürlich den zusätzlichen Vorteil, dass Sie dem body-Element der Seite keinen Code hinzufügen müssen, was keine skalierbare Möglichkeit ist, dies zu tun.

Alternativ könnten Sie write a small module die hook_field verwendet() (link 1, link 2) die Feldanzeige neu zu schreiben, aber wenn man in der Lage sein wollen, irgendetwas davon im Admin-Bereich der Website anpassen, die beste Wahl ist wahrscheinlich das Feld selbst wie oben zu thematisieren.

0

Ich hatte fast genau dieses Problem (danke für die Veröffentlichung!), Aber ein paar Dinge haben sich (offensichtlich) in den drei Jahren seit diesem Post geändert.

In meinem Fall konnte ich mithilfe von Views 3 und D7 den gesamten relevanten swfobject-Code in einen Header oder Footer meiner Ansicht einfügen und dabei sicherstellen, dass der Textbereichstyp mit Full HTML als Texteingabefilter verwendet wurde .

Es war keine Bearbeitung der template.php notwendig. Ich habe sogar einen Token-Ersatz verwendet, um den Flashvars meines Films kontextabhängige Filterargumente zur Verfügung zu stellen.