0

特定の URL に基づいて、Drupal ノードの Body フィールドのみを取得して表示する関数を作成しようとしています。

現在、標準の Drupal RSS の機能を拡張して、検出方法を実行しています。これは、次の URL を入力した場合に発生します: http://mysite.com/rss.xml/ page=54

最後の部分は重要です。どのノード ID からロードするかを示します。コードに関する限り、/modules/node/node.module の node_feed() 関数を次のように変更しました。

if (stristr($nids, 'page=') !== FALSE) {
 $nid = substr($nids, stripos($nids, 'page=') + 5);
 $result = NULL;

 if ((string)(int)$nid === $nid) {
  $result = db_result(db_query("SELECT `nid` FROM {node} WHERE `nid` = %s AND `type` =  'flashnode'", $nid));
 }

 if ($result) {
   $item = node_load($result);
   print($item->body);
 }
 exit;
}

これは機能しますが、次の 2 つの理由から心配しています。

1) 結果はキャッシュされますか? これは、頻繁に呼び出される非常に負荷の高いページです。

2)これを行う「公式」の方法はありますか?セミハッキーな回避策ではなく、キャッシュ付きのモジュールを使用するものですか?

ご指導いただきありがとうございます。-トム

4

1 に答える 1

0

ノードの本体を返す URL を作成するために、RSS フィードをハッキングするべきではありません。非常に単純なカスタム モジュールを作成する必要があります: http://drupal.org/developing/modules

Drupal モジュール システムでは、URL を設定して、/fetch_body/1234$nid=1234 をパラメータとして fetch_body() 関数を呼び出すようなものを使用できます。キャッシュに関しては、カスタム モジュールに多くのオプションがあります。最も明白なのは、cache_get() と cache_set() を使用して、ノード ID に基づいて独自に単純なキャッシュを行うことです。

Drupal のどのバージョンを使用していますか? Pro Drupal Development という本を強くお勧めしますが、drupal のバージョンと一致するエディションを入手してください。

于 2012-05-02T20:41:45.207 に答える