私はそのようなhook_menuを持っています:
function mymodule_menu() {
$items['mymodule-test'] = array(
'page callback' => '_mymodule_test_callback',
'access callback' => TRUE
);
return $items;
}
そしてコールバック関数:
function _mymodule_test_callback()
{
// processing
return $html;
}
私はググってみましたが、_mymodule_test_callback関数内にページテンプレートを強制する方法が見つかりません。
編集:なぜURLベースの提案ができない(または快適に感じない)か
URLベースの提案は実装が簡単ですが、私のニーズに完全には適合しません。
使用する必要があるテンプレートは、非常にさまざまな側面に従って、_mymodule_test_callback関数で決定されます。次に例を示します。
...等々。
これはまれな動作であり、テンプレートを切り替える代わりにリダイレクトできることは知っていますが、実際には関数本体は大きくないため、この方法を使用することを好みます。
不可能である?
ページコールバックからページテンプレートを直接変更することはできません。ページコールバックからページコンテンツを印刷することで、ページ全体のレンダリングをバイパスできます。または、グローバル変数を使用して、テンプレート提案の追加をトリガーできます hook_preprocess_HOOK
実装。
function _no_template_page_callback() {
// ... processing ...
// Print the result, and bypass the page template (so no blocks, no CSS, no JavaScript, etc.).
print $html;
}
function _template_suggestions_callback() {
global $MODULE_page_template_suggestions;
// ... processing ...
// Set flag to trigger usage of our custom page template.
$MODULE_suggest_page_template = $suggestions;
return $html;
}
function MODULE_preprocess_page(&$variables) {
global $MODULE_page_template_suggestions;
if (!empty($MODULE_page_template_suggestions)) {
// Use template suggestions set from _template_suggestions_callback the module.
foreach ($MODULE_page_template_suggestions as $suggestion) {
$variables['template_files'][] = $suggestion;
}
}
}