Views отбирает теги из вывода - PullRequest
7 голосов
/ 21 августа 2010

У меня есть вид Drupal, который должен выводить видеоплеер, используя вспышку. Я пытаюсь вывести сценарий, который будет вызывать флэш-фильм. Проблема в том, что 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>

Отредактировано снова


Код выше размещен на мой взгляд. Я создал представление, чтобы справиться с этим. Это область ПОЛЯ моего взгляда:

Поля Узел: Нид Узел: Título (название, оно в pt-br) Узел: Ссылка "editar" (редактировать) Узел: Ссылка "apagar" (удалить) Conteúdo: Imagem уменьшенное изображение Conteúdo: URL видео до arquivo (URL видео файла) Узел: Корпус (Тело)

Я отключил отображение всех полей выше и упаковал весь код в поле Body. Там я выбрал вариант, который я хочу переписать вывод поля.

Ответы [ 3 ]

5 голосов
/ 22 августа 2010

kiamlaluno идентифицировал основную проблему, но для ее решения вам придется использовать шаблон поля, который позволит избежать использования системы фильтрации, используемой представлениями. В группе 42 есть отличное руководство , которое поможет вам разобраться с основами тематики Views, поэтому я просто приму эти детали и расскажу о вашем конкретном случае.

Сначала вам нужно определитькакое поле вы хотите переписать: я полагаю, что вы делаете это с использованием конфигурации поля, но не ясно, какое поле вы переписываете.Я собираюсь предположить, что это поле тела.Просмотрите руководство группы 42, чтобы создать новый файл шаблона для поля тела в вашей теме.

В новом файле шаблона используйте следующий код:

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

Сохраните новый файл шаблона, и теперь поле body будет заменено на правильный вывод.Просто убедитесь, что все поля, на которые вы ссылаетесь в шаблоне, находятся перед полем тела в списке Поля , когда вы редактируете Вид .

.это в основном HTML с несколькими битами PHP.Код, подобный следующему:

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

выводит содержимое поля, отличного от текущего (т. Е. Этот код используется, когда вы хотите ссылаться на поля, отличные от Body).Он ссылается на ту же строку и находит значение поля.

И такой код:

<?php print $output ?> 

Выводит значение текущего поля, в данном случае Body.

2 голосов
/ 22 августа 2010

Я не думаю, что вид вызывает проблему.kiamlaluno совершенно правильно, что формат ввода будет сильно лишать ваш код, если вы не измените формат ввода, однако я не уверен, что вы на самом деле сможете добиться того, что вы пытаетесь сделать, используя поле body в любомвроде изящного способа.

Используйте представления для вывода необходимого контента из каждого типа узла, но я никогда не использую представления, чтобы определить, как это будет отображаться (кроме полей упорядочения и т. д.).Я обычно делаю это, используя опцию отображения полей (/ admin / content / node-type / [your-node-type] / display) или в теме.Другими словами, я задаю тему узла (типа содержимого) или самого поля.

Я бы посоветовал посмотреть здесь - http://drupal.org/node/206980 - чтобы увидеть, как оформить отдельные поля.используйте field_ (префикс имени поля) в начале копии файла content-field.tpl.php в папке вашей темы (вы найдете его в папке темы вашей папки cck), и используйте его для темы полятак, как вы хотите, чтобы он был представлен (используя ваш код выше).Поэтому, когда представление выбирает его для отображения, оно будет отображать его с использованием приведенного выше кода.

Это, конечно, имеет дополнительное преимущество, заключающееся в том, что вам не нужно добавлять какой-либо код в тело.элемент страницы, который вообще не является масштабируемым способом сделать это.

В качестве альтернативы, вы можете написать небольшой модуль , который использует hook_field () ( ссылка 1 * 1014)*, ссылка 2 ), чтобы переписать отображение поля, но если вы не хотите иметь возможность настраивать что-либо из этого в административной области сайта, ваш лучший вариант, вероятно, состоит в том, чтобы оформить само поле, как указано выше.

0 голосов
/ 21 июня 2013

У меня была почти такая же проблема (спасибо за публикацию!), Но несколько вещей изменились (очевидно) за три года, прошедшие с момента публикации.

В моем случае, используя виды 3 и D7, я смог вставить весь соответствующий код swfobject в верхний или нижний колонтитул моего представления, убедившись, что в качестве фильтра ввода текста используется тип текстовой области с полным HTML.

Нет необходимости редактировать template.php. Я даже использовал замену токенов, чтобы предоставить аргументы контекстного фильтра для flashvars моего фильма.

...