私が正しくあなたの質問を理解していた場合で、 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;
}
オプション1は動作しませんでしたが、var名は$ contentでなければなりませんでした。今私は自分のホームページにArrayを見ます。だから私はmymodule_option1関数の中に完全なHTMLを構築する必要がありますか?あなたはphpをhtmlではなくPHPに入れることを意図していませんか? – stef
オプション2はさらに良く機能します。おかげでceejayoz! – stef
実際のDrupalishにしたい場合は、メニューコールバックがロジックを実行している間に、実際のHTMLを作成するテーマ関数を作成する必要があります。これは、モジュールの出力をオーバーライドするためにcontribモジュールが行うことです。しかし、カスタムサイトモジュールでは一度だけ使用するだけで、それほど重要ではありません。それ以外に、良い応答+1 – googletorp