/** * Implement hook_form */ function your_custom_form($node, &$form_state) { $form['type'] = array( '#type' => 'radios', '#options' => array( 'agree' => t('賛成'), 'disagree' => t('反対'), ), '#title' => t('投票してください'), ); $form['survey'] = array( '#type' => 'fieldtext', '#title' => t('反対意見'), '#states' => array( 'visible' => array( ':input[name="type"]' => array('value' => 'disagree'), ), ), ); }
/** * Implementation of hook_menu() * 新規フォームを表示するページのメニュー設定 */ function my_module_name_menu() { $items['test/form'] = array( 'title' => 'Ajaxテスト', 'page callback' => 'drupal_get_form', 'page arguments' => array('my_sample_form'), 'access arguments' => array('access content'), ); } /** * フォームの各要素の記述 */ function my_sample_form($form, &$form_state){ // メッセージ入力フィールド $form['message'] = array( '#type' => 'textfield', '#title' => t('メッセージを入力'), ); // 入力されたメッセージをajaxで表示する場所 $form['msg_wrapper'] = array( '#type' => 'markup', '#markup' => "", '#prefix' => '<div id="msg-wrapper">', '#suffix' => '</div>', ); // サブミットボタン $form['submit'] = array( '#type' => 'submit', '#value' => '送信', '#ajax' => array( 'callback' => 'test_sample_form_ajax_callback', 'wrapper' => 'msg-wrapper', 'effect' => 'fade', ), ); return $form; } /** * ajaxに呼び出される関数 */ function test_sample_form_ajax_callback($form, $form_state) { // 入力されたメッセージを指定した場所にセット $form['msg_wrapper']['#markup'] = '入力されたメッセージ:' . check_plain($form_state['values']['message']) ; // 置換する部品を返す return $form['msg_wrapper'] ; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }
function ajax_add_to_my_vocabulary($form,&$form_state, $entity){ global $user ; // データがすでに存在するか否かのチェック $my_voca_result = db_query("SELECT entity_id FROM my_ch_vocabulary WHERE vid=".$entity->vid . " AND uid=".$user->uid)->fetchAll(); // ajaxコールバック時に使用するパラメーター $form_state['has_my_voca_result'] = count($my_voca_result)>0 ? true:false ; $form_state['ch_vocabulary'] = $entity ; // ajaxのチェックボックスフォーム定義 $form['ch_voca_form']=array( '#type' => 'checkbox', '#disabled' => $user->uid == 0 ? true : false , '#title' => count($my_voca_result)>0 ? t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>') : t('<span id="ch-voca-check-op-'.$entity->vid.'">Add</span>'), '#default_value' => count($my_voca_result)>0 ? 1 : 0, '#ajax' => array( 'callback' => 'add_to_my_vocabulary_callback', 'wrapper' => 'ch-voca-check-op-'.$entity->vid, 'method' => 'replace', 'effect' => 'fade', ), ); return $form ; } // ajaxのコールバック関数 function add_to_my_vocabulary_in_views($form, $form_state){ global $user; $entity = $form_state['ch_vocabulary'] ; // DBにデータがある場合に削除処理 if( $form_state['has_my_voca_result'] ) { db_delete( 'my_ch_vocabulary' )->condition( 'vid', $entity->vid )->condition('uid', $user->uid )->execute(); // チェックボックスのラベルを「Add」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Add</span>'); } // データがなければ、ch_vocabuaryをmy_vocabuaryにコピー $my_voca = entity_create('my_ch_vocabulary', array('vid'=>$entity->vid)); $my_voca_wrapper = entity_metadata_wrapper( 'my_ch_vocabulary', $my_voca ); $my_voca_wrapper->vocabulary->set( $ch_voca->vocabulary ) ; .... //各種フィールド、プロパティのセット $my_voca_wrapper->save(); // コピーされたデータの保存 // チェックボックスのラベルを「Remove」に変更 return t('<span id="ch-voca-check-op-'.$vid.'">Remove</span>'); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'ajax_add_to_my_vocabulary', 'page arguments' => array(array(), array(), 2) , 'access arguments' => array('create my vocabulary'), ); }
YOUR_MODULE_NAME_menu(){ $items['your/path/%entity'] = array( 'title' => 'Copy and Remove', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_add_to_my_vocabulary', 2) , 'access arguments' => array('create my vocabulary'), ); }
function node_menu() { $items['admin/content'] = array( 'title' => 'Content', 'description' => 'Find and manage content.', 'page callback' => 'drupal_get_form', 'page arguments' => array('node_admin_content'), 'access arguments' => array('access content overview'), 'weight' => -10, 'file' => 'node.admin.inc', ); // … return $items; }
hook_menuで定義したアクセスURLに、ワイドカード’%’(任意の文字、数字)の使用ができます。例えば、あるページのURI: 「/user/123/fbconnect」、このページにuid=123のユーザーのfbconnectを表示するページとなります。ユーザーにより、uidは変わります。
実際にhook_menuでは、連想配列のキー: $items['user/%/fbconnect'] で表現します。ここで、ワードカード’%’が使用されています。
ワイドカードが二つのパタン
function [my-module-name]_menu() { $items['user/%/fboauth'] = array( //ワイドカード'%'の使用 'title' => t('Facebook settings'), 'page callback' => 'fboauth_user_form', //ページ定義関数の呼び出し 'page arguments' => array(1), //パスの1番目(0から)を引数に ・・・・, ); function fboauth_user_form($uid){ //URIの1番目にあるワードカードを引数に $user = user_load($uid); ・・・ }