2009-08-12 12 views
3

私は、カスタムモジュールを使用して私のホームページの内容をexample.com/frontpageに作成しています。drupal 6:カスタムモジュールからテンプレートファイルにデータを取得する方法

モジュールでは、必要なデータを配列で取得するクエリを実行します。テーマ( 'page'、$ my_array)を返すと、 "ホームページのホームページ"が表示されます。つまり、メインのコンテンツ領域にデフォルトのdrupalロゴとサイト名が2回表示されます。

これについては、どのような方法が最適ですか?具体的なtpl.phpファイルを作成してください。内容は...?

は、私はその非常に一般的な質問実現物事を試し、チュートリアルではありません非常に遠く全く得アイブ読んでの2時間...

おかげ

答えて

2

私が正しくあなたの質問を理解していた場合で、 theme_pageを実行せずにコンテンツを返すだけで済みます。 theme_pageはコンテンツを受け取り、サイトテンプレートでラップします。そのため、ケースで手動で呼び出すと、テンプレートが複製されます。

ページのコールバック関数に何も返さない代わりに、の出力にtheme_pageを出力することです。コールバック関数がテキストを返さない場合、サイトのテンプレートは自動的には含まれません。

<?php 

function mymodule_menu() { 
    $items = array(); 

    $items['option1'] = array(
    'title' => 'Front page option #1', 
    'access arguments' => array('access content'), 
    'page callback' => 'mymodule_option1', 
    'type' => MENU_CALLBACK, 
); 

    $items['option2'] = array(
    'title' => 'Front page option #2', 
    'access arguments' => array('access content'), 
    'page callback' => 'mymodule_option2', 
    'type' => MENU_CALLBACK, 
); 

    return $items; 
} 

function mymodule_option1() { 
    // build HTML content here 
    return $content; 
} 

function mymodule_option2() { 
    // build HTML content here 
    print theme('page', $content); 
    return null; 
} 
+0

オプション1は動作しませんでしたが、var名は$ contentでなければなりませんでした。今私は自分のホームページにArrayを見ます。だから私はmymodule_option1関数の中に完全なHTMLを構築する必要がありますか?あなたはphpをhtmlではなくPHPに入れることを意図していませんか? – stef

+0

オプション2はさらに良く機能します。おかげでceejayoz! – stef

+1

実際のDrupalishにしたい場合は、メニューコールバックがロジックを実行している間に、実際のHTMLを作成するテーマ関数を作成する必要があります。これは、モジュールの出力をオーバーライドするためにcontribモジュールが行うことです。しかし、カスタムサイトモジュールでは一度だけ使用するだけで、それほど重要ではありません。それ以外に、良い応答+1 – googletorp

0

あなたは、ホームページのためのクエリが本当に奇妙であるunles、ビューはそういったことのためのカスタムモジュールよりも良いはずです、カスタムモジュールよりも「ビュー」との方が良いかもしれません。

あなたが独自のテーマを持っている(または1つを作成するために喜んでいる)場合(hereが説明したように)あなたは、ページfront.tpl.phpを使用することができます

+0

多くの場合、パネル+ビューはさらに優れています。 – ceejayoz

+0

は働いていない同僚との年齢を問わず試しました。私は可能なisntのビューの中に他のロジックが必要です。 – stef

+0

私は自分のテーマを持っていますが、今ではそれを探検する "使用して、ビューを使用している必要があります" – stef

0

あなたのテンプレートファイルには何が?これらの要素が2回、つまりテーマのpage.tpl.phpに1回、もう一度$content変数(モジュールで生成されるように見える)に2回含まれているため、これらの要素が2回表示される可能性はありますか?

多くのテンプレートファイルは、以下の構造を有する:theme('page', $my_array)$content変数を作成するための責任がある、と$contentはすでに$logoや友人が含まれている場合、彼らは二回レンダリングされる

print $head; 
print $logo, $search, $navbar, $messages; 
print $content; 
print $footer, $closure; 

うとしています。私はこの例ではかかるだろう

最初のステップは、私のテーマのtemplate.phpファイルにhook_preprocess_page()を実装しており、(あなたがdevelのモジュールがインストールされている場合 - あなたがすべき)いくつかのdsm()呼び出しで投げ、またはprint_r()さんをし、それがページテンプレートに何をしているのかを正確に見てください。
HTH

関連する問題