2012-05-02 5 views
0

私は、特定のURLに基​​づいてDrupalノードのBodyフィールドだけを取得して表示する関数を作成しようとしています。Drupal - URLを介してノードの本文を取得しますか?

現在、標準のDrupal RSSの機能を拡張して検出方法を行っています。それからロードするためにどのようなノードID告げる - http://mysite.com/rss.xml/最後の部分が重要であることをページ= 54

:これは、次のURLを入力した場合に発生します。限りコードが行くように、私は次の操作を行うための/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)「公式」これを行う方法はありますか?セミハックな回避策の代わりに、キャッシュを持つモジュールを使用するもの?

ご指摘いただきありがとうございます。 -Tom

答えて

0

ノードのボディを返すURLを作成するには、RSSフィードをハッキングしないでください。 http://drupal.org/developing/modules

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

あなたはどのバージョンのDrupalを使用していますか?私は非常にプロのDrupal開発本をお勧めします、あなたのdrupalバージョンに一致する版を取得することを確認してください。

+0

私はDrupal 6を使用しています。私はあなたの提案 - カスタムモジュールの構築 - に行きました。とてもうまく動作します!フェッチボディを使用せず、代わりに$ _GETを取得し、それが入ってくる変数を検査し、それに応じて動作します。どうもありがとうございました。 –

+0

これはうまくいきますが、実際にはDrupalにはURLの解析と$ _GETの追加機能があります。 – Eli

関連する問題