次のコードを使用して、カスタムエンティティタイプのビューを作成しました。フィールドのテキストを別のテキストに変更できるように、新しいアクションボタンを作成したいだけです。このカスタムアクションが表示されない理由がわかりません。どのウィンドウの下に表示されますか? 任意のphpを実行または複数のエンティティ値を変更?
カスタムアクションを機能させる良いサンプルコードはどこにありますか?ビルド済みのVBOアクションの例はありますか?
/**
* Implements hook_action_info().
*/
function rubik_custom_action_info() {
return array(
'hideit' => array(
'type' => 'entity',
'label' => t('Custom Action'),
'configurable' => FALSE,
'triggers' => array('any'),
'behavior' => array('changes_property'),
'vbo_configurable' => FALSE,
'pass rows' => TRUE,
),
);
}
/**
* Action function for MY_ACTION_NAME.
*/
function hideit(&$entity, $context = array()) {
drupal_set_message('ok it works');
}
VBOモジュール自体には、いくつかのVBOの例があります。たとえば、エンティティを削除できるdelete.action.incを考えてみましょう。私はあなたのコードに明確に間違っているものを見ることができませんが、慣例に従い、他のhook_action_info()
実装のように再作成することを強くお勧めします:
/**
* Implements hook_action_info().
*/
function MYMODULE_action_info() {
$actions['MYMODULE_custom_action'] = array(
'type' => 'node', // Here come's the name of your custom entity type
'label' => t('Custom Action'),
'configurable' => FALSE,
'triggers' => array('any'),
'behavior' => array('changes_property'),
'vbo_configurable' => FALSE,
'pass rows' => TRUE,
);
return $actions;
}
function MYMODULE_custom_action($entity, $context) {
// Your action here.
}
関数名はrubik_custom_action_info
。あなたはこれをテーマ内で定義しようとしていませんか?しないでください。別のモジュールに入れてください。テーマはこれのための場所ではありません。
役立つ可能性のある別のモジュールは Commerce Bundle Helper sandbox です。 VBOアクションを宣言するだけでなく、VBO構成を変更することにより、既存のビューにそれを自動的に追加する方法を示します。
アクションを定義したら、一括操作フィールド設定の選択した一括操作の下のビューUIに追加できます。別のチェックボックスになりますalongsideなどのその他のアクションPHP scriptなど。選択すると、選択オプションまたはアクションボタンとして表示されます(VBOフィールドの構成方法によって異なります)。
VBO開発ガイド on d.o.アクションを定義し、オプションのグローバル/バルクごとの設定フォームを追加し、アクションハンドラーを作成するための作業コードの良い例です。
これは非常に必要最小限の例です。
//Will add a "User Action" option to Bulk Operations: User field in Views UI
function MYMODULE_action_info() {
return array(
'MYMODULE_user_action' => array(
//Can be other entities used in a view (e.g. 'node')
'type' => 'user',
'label' => t('User Action'),
'behavior' => array('changes_property'),
'triggers' => array('any'),
//Set to true if you an intermediate options form for your action
//'configurable' => true,
//Set to true if you want additional globaloptions
//'vbo_configurable' => true,
),
);
}
function MYMODULE_user_action(&$entity, $context){
//$entity is the current entity being modified; it can
// modified directly to perform the action on the entity
//$context is an array of contextual information about the
// current state of bulk processing (e.g. items remaining)
// It also contains configurable options values if any were set (see below)
}
//If 'configurable' => true in hook_action_info() item this trio of functions
// will add/process an intermediate form just like any Drupal form
function MYMODULE_user_action($settings, &$form_state){
//$settings['settings'] will contains settings set in
// MYMODULE_user_action_views_bulk_operations_form
}
function MYMODULE_user_action_validate($form, $form_state) {
}
function MYMODULE_user_action_submit($form, $form_state) {
//return an array of values usable by MYMODULE_user_action
}
//If 'vbo_configurable' => true, in hook_action_info() this presents
// additional configurable options for the VBO action.
// It returns a Drupal form array
function MYMODULE_user_action_views_bulk_operations_form($options) {
}
hook_action_info()
の実装により、entity
だけでなく、カスタムエンティティタイプの名前を記述する必要があります。例えば; node
、user
、comment
、_taxonomy_term
_、_field_collection_item
_など。ビューのベーステーブルが計算する限り、アクションを使用できます。 hook_action_info()
内の指定されたエンティティのタイプ。
_/**
* Implements hook_action_info().
*/
function rubik_custom_action_info() {
return array(
'hideit' => array(
'type' => 'node', // Here come's the name of your custom entity type
'label' => t('Custom Action'),
'configurable' => FALSE,
'triggers' => array('any'),
'behavior' => array('changes_property'),
'vbo_configurable' => FALSE,
'pass rows' => TRUE,
),
);
}
_
これを理解するのに少し時間がかかりましたが、機能しています。 officeというカスタムエンティティがあり、新しいvbo表示トグルボタンを作成する必要がありました。
このコードをカスタムOfficeモジュールに配置しました。最初はテーマのtemplate.phpファイルに入れてテストしましたが、drupalブートプロセスでの起動が遅すぎると推測しているため、何らかの理由で機能しませんでした。
/**
* Views Bulk Operation Custom Visible Toggle Button
*/
function office_action_info() { //office was my module name
return array(
'action_off' => array( //name of your function call
'type' => 'entity', //targets all entities on the site
'label' => t('Toggle Visible'),
'configurable' => FALSE,
'behavior' => array('changes_property'), //set the behavior type
'triggers' => array('any'),
),
);
}
function action_off($entity, $context = array()) {
//Populate the variable using entity_load of the associated id.
$eload = entity_load('office', array($entity->office_id));
//Changes the field value for the entity. In this case its the Visible field
$eload[$entity->office_id]->visible = ($eload[$entity->office_id]->visible == 1 ? 0 : 1);
//After editing the entity array, save it. Used current() to get 1st result.
entity_save('office', current($eload));
//not exactly sure what this does, but its to clear the entity cache?
entity_get_controller('office')->resetCache(array($entity->office_id));
}