ограничить количество загружаемых изображений (через модуль imagefield) только 1 кодом/программно


Я использую поле изображения с возможностью загружать неограниченное количество изображений. НО при регистрации пользователя я хочу ограничить возможность только одним изображением. Так что анонимный пользователь, который хочет стать зарегистрированным пользователем, может загрузить только одно изображение. После того, как они станут пользователями, они смогут загружать столько изображений, сколько пожелают.

Кто-нибудь знает, как это сделать?

 1
Author: Raf A., 2012-01-30

1 answers

Вы хотите использовать hook_form_alter для обработки этого только для этой формы, например.

function mymodule_form_alter(&$form, $form_state, $form_id) { 

    if ($form_id == 'user_register') {
        // do stuff here
    }

}

"Материал" - это настоящая проблема, особенно с учетом того, что вы разрешаете неограниченное количество загрузок. Есть предыдущее сообщение об этом с решением для ограниченного набора (

Https://stackoverflow.com/questions/5701488/change-fields-number-of-values-per-role

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

if ($form_id == 'user_register') {

    $form['<image field name>']['#element_validate'] => array('_mymodule_only_one_image'),

}

А затем для вашей функции проверки вы можете просто проверить, существует ли 2-е изображение, и попросить пользователя отправить только одно. Примерный пример кода psuedo здесь, не привязал это к реальной форме.

function _mymodule_only_one_image($element, &$form_state) {

    if (!empty($element['<image_field_name>'][1])) {
        form_error($element, t('Please only upload one image');
    }

}

Другим вариантом было бы попытаться отключить обработчик ajax, который инициирует 2-ю загрузку с помощью вашего собственного пользовательского переопределения jquery, которое вы также можете добавить в эту пользовательскую форму через указанный выше form_alter.

 1
Author: schnippy, 2017-05-23 12:41:25