web-dev-qa-db-ja.com

パネルにカスタムフォームを追加しますか?

Drupal 7)のパネルページにカスタムフォームを追加するにはどうすればよいですか?

return drupal_get_form('my_custom_form');

PHP入力フィルターを可能な限り使用したくない。

2
Citricguy

そのフォームをコンテンツとするブロックを定義するカスタムモジュールを作成します。次に、標準のDrupalインターフェース(ブロック構成、パネル、コンテキストなど)を使用して、サイトの任意の場所にそのブロックを配置できます。

ブロックを定義するカスタムモジュールの作成については、すぐに利用できるリソースがたくさんあります。 Drupal.org モジュール開発者用ガイド は、開始するのに最適な場所です。 Examples モジュールも簡単にコピーおよびカスタマイズできるブロックを定義するためのサンプルモジュールが含まれています。 。

5
sheena_d

それはhook_blockを使用して行うことができます

function MODULENAME_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list':
      $blocks[1] = array('info' => t("BLOCK TITLE"));        
    return $blocks;   
    case 'view':
      $block =array(
        'subject'=>t("BLOCK TITLE"),
        'content'=>drupal_get_form('my_custom_form'));
  return $block;
  }
}

これで、このブロックをパネルに含めることができます:)

1
Serjas

コンテキストをブロックに渡すのは難しいと思いましたが、それがここで最も簡単な解決策でした。

解決策を探している間、私は他の人が役に立つと思うかもしれない興味深いモジュールに出くわしました。

チェックアウト ページマネージャ:既存のページ

Hook_menu()で登録された任意のパスを使用でき、美しく機能します。

1
Citricguy

フォームを表示するctoolsプラグインを作成できます。プラグインにコンテキストを渡すことは簡単です:

$plugin = array(
  'category' => ...,
  'render callback' => 'example_pane_render',
  'edit form' => 'example_pane_render',
  'required context' => new ctools_context_required(t('Account'), 'user'),
  'title' => t('User profile form'),
);

...

/**
 * Render callback.
 */
function example_pane_render($subtype, array $conf = array(), $args, $context) {
  module_load_include('pages.inc', 'user');
  if (count($args) > 1) {
    $profile_type = $args[1];
  }
  else {
    $profile_type = $conf['profile_type'];
  }
  return (object) array(
    'content' => drupal_get_form('user_profile_form', $context->data, $profile_type),
  );
}
0
Valery Lourie