Як приховати та / або запобігти доступ до полів у такій формі, як group_audience для органічних груп


9

Це мені непокоїть деякий час. Коли я намагаюся приховати такі поля, як поле групової аудиторії чи налаштування публікації від форми, під час перевірки форма встановила обидва ці поля на нульове значення, навіть якщо значення дефолту як було правильно задекларовано

Я намагався використовувати Invisible, #access, unset приховане, нічого не працює! Це дуже неприємно, оскільки для моїх поточних користувачів користувачі можуть редагувати лише невеликі шматочки свого профілю на той час, наприклад, лише адресу або зображення, тож якщо я сховаю групову аудиторію, користувач закінчується вигнаним із груп, до яких він належить редагувати.

Я в кінцевому підсумку використовував код нижче, щоб приховати ці поля, зберігаючи користувача у своїй групі.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

Хтось подумає про кращий спосіб досягти цього?

Дякую


Ця відповідь не є ідеальною, оскільки використання все ще може змінити значення при маніпуляції з DOM
iStryker

Відповіді:


6

Редагувати:

Гаразд я зрозумів це. Помістіть це у свій спеціальний модуль:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Це встановить заголовок сюжетного вузла "гарячі речі", і він НЕ буде відображатися на сторінці, тому що #access = ЛЖЕ;

Ви можете додати більше контролю за деталізацією всередині, як-от гак_form_alter ()

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Це працює для Drupal 6 & 7.

Стара відповідь (ігнорування):

Минуло деякий час, відколи я зробив щось подібне, тож я можу помилитися. Якщо встановити [#value]елемент форми, він не буде видно на формі.

Я робив це в Drupal 6, hook_form_alter()у спеціальному модулі. Я не знаю, чи буде це працювати в Drupal 7, і я не знаю, чи можна це зробити у функції попередньої обробки


Дякую за вашу відповідь, хоча в моєму випадку, на жаль, це не спрацювало, у полях форм вже є подане #value, оскільки вони редагують форми
silkAdmin

@silkAdmin Будь ласка, дивіться нові зміни
iStryker

Дякуємо Stryker, що знайшли час, щоб розкопати це, якщо подія, якщо ваш вище технік працює, приховує поля, схоже, що значення за замовчуванням не враховується і при подачі. Тож я в кінцевому підсумку з користувачем все ще виганяю з їх групи під час кожного редагування профілю. Поки здається, що лише суфіксна хитрість #prefix # викликає нормальну поведінку.
silkAdmin

do $ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker

5

Ви також можете просто додати клас "CSS-прихований" до елемента форми

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

Як згадувалося раніше iStryker, змінити значення все одно можна було б за допомогою маніпуляції з DOM. Однак це приємний, простий спосіб приховати поле форми (або будь-який інший елемент візуалізації). element-hiddenКлас визначено в system.base.css.


Друже, ти мене врятував. Дякую. Усі інші методи, які я бачив, не виводять елементи на саму форму. У моєму випадку я хочу приховати елементи форми в модулі contrib, який очікує, що ці елементи будуть у формі, інакше вони не спрацюють належним чином. Ваше виправлення CSS приховує небажані елементи, але все одно працює. Дякуємо також, що зауважили, що це не є "хакерським" і працює лише коли потрібно лише спростити інтерфейс, який ви представляєте довіреним користувачам редактора.
Маріо Авад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.