Organic Groups, добавление материала только в одну группу... как?

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

Аватар пользователя glintwine glintwine 4 июля 2008 в 23:33

Ситуация:
Пользователь состоит в трёх группах (OG).
Пользователь делает запись в блоге (это необязательная групповая нода).
Пользователь может отметить чекбокс куда разместить материал.

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

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

Комментарии

Аватар пользователя Mr.Alinaki@drupal.org Mr.Alinaki@drup... 23 апреля 2009 в 13:38

Не думаю, что актуально уже вам, но:
для 6ого друпала в 2.0-dev необходимо в файле og.module в 2143 строке заменить TRUE на FALSE. Теперь вместо списка будет селект-бокс. Правда, работает он глупо - нельзя будет отказаться от групп.

Аватар пользователя Mr.Alinaki@drupal.org Mr.Alinaki@drup... 3 июня 2009 в 1:09

Совсем забыл Smile Вот решение, вдруг кому-нибудь еще надо:

// Some hook_alter() function that calls _og_form_alters_audience_form_alter().

/**
* Helper function; Make the groups audience accept only a single group.
*/

function mymodule_form_alter(&$form, $form_state, $form_id) {
  if (!empty($form['og_nodeapi']['visible']['og_groups'])) {
    $options = array();
    $options = array('') + $form['og_nodeapi']['visible']['og_groups']['#options'];
    $form['og_nodeapi']['visible']['og_groups']['#type'] = 'select';
    $form['og_nodeapi']['visible']['og_groups']['#multiple'] = FALSE;
    $form['og_nodeapi']['visible']['og_groups']['#options'] = $options;
    // Add own submit handler so we can cast the groups back to an array.
    $form['#submit'][] = 'mymodule_og_audience_form_alter_submit';
  }
}

/**
* Submit handler; Since we permit only a single group per content, we need to
* case to groups into an array
*/

function mymodule_og_audience_form_alter_submit($form, &$form_state) {
  if (!empty($form_state['values']['og_groups']) && !is_array($form_state['values']['og_groups'])) {
      $form_state['values']['og_groups'] = drupal_map_assoc((array)$form_state['values']['og_groups']);
  } elseif (empty($form_state['values']['og_groups'])) {
    $form_state['values']['og_groups'] = array();
  }
}

Если пользователь не выберет ни одну из групп, то документ попадет в личный блог пользователя.