У меня есть представление Drupal, которое должно выводить видеоплеер с использованием flash. Я пытаюсь вывести сценарий, который будет вызывать флэш-фильм. Проблема в том, что Views применяет какой-то фильтр, который удаляет мои теги
Киамлалуно определил основную проблему, но для ее решения вам придется использовать шаблон поля, который позволит избежать использования системы фильтрации, используемой представлениями. В группе 42 есть отличное руководство , которое познакомит вас с основами тематики представлений, поэтому я просто замалчиваю эти детали и расскажу о вашем конкретном случае.
Во-первых, вам нужно определить, какое поле вы хотите переписать: я полагаю, вы делаете это, используя конфигурацию поля, но не ясно, какое поле вы перезаписываете. Я предполагаю, что это поле тела. Просмотрите руководство Группы 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>
Сохраните новый файл шаблона, и теперь поле body будет заменено правильным выводом. Просто убедитесь, что все поля, на которые вы ссылаетесь в шаблоне, находятся перед полем тела в списке Поля , когда вы редактируете Представление .
Как видите, это в основном HTML с некоторыми битами PHP. Вот такой код:
<?php print $view->field['title']->render($row) ?>
выводит содержимое поля, отличного от текущего (т.е. вы используете этот код, когда хотите ссылаться на поля, отличные от Body). Он ссылается на ту же строку и находит значение поля.
И такой код:
<?php print $output ?>
Выводит значение текущего поля, в данном случае Body.
Я не думаю, что представление вызывает проблему. kiamlaluno совершенно прав, что формат ввода будет удалять многое из вашего кода, если вы не измените формат ввода, однако я не уверен, что вы сможете достичь того, что вы пытаетесь сделать, используя поле body каким-либо изящным способом.
Используйте представления для вывода нужного вам содержимого из каждого типа узла, но я никогда не использую представления для определения того, как это будет отображаться (кроме упорядочивания полей и т.д.). Я обычно делаю это либо с помощью опции отображения полей (/admin/content/node-type/[your-node-type]/display), либо в теме. Другими словами, я изменяю тему узла (тип содержимого) или самого поля.
Я бы подумал о том, чтобы посмотреть здесь - http://drupal.org/node/206980 - чтобы увидеть, как оформлять отдельные поля. Используйте field_ (префикс имени поля) в начале копии content-field.tpl.php в папке вашей темы (вы найдете его в папке theme папки cck), и используйте его для оформления поля так, как вы хотите его представить (используя ваш код выше). Таким образом, когда представление возьмет его для отображения, оно оформит его с помощью приведенного выше кода.
Это, конечно, имеет дополнительное преимущество - вам не нужно добавлять никакой код в элемент body страницы, что не является масштабируемым способом сделать это.
Как вариант, вы можете написать небольшой модуль, который использует hook_field() (ссылка 1, ссылка 2) для перезаписи отображения поля, но если вы не хотите иметь возможность настраивать все это в административной части сайта, то лучшим вариантом, вероятно, будет тема самого поля, как описано выше.