Представления убирают теги из вывода.

У меня есть представление Drupal, которое должно выводить видеоплеер с использованием flash. Я пытаюсь вывести сценарий, который будет вызывать флэш-фильм. Проблема в том, что Views применяет какой-то фильтр, который удаляет мои теги

2 ответа

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

5
ответ дан 7 December 2019 в 07:38
поделиться

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

2
ответ дан 7 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: