CCK поле с набором вариантов для выбора. Ограничить этот набор в зависимости от роли или признака в профиле. Как?

Главные вкладки

Аватар пользователя stasroot stasroot 23 февраля 2011 в 10:16

Всем доброго времени суток!

Подскажите пожалуйста как сделать такую штуку:
Создать CCK поле со списком выбора примерно из надцати пунктов, а затем при просмотре/создании ноды с этим ССК полем показать возможным для выбора только 2-4 варианта для выбора в зависимости от того какой признак стоит у пользователя в профиле.

Пояснение: есть 3 спортсмена, один обладает признаком 'байдарка', другой признаком 'каноэ', третий признаком 'академичка'.
Есть ССК поле с вариантами: 'ничего' 'С1' 'С2' 'С4' 'К1' 'К2' 'К4' 'А1' 'А2' 'А4' 'А8' 'А2р' 'А4р' 'А8р'.
Как сделать так чтобы когда пользователь с признаком 'байдарка' видел при создании материала содержащим такое поле ССК только варианты: 'ничего' 'К1' 'К2' 'К4'? Чтобы остальные варианты не мешались ему так как он никогда не тренируется в четверке распашной на академической лодке.

Если задача сформирована не ясно я постараюсь пояснить то что не понятно. Отмечу, что все пользователи с этим признаком относятся к одной роли "Спортсмен"
Надеюсь на вашу помощь, с уважением.

Комментарии

Аватар пользователя stasroot stasroot 23 февраля 2011 в 13:50

Точно! Спасибо за подсказку. Только я к сожалению очень слаб в программировании на php.

Я так понимаю значение на поле в случае php должно быть такого плана:

Если переменная из массива пользовательских данных равна значению 'Байдарка' показать '' 'К1' 'К2' 'К4'
Если переменная из массива пользовательских данных равна значению 'Каноэ' показать '' 'С1' 'С2' 'С4'
Если переменная из массива пользовательских данных равна значению 'Академичка' показать '' 'A1' 'A2' 'A4' 'A8' 'A2r' 'A4r' 'A8r'
Если пользователь не обладает признаком вида спорта или он отличен от вышеперечисленных показать весь список вариантов включая пустое значение.

Только вот все это я не могу сделать, подскажите как. Очень прошу помочь.

Заранее спасибо.

Аватар пользователя stasroot stasroot 28 февраля 2011 в 23:21

Подскажите пожалуйста. Мои мысли двигаются в сторону чего то такого:

<?phpif $profile_osnovnoy_vid_sporta = 'Гребля на каноэ' {array('0' => 'C1' '1' => 'C2' '2' => 'C4')}
if $profile_osnovnoy_vid_sporta = 'Гребля на байдарке' {array('0' => 'K1' '1' => 'K2' '2' => 'K4')}
$profile_osnovnoy_vid_sporta = 'Гребля на академичке' {array('0' => 'A1' '1' => 'A2' '2' => 'A4')}
else {array ('0' => 'C1'   '1' => 'C2'  '2' => 'C4' .....  '10' => 'другое')} ;?>

Но я очень сильно сомневаюсь что этот код будет работать и даже что он правилен с точки зрения его синтаксиса...
Очень нужно понять и реализовать это так как что то подобное надо будет делать и для других мест на сайте в будущем.

Аватар пользователя stasroot stasroot 10 ноября 2015 в 11:47

Попробовал так:
<?phpif ($profile_osnovnoy_vid_sporta = 'Гребля на каноэ') return array('C1', 'C2', 'C4');?>

Вот что получилось при сохранении поля CCK:

* Ошибка при проверке значения, пожалуйста повторите. Если ошибка повторится, сообщите администратору сайта.
* The default value PHP code returned an incorrect value.
Expected format:

return array(
0 => array('value' => значение для value),
// В большинстве случаев вам нужно остановиться здесь. Введите дополнительные значения,
// если хотите, чтобы 'значение по умолчанию' было многозначным:
1 => array('value' => значение для value),
2 => ...
);

Returned value: Array ( [0] => C1 [1] => C2 [2] => C4 )

Модулем devel посмотрел для меня в профиле есть такое значение. Посмотретьь можно на скриншоте вывода модуля devel. Гляньте пожалуйста.

Аватар пользователя stasroot stasroot 1 марта 2011 в 2:04

Спасибо за помощь! Вот такой вариант уже работает для каноэ варианта:

<?phpif ($profile_osnovnoy_vid_sporta = 'Гребля на каноэ') 
return array('C1', 'C2', 'C4');?>

Думаю дальше справлюсь. Если будутт вопросы по теме задам.

Аватар пользователя stasroot stasroot 1 марта 2011 в 9:47

а вот и не справляюсь. Делаю дальше конструкцию чтобы в зависимости от вида спорта высвечивались нужные значения а в итоге высвечиваются все допустимые значения из списка допустимых, т.е. как будто код мой php просто игнорируется системой.
Посмотрите пожалуйста, что я не так делаю?

if ($profile_osnovnoy_vid_sporta == 'Гребля на каноэ'): return array('C1', 'C2', 'C4');
   else  if
($profile_osnovnoy_vid_sporta == 'Гребля на байдарке'): return array('K1', 'K2', 'K4');
   else  if
($profile_osnovnoy_vid_sporta == 'Гребля академическая'): return array('A1', 'A2', 'A3', 'A4', 'A2r', 'A4r', 'A8r');
Аватар пользователя stasroot stasroot 1 марта 2011 в 10:58

никогда раньше не работал с php в друпале. Похоже что мой вариант что чуть выше не воспринимается друпалом, похоже он ожидает в поле php увидеть только массив данных и все.
А поскольку у меня данные должны выводится в зависимости от параметра, то похоже пахнет многомерным массивом с условиями... но вот как? или я все усложняю?