Может ли Drupal изменить используемый шаблон на основе расширения файла в URL? - PullRequest
1 голос
/ 19 июня 2010

Я использую Drupal 6.16 с несколькими установленными модулями. Я пытался выяснить, есть ли способ изменить вывод узла, когда к URL-адресу добавлено другое расширение файла. Например:

http://example.com/drupal?q=foo/bar - returns a normal drupal node
http://example.com/drupal?q=foo/bar.xml - returns xml output of the node

Возможно ли это даже с Drupal? Нужно ли взламывать основной код, чтобы это работало?

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Вот как я это исправил.

  1. Добавьте функцию custom_url_rewrite_inbound , чтобы проверить входящий запрос, заканчивающийся на .xml.Если он находит запрос, заканчивающийся на .xml, он удаляет его, так что остальные машины drupal могут найти правильные данные.Он также устанавливает для «subsite_xml_request» значение true, чтобы соответствующий шаблон темы можно было использовать позже.

    function custom_url_rewrite_inbound (&$result, $path, $path_language) {
      if(preg_match('/\.xml$/', $path)) {
        $search = preg_replace('/^(.*)\.xml$/', "$1", $path);
        if ($src = drupal_lookup_path('source', $search, $path_language)) {
          $_REQUEST['xml_request'] = true;
          $result = $src;
        }
    }
    
  2. Измените функцию phptemplate_preprocess_page в вашем template.php для добавления дополнительных шаблонов '-xml'.

    function phptemplate_preprocess_page(&$vars) {   
      if ($_REQUEST['xml_request']) {
        if (module_exists('path')) {
          $path = str_replace('/edit','',$_GET['q']);
          $alias = drupal_get_path_alias($path);
          if ($alias != $_GET['q']) {
            $template_filename = 'page';
            foreach (explode('/', $alias) as $path_part) {
              $template_filename = $template_filename . '-' . $path_part;
              $vars['template_files'][] = $template_filename . '-xml';
            }
            $vars['template_files'][] = 'page-xml';
          }
        }
      }
    }
    
  3. Создать необходимую страницу-xml.tpl.php

1 голос
/ 19 июня 2010

Вам не нужно взламывать код ядра . Вероятно, есть несколько модулей, которые могут сделать это для вас.

Чтобы вывести XML-версию узла, воспользуйтесь модулем Views Bonus Pack , который расширяет модуль Views. Он имеет базовые возможности экспорта, включая CSV, TXT, DOC и XML. Документация краткая, но в каталоге views_bonus / export / имеется файл README.txt, в котором приведены основные шаги по созданию канала в представлении, которое будет выводить XML.

Вы можете установить путь для канала, поэтому, хотя я не верю, что расширение .xml будет работать, вы можете настроить путь с дополнительным компонентом, например так:

http://example.com/drupal?q=foo/bar      <-- normal output
http://example.com/drupal?q=foo/bar/xml  <-- XML output

Чтобы изменить файл шаблона, который используется для узла на основе пути, вы можете использовать функцию предварительной обработки в вашем файле template.php, чтобы добавить предложение шаблона на основе путь. Для этого требуется немного больше понимания того, как работают файлы шаблонов, но в конечном итоге вы получите больший контроль над выводом, чем при просмотре.

...