web-dev-qa-db-ja.com

ユーザープロファイルでボタンがクリックされたときにイベントをトリガーするにはどうすればよいですか?

たとえば、誰かがユーザープロファイルのボタンをクリックしたときに、特定のフィールドの内容に基づいて一連のノードを作成するとします。

これはカスタムビルドモジュールで可能ですか?もしそうなら、ユーザープロファイルにそのボタンを表示するためにどのフックを使用し、クリック時にカスタム関数を呼び出すにはどうすればよいですか?

1
Matt

はい、カスタムモジュールでこれを実現できます。 drupalの form api を使用して単純なフォームを作成し、ユーザープロフィールページに表示するブロックに出力します。以下のコードはあなたが始めるのに役立ちます。

フォームを作成します。非表示の要素は、URLからユーザーIDを取得しています。

function my_module_form($form, &$form_state) {
  $form = array();

  $form['uid'] = array(
    '#type' => 'hidden', 
    '#value' => arg(1),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
  );

  return $form;
}

function my_module_form_submit($form, &$form_state) {
  $uid = $form_state['values']['uid'];
  // do some stuff
}

hook_block_infohook_block_view を使用して、フォームを含む新しいブロックを作成します。

/**
 * Implementation of hook_block_info().
 */
function my_module_block_info() {
  $blocks['my_module'] = array(
    'info' => t('My Name'),
  );
  return $blocks;
}

/**
 * Implementation of hook_block_view().
 */
function my_module_block_view($delta='') {
  $block = array();
  switch ($delta) {
    case 'my_module':
      $block['subject'] = t('My Title');
      $my_form = drupal_get_form('my_module_form');
      $block['content'] = drupal_render($my_form);

      break;
  }
  return $block;
}

D7でモジュールを作成する方法について詳しくない場合は、こちらの記事をご覧ください。 http://www.justinphelan.com/post/how-write-your-own-module-drupal-7

0
jphelan

うわー、これは多くの解決策の問題です。私がすぐに思いつくことができるもの:

開発者方法:

  1. カスタムモジュールを作成します: https://www.drupal.org/developing/modules/7
  2. 実装 hook_men リンクのコールバックを作成します
  3. hook_menuのエントリに定義されたコールバック関数にロジックを実装します。
  4. 「プレゼンテーション層」。あなたのウェブサイトの構造とあなたのプロフィールに応じて:

    a)リンクを含むブロックを作成し、参照: block_examplelink function

    b)フィールド化可能なエンティティ(ユーザー、プロファイル2など)に "疑似フィールド" を実装します

    c)プロファイルテンプレートファイルで link function を使用します。 ser-profile.tpl.php

link関数とフックメニューの実装をajaxフレームワークと一緒に使用すると、追加のポイントが付与される場合があります。

サイトビルダー方法(一方通行..多くあります):

  1. フラグ を作成します
  2. アイテムにフラグを付けるための rule を作成します
  3. そのルールでロジックを実装します
  4. オプション:フラグ設定を元に戻します(ユーザーがこのアクションを再度実行できるようにするため)

言及されたすべてのソリューションは、おそらくそのボタンのアクセスと表示の処理についてもいくつかのロジックを必要とするでしょう。

(1)開発者の方法(このボタンがユーザー/ IDに表示される場合):

<?php
global $user;    
if (arg(0) == 'user' && arg(1) == $user->uid && null === arg(2) {
  print l('do something', 'yourcallballback/' . arg(1));
}

サイトビルダー方法(上記の例の場合):

通常、ここで追加のアクセスチェックは必要ありません。フラグをグローバルに設定して、1回だけクリックできるようにしたい場合は、1回だけクリック可能にすることができます。表示部分については、おそらく現在のユーザーが自分のプロファイルにアクセスした場合にのみ、そのフラグを表示するためにコードを使用する必要があります。

0
Andre Baumeier