1

いくつかのモジュールがインストールされたDrupal6.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でも可能ですか?これを機能させるには、コアコードをハックする必要がありますか?

4

2 に答える 2

1

コアコードをハックする必要はありません。あなたのためにこれを行うことができるいくつかの貢献したモジュールがおそらくあります。

ノードのXMLバージョンを出力するには、Viewsモジュールを拡張するViewsBonusPackモジュールを確認してください。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ファイルの前処理関数を使用して、パスに基づいてテンプレートの提案を追加できます。これにより、テンプレートファイルがどのように機能するかを少し理解する必要がありますが、最終的には、ビューを使用する場合よりも出力をより詳細に制御できるようになります。

于 2010-06-19T02:33:45.767 に答える
1

これが私がこれを修正した方法です。

  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. template.phpのphptemplate_preprocess_page関数を変更して、「-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. 必要なpage-xml.tpl.phpを作成します

于 2010-06-23T17:19:45.723 に答える