Удалить поле subject в форме Privatemsg

Аватар пользователя Сергей Березин Сергей Березин 10 октября 2016 в 10:42

Друзья, здравствуйте!

Я здесь новенький. Надеюсь на ваше понимание.

Хотел бы удалить поле subject в форме создания письма - messages/new - модуля Privatemsg.

Думаю сделать это с помощью hook_theme() и unset в template.php, но не знаю как.

0 Thanks

Лучший ответ

Аватар пользователя sergeybelya sergeybelya 10 октября 2016 в 18:06
1

пробуйте $form['subject']['#access'] = false;

Комментарии

Аватар пользователя Сергей Березин Сергей Березин 10 октября 2016 в 14:51

Спасибо!

Всё понял и таким макаром удалил subject:

<?php
function bartik_form_privatemsg_new_alter(&$form, &$form_state) {
         unset(
$form['subject']);
}
?>

Но проблемка вылезла. После отправки такая ошибка выводится:

«Notice: Undefined property: stdClass::$subject in privatemsg_new_validate() (line 541 of /sites/all/modules/privatemsg/privatemsg.pages.inc)»

Не подскажете что нужно править в том файле?

Аватар пользователя sergeybelya sergeybelya 10 октября 2016 в 17:52

Ну так вы удаляете поле, которое потом проверяется в другой функции, а там его нет - отсюда и ошибка. Нужно делать это в своем модуле и там же перебивать функцию валидации. Не проще ли просто скрыть это поле стилями в данном случае? Или пробуйте $form['subject']['#access'] = false;

Аватар пользователя Сергей Березин Сергей Березин 10 октября 2016 в 18:05

Я понял почему это замечание показывается.
Но не думал, что оно будет показываться.
Думал, что все сделано таким обращом, что после использования unset всё будет гладко.

Скрыть поле нельзя. Нужно именно удалить напрочь, чтобы его не было в HTML коде странички. А так бы и вопроса не было, мог стилем css скрыть.

Аватар пользователя Сергей Березин Сергей Березин 10 октября 2016 в 18:55

Да, ваш вариант работает и всё нормально.
А в чём разница между unset и false именно в данном случае?
Ведь поле полностью удалено как в случае с unset.

Аватар пользователя sergeybelya sergeybelya 10 октября 2016 в 19:06
1

unset просто удаляет поле из массива формы, но при этом функция валидации его ожидает, поскольку вы не указали, что к нему нет доступа - https://api.drupal.org/api/drupal/developer%21topics%21forms_api_referen..., http://drupal.stackexchange.com/questions/139404/difference-between-hide...

Аватар пользователя Studio VIZA Studio VIZA 10 октября 2016 в 17:38
1
Сергей Березин wrote:

Notice

Это не ошибка, но предупреждение. Попробуйте обновить базу, запустить крон, очистить кэш. Для начала.
В ряде случаев это помогает.

Аватар пользователя Сергей Березин Сергей Березин 10 октября 2016 в 17:57

Кэш очистил, крон запустил и базу обновил, но не помогло.

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