изменить количество значений поля на роль - PullRequest
1 голос
/ 18 апреля 2011

Мне интересно, как ограничить количество значений фотографии в типе галереи моего пользователя.

Я хочу иметь максимум 10 фотографий для основных пользователей и 30 для VIP-пользователей.

Есть ли шанс сделать это с помощью drupal или мне следует переписать какой-нибудь javascript?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Это продолжается по предложению Джеймса использовать hook_form_alter (). Раньше мне нужно было подобное решение, поэтому я решил попробовать. Это не полностью протестировано, но оно работает настолько, насколько позволяет контролировать количество отображаемых полей загрузки. Я использую его с пределом поля изображения, установленным на 10, на D6 и CCK.

Суть в том, что CCK будет отображать до 10 полей загрузки, но когда вы установите его как неограниченное, он показывает 1 поле, а затем использует кнопку «Добавить еще». Таким образом, если вы используете 10, вы можете ограничить их ниже, но если вы хотите перейти с 30 на 10, вам понадобится другое решение.

Извините, это не точное решение, но оно может немного приблизить вас. Этот код ограничивает поле изображения с пределом от 10, до 4, программно.

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'mycontenttype_node_form') {

    // run some logic to figure out how many uploads, and set it here
    $number_of_uploads = 4;

    // not sure if this does anything, but it is the part of the field that
    // references the upload limit. it does not automatically add or remove
    // fields though
    $form['#field_info']['field_myimagefield']['multiple'] = $number_of_uploads;

    // just an increment var
    $i = 1;

    // we have to unset the fields from here
    foreach ($form['field_myimagefield'] as $key => $value) {
      // check for is_numeric because some are property keys starting with #
      if (is_numeric($key)) {
        if ($i > $number_of_uploads) {
          unset($form['field_myimagefield'][$key]);
        }

        $i++;
      }
    }
  }
}

Дайте нам знать, если вы пойдете по этому пути. У меня нет времени на полное тестирование.

0 голосов
/ 18 апреля 2011

Самый простой способ сделать что-то вроде этого - создать два разных типа контента галереи, позволяя обычным пользователям тип, который допускает 10 фотографий, и VIP-пользователям тип, который допускает 30.

Однако,это создает проблему всякий раз, когда человек «обновляется».Затем они могли бы создать новую галерею, но им нужно было бы повторно загрузить все 30 фотографий.

Если сайт не имеет большого объема, вы можете просто сообщить пользователям, что вы вручную переместите их фотографии дляих.

Конечно, это большая работа для вас, но это избавит вас от необходимости создавать небольшой пользовательский модуль, если вы еще не готовы пойти по этому пути (хотя, если вы знаете,php, это проще, чем может показаться).

Другой вариант - использовать комбинацию Drupal hook_form_alter () и hook_nodeapi () - это предполагаетвы используете CCK, или что любой используемый вами модуль галереи имеет все поля загрузки в одной форме - hook_form_alter() будет проверять роли вашего пользователя и сокращать форму с 30 до 10 фотографий в случае, если они нев роли vip;и hook_nodeapi() после проверки идентификатора роли владельца узла галереи будет отображать только первые 10 фотографий, а не 30. Это сэкономит вам много времени в долгосрочной перспективе, но требует создания небольшого модуля дляс этой целью.

Если не все поля загрузки представлены в одной форме, вы всегда можете проверить, сколько изображений пользователь уже загрузил в соответствии со своими ролями, а затем условно отобразить элементы управления для добавления новых изображений.Есть несколько способов сделать это в зависимости от различных обстоятельств ... это может быть так же просто, как добавить имена ролей в ваши классы тела, а затем использовать css, чтобы избавиться от нежелательных элементов (если вы не слишком требовательны)о том, что люди "взламывают" HTML, чтобы добавить свои изображения, что, вероятно, случается очень, очень редко), или редактируют шаблонный код любого модуля, который вы используете.

...