LoginSignup
0
0

More than 1 year has passed since last update.

DraggableViewsに関するTips

Last updated at Posted at 2016-06-28

仕様

  • Viewsでコンテンツの一覧を表示する
  • 上記の一覧では、DraggableViewsを使い、表示順を変更できる
  • 表示順の変更後、「順番の保存」ボタン押下時に、Rulesで並び替えられたことを検知する

課題

DraggableViewsはRulesのイベントを定義しているので、
順番の変更が行われたことをRulesで検知することは容易。
ただし、何のコンテンツの順番が変更されたかを知る手段がない。
(複数画面でDraggableViewsを使い、コンテンツを並び替える機能がある場合、
どの画面で並び替えられたか検知できない)

機能実現

そこで、以下の実現手段を考えた。

MYMODULE.draggableviews.inc.php
/**
 * Implements hook_draggableviews_handler_native_arguments_alter().
 */
function MYMODULE_draggableviews_handler_native_arguments_alter(&$arguments, $view, &$form_values) {
  $node = node_load($view->nid);
  rules_invoke_event_by_args('MYMODULE_rules_event_contact_list_sorted', $node);

}
MYMODULE.rules.inc.php
/**
 * Implements hook_rules_event_info().
 */
function MYMODULE_rules_event_info() {
  $items = array(
    'MYMODULE_rules_event_contact_list_sorted' => array(
      'label' => t('A contact list has been sorted'),
      'group' => t('MYMODULE'), 
      'variables' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('node'),
        ),
      ),
    ), 
  );
  return $items;
}

DraggableViewsのAPIで順番の変更をハンドリングし、
自前で作ったRulesのイベントを呼んであげる。
すると、Rulesの Condition と Action で ノード情報 が使えるため、
コンテンツタイプを判定することが可能となる。

おわりに

DraggableViewsとRulesとで機能実現を行った。
もっとスマートな実現方法があればご教示いただきたく。

後日談

views_get_page_view()が便利。

フックのパラメータに$viewが無い場合、
views_get_page_view()を使えば、
$viewを取得し、利用できる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0