web-dev-qa-db-ja.com

hook_menu()からHTMLを表示します

URLを関数にルーティングして返すonlyこれらの関数からのHTML出力(メニューコールバックとも呼ばれます)の最もクリーンな方法は何ですか?

hook_menu()を使用した場合、返される文字列はサイトの他の部分のHTMLになります。ページに表示したいonlyメニューコールバックから返された文字列。

drupal_set_header()drupal_json()と同じように使用する必要がありますか?これは、Drupalを完全にブートストラップし、最後にヘッダーを変更するのは非効率ではありませんか?

これは外部サイトのウィジェット用であるため、可能な限り最速のコードパスが必要です。スタンドアロンの.phpファイルとbootstrap必要なものから始めることができますが、hook_menuのルーティングはいいです。

どうすればいいですか?

3
ack

コールバックの出力のみを表示し、ページ全体を表示しない場合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」。

4
kiamlaluno