URLを関数にルーティングして返すonlyこれらの関数からのHTML出力(メニューコールバックとも呼ばれます)の最もクリーンな方法は何ですか?
hook_menu()
を使用した場合、返される文字列はサイトの他の部分のHTMLになります。ページに表示したいonlyメニューコールバックから返された文字列。
drupal_set_header()
をdrupal_json()
と同じように使用する必要がありますか?これは、Drupalを完全にブートストラップし、最後にヘッダーを変更するのは非効率ではありませんか?
これは外部サイトのウィジェット用であるため、可能な限り最速のコードパスが必要です。スタンドアロンの.phpファイルとbootstrap必要なものから始めることができますが、hook_menuのルーティングはいいです。
どうすればいいですか?
コールバックの出力のみを表示し、ページ全体を表示しない場合Drupalはレンダリングする場合、print
またはecho
を使用してHTMLを出力します。HTMLを返す場合文字列としての出力、Drupalは、コールバックが返すHTMLを含む通常のDrupalページをレンダリングします。
この動作を引き起こすindex.phpに含まれるコードは次のとおりです。
_// Menu status constants are integers; page content is a string.
if (is_int($return)) {
switch ($return) {
case MENU_NOT_FOUND:
drupal_not_found();
break;
case MENU_ACCESS_DENIED:
drupal_access_denied();
break;
case MENU_SITE_OFFLINE:
drupal_site_offline();
break;
}
}
elseif (isset($return)) {
// Print any value (including an empty string) except NULL or undefined:
print theme('page', $return);
}
_
drupal_set_header()
は、出力のコンテンツタイプ( "Content-Type"メタデータ)を変更するためにdrupal_json()
から使用されます。通常Drupalは「text/html」に設定しますが、これはJSONを返すコールバックから返されるものには適切ではありません。その場合、リクエスターが出力を正しく処理できるようにするコンテンツタイプは「text/javascript」。