web-dev-qa-db-ja.com

jQueryとAjaxからモジュール関数を呼び出す

drupalサイトを作成するたびに、私は通常、さまざまなphp関数や、作業中のサイトにカスタム化された他のものを保持するために使用するカスタムモジュールを作成します。通常、module_nameのみで構成されます。 moduleとmodule_name.info。さらに、必要なjavascriptを実行するためにテーマに.jsファイルが常にあります。かなり標準的ですが、2つが互いに対話する必要がある状況に遭遇しました。

.phpファイルを呼び出し、jqueryで.ajaxを使用してデータを渡すことができることを知っています。テーマのjsファイルからカスタムモジュールで記述された関数を呼び出すにはどうすればよいですか?

2
BobbyDank

うまくいけば、これが役立つでしょう-Lullabotモジュール開発トレーニングからこのコードを入手しました。

それはすべてhook_menuコールバックを中心に展開します。 「ページコールバック」の値は呼び出される関数で、この場合は「menu_magic_page」です。

つまり、Drupalはmenu_magic_page()関数を探します。

JQuery/AJAX呼び出しは、$ items ['X']にある値を参照します。ここで、Xは "magic "here。 http://example.com/magic を押すと、モジュール関数"menu_magic_page "が実行されます

FWIW:type/MENU_CALLBACKは、メニューなどに追加されないことを保証します。Drupalが処理する準備ができていることを保証するだけです。

お役に立てれば。

/**
 * Implements hook_menu().
 */
function menu_magic_menu() {
  $items = array();

  /**
   * This is a simple callback.
   *
   * This will create a path at http://example.com/magic. When visited, that
   * URL will trigger the "menu_magic_page" function.
   */

  $items['magic'] = array(
    'title' => 'Menu Magic!',
    'page callback' => 'menu_magic_page',
    'type' => MENU_CALLBACK,
  );


/**
 * Page callback for 'magic'. This is the function that will get called
 * everytime a user visits http://example.com/magic.
 */
function menu_magic_page() {
  global $user;
  return t('Hello, @username!', array('@username' => $user->name));
}
1
panhead490