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);
・・・
}
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);
・・・
}
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'),
);
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。
/**
* Implements hook_permission().
*/
function [my-module-name]_permission() {
return array(
'authorize fbauth_connect' => array(
'title' => t('Connect Facebook account and store access token'),
),
);
}
/**
* Implements hook_entity_info().
*/
function drills_ch_vocabulary_entity_info()
{
return array(
'my_vocabulary' => array(
'label' => t('My Vocabulary'),
'entity class' => 'MyVocabularyEntity',
'controller class' => 'MyVocabulryController',
'base table' => 'my_vocabulary',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'entity_id',
'label' => 'vocabulary',
),
'bundles' => array(
'my_vocabulary' => array(
'label'=>'My Vocabulary',
'admin' => array(
'path' => 'admin/structure/my-vocabulary/manage',
'access arguments' => array('administer my vocabulary'),
'controller class' => 'EntityDefaultUIController',
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'my_vocabulary',
'access callback' => 'my_vocabulary_access',
),
);
}
// entity/entity.module の659行あたり
function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
}
}
hook_menuで定義したページへのアクセス権限設定は「access callback」と「access arguments」で行います。特定なユーザーロール、特定なユーザーのみなどの制御が可能となります。特に、ユーザーのアクセス権限管理ページ(ホーム » 管理 » ユーザー » 権限)で各ページのアクセス権限管理が一般的で、よく利用されます。hook_menuがこのアクセス権限管理の実装方法を纏めます。