パネル選択ルールの ctools アクセス チェックを作成したいと考えています。私がやりたいのは、コンテンツ タイプのフィールド値をチェックすることです。フィールドの名前は field_layout で、オプションは 3、2、1 です。
アクセス チェックと設定を作成したところ、ルールが選択ルール オプションに表示されています。問題なく追加でき、思い通りに設定できます。
私が持っている唯一の問題は、ルールが有効にならないことです... :-/
私が使用するコードは次のとおりです。
<?php
/**
* Plugins are described by creating a $plugin array which will
* be used by the system that includes the file.
*/
$plugin = array(
'title' => t('Node: field layout'),
'description' => t('Controls access by field_layout'),
'callback' => 'he_layout_field_layout_ctools_access_check',
'settings form' => 'he_layout_field_layout_ctools_settings',
);
/**
* Custom callback defined by 'callback' in the $plugin array.
*
* Check for access.
*/
function he_layout_field_layout_ctools_access_check($conf, $context) {
// If for some unknown reason that $context isn't set, we just want to be sure.
if (empty($context) || empty($context->data) || empty($context->data->field_layout)) {
return FALSE;
}
// If the layout set in the panels visibility rule settings is different from the field_layout
// access to the pane is denied.
$layout = $context->data->field_layout;
if ($layout !== $conf['field_layout'][$context->data->field_layout[field_language('node', $context->data, 'field_layout')][0]['value']]) {
return FALSE;
}
return TRUE;
}
/**
* Settings form for the 'field_layout' access plugin.
*/
function he_layout_field_layout_ctools_settings($form, &$form_state, $conf) {
$form['settings']['field_layout'] = array(
'#type' => 'radios',
'#title' => t('Layout'),
'#options' => array(
0 => '3',
1 => '2',
2 => '1',
),
'#default_value' => $conf['field_layout'],
);
return $form;
}
コードは次のチュートリアルに基づいています: http://ramlev.dk/blog/2012/03/30/create-a-ctools-access-plugin/
誰かがなぜこれがうまくいかないのか考えましたか?