Как скрыть параметры формата ввода и текст справки под текстовой областью?


32

Как скрыть параметры формата ввода и текст справки под текстовой областью при добавлении | редактирования узла?

Снимок экрана - часть, чтобы скрыть выделенный красным прямоугольником


Я думаю, что вы можете сделать это, если вы получите доступ к форме через, hook_form_alterоднако я не уверен в деталях, поэтому я не буду публиковать это как ответ ...
ACM

Ответы:


26

Для Drupal 7 вы можете использовать модуль Simplify . Это позволяет скрыть опции Text Format textarea, а также другие элементы на формах узлов.


3
Если вы посмотрите на его источник ( cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e ), модуль использует jQuery, чтобы скрыть параметры формата текста. Обидно, потому что 1: вы хотите скрыть только текстовый формат и вам не нужен весь модуль, а 2: javascript становится требованием. Почему бы просто не скрыть это с помощью CSS, как предлагает ответ Ionut Adrian Luchian? Это определенно уместно и чисто.
B2F

Упростить не работал последовательно для меня. в некоторых случаях это работало в других нет.
снеговик

Не работал для меня Я использовал тему начальной загрузки, так что, возможно, из-за этого.
sobi3ch

Упрощение не работает для меня тоже.
Артем Ильин

25

Вы можете использовать hook_form_alter в пользовательском модуле, чтобы сделать это.

Например, в Drupal 7:

// hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {
    // We want this on a specific field
    $form['YOUR_FIELD']['und']['0']['format']['#access'] = FALSE;
    return $form;
}

2
это работает, но имеет побочный эффект: он удаляет редактор wysiwyg из текстовой области
castaway

Это помогло мне. В основном я просто хотел очистить ввод текста.
RevNoah

1
лучше упомянуть LANGUAGE_NONE вместо 'und', а также функцию after_build должна иметь проверку на основе ролей в случае, если другие вышестоящие роли могут просматривать поле Text Format.
Анек Мухопадхяй

12

В Drupal 6 есть модуль Better Formats, который делает именно то, что вы хотите, есть версия для 7 разработчиков, но он поставляется с предупреждением, что он находится в стадии разработки. Если ваш сайт все еще находится в разработке, возможно, стоит попробовать.


Кажется, что это хорошо работает для пользователей, которые не были администраторами, даже если вы удалите разрешения для группы администраторов, пользователь 1 все равно увидит опции в D7
joelpittet

Лучшие форматы хорошо работают для D7, стабильны, без серьезных проблем и с выпуском Beta 2 в январе 2016 года.
Duncanmoo

9

Вы можете просто убить элемент формы формата.

function MY_THEME_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_THEME_configure_comment_form';
}

function MY_THEME_configure_comment_form(&$form) {
  unset($form[LANGUAGE_NONE][0]['format']);
  return $form;
}

+1, лучшее решение. Для будущих посетителей замените CUSTOM на имя вашей активной темы. Этот фрагмент кода должен находиться в вашем скрипте template.php в папке активной темы. И если на вашем сайте включена поддержка мультиязычности, замените LANGUAGE_NONE вашим языковым кодом.
Джанака Р Раджапакша

2
CUSTOMпредназначен в качестве вашего собственного имени темы. Вы НИКОГДА не должны жестко кодировать язык, если вам нужно активное использование языка, global $language;чтобы схватить его.
DoubleJosh

Примечание: LANGUAGE_NONEконстанта со значением und... не используйте und.
doublejosh

Это также убивает wysiwyg
Digitgopher

7

Я думаю, что лучшее решение - запретить доступ к элементу выбора формата текста. Если вы полностью отключите его, вы столкнетесь с нежелательными побочными эффектами как исчезающий редактор WYSIWYG. Поэтому я предлагаю следующий код.

function MY_MODULE_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_MODULE_hide_text_format';
}


function MY_MODULE_hide_text_format(&$form) {
  $form[LANGUAGE_NONE][0]['format']['#access'] = false;
  return $form;
}

Это отличное решение, если вы хотите скрыть его только на одном конкретном поле. И WYSIWYG остается функциональным.
Далин

6

Используйте CSS, самый простой способ. поджигатель

#body-add-more-wrapper #edit-body-und-0-format {display: none;}

Сила CSS и Firebug

Удачи.


3
Я бы не рекомендовал «хотя это работает», скрывать CSS.
13

не ответ, бегство
Pan Chrono

5
Зачем ? Это отличный ответ, потому что вопрос состоит в том, чтобы скрыть это, а не удалить его. Это не то же самое, что скрытие, которое может вызвать угрозу безопасности или быть плохим для SEO ... Вы уже определили разрешения в конфигурации текстового формата, так в чем же проблема?
B2F

1
Я бы предпочел скрыть это. +1 голос за тебя.
Алисса Гоно

Модуль инжектора css творит чудеса. смотрите: prntscr.com/cieuvs
Патоши パ ト シ

5

ДЛЯ Drupal 7

function MODULENAME_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {

      if ($callback === 'filter_process_format') {
        $callback = 'MODULENAME_filter_process_format';
      }
    }
  }
}


function MODULENAME_filter_process_format($element) {
  $element = filter_process_format($element);

  // Change input format to "Filtered HTML" for body fields of NODETYPE_NAME

  if ($element['#bundle'] == 'NODETYPE_NAME' && $element['#field_name'] == 'body') {

    $element['format']['format']['#default_value'] = 'filtered_html';
    $element['format']['format']['#format'] = 'filtered_html';  
    $element['format']['format']['#value']  = 'filtered_html';
    $element['#format'] = 'filtered_html';

  }
  return $element;
}

Это отличный метод, если вы хотите скрыть его во многих / всех полях.
Далин

2

Другой простой способ скрыть параметр формата ввода - удалить все остальные форматы ввода из профилей пользователей, для которых вы хотите скрыть параметр. Для этого зайдите в admin-> configuration-> входные форматы и удалите все пользовательские роли из всех других форматов ввода, кроме того, который вы хотите назначить по умолчанию.


6
Работает, только если вы хотите включить простой текст. Потому что вы не можете отключить это.
Флетч

в точку. Вы не можете иметь только «Отфильтрованный текст». Извините, но этот ответ вводит в заблуждение.
nerdoc

2

Я сделал это:

Снимите флажок «Использовать отфильтрованный текстовый формат HTML» и «Управлять текстовыми форматами и фильтрами» из списка разрешений «Люди» для анонимных и авторизованных пользователей, чтобы они не могли использовать CKeditor.

Конечно, вы можете отключить его из CSS с помощью «display: none;» для определенного класса div (это .filter-wrapper) и скрыть всю область, которую вы указали выше, но в этом случае область скрыта для всех, включая суперпользователя.


1

Установите модуль CSS Injector (в настоящее время существует только рабочая версия для разработки для Drupal 8).

Затем перейдите на страницу администрирования CSS Injector (/ admin / config / development / css-injector). Создайте новое правило CSS с этим кодом (или любым кодом, который применяется к классу текста области форматирования):

.filter-guidelines {
    display: none;
}

Выберите применить его к Семи темам (или любой используемой теме администратора). Сохранить и наслаждаться!


Установите инжектор CSS 1.x, поскольку 2.0 старше. Вот предварительный просмотр того, как это выглядит: prntscr.com/cieuvs - Этот модуль творит чудеса для инъекций CSS по сравнению с другими модулями, такими как CPN (код на узел)
Патоши シ ト

0

Вы не можете удалить формат ввода «Простой текст». И RTE не отображается, когда вы используете формат ввода «Простой текст».

Я буду использовать опцию CSS.


Селектор формата ввода не появляется, когда вошедший в систему пользователь может использовать только формат ввода; этот единственный входной формат может быть другим, и селектор не будет выглядеть одинаково.
kiamlaluno

0

Я использую как «удаление всех других форматов ввода из профилей пользователей», так и css.


0

Попробуйте упростить модуль.

Упрощение позволяет скрывать определенные поля от пользовательского интерфейса. Это помогает избавиться от ненужных форм и сделать редакторы контента более удобными для пользователя.


упростить работу для других полей, но я не мог заставить его работать для форматов ввода.
Druvision

0

Если вы хотите скрыть форматы, но при этом сохранить их доступными, попробуйте модуль « Упрощенные форматы »: https://www.drupal.org/project/simplified_formats

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


0

Вы также можете использовать модуль Скрыть форматы .

Скрыть форматы позволяет свернуть раскрывающиеся списки «текстовый формат» или «формат ввода» для очистки пользовательского интерфейса.


Это отличный модуль, но он делает коробку форматов свернутой, а не скрытой.
Druvision

0

Для Drupal 8. Это удаляет область форматирования для двух полей.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function CUSTOM_MODULE_form_FORM_ID_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['#after_build'][] = 'CUSTOM_MODULE_eform_application_after_build';
}

function CUSTOM_MODULE_eform_application_after_build ($form) {
  unset($form['field_experience']['widget'][0]['format']);
  unset($form['field_miscellaneous']['widget'][0]['format']);
  return ($form);
}

ОП указал D7 в вопросе
Джефф

1
Согласовано. Тем не менее, на данный момент очень мало онлайн для D8. Я полагаю, я мог бы сделать свой собственный вопрос, а затем ответить на него. Никогда не пробовал это.
Андре Ангелантони

это был бы лучший подход, только потому, что ОП в этом случае очень специфичен в отношении версии
Джефф

Не могли бы вы указать, как это осуществить? Как я могу найти form_id?
Джон

0

Для Drupal 7 вы можете:

1) Используйте hook_theme_registry_alter(&$theme_registry)из модуля для изменения реестра темы, экв. определение процессоров темы.

2) Затем изменить три тематические функции, theme_filter_tips, theme_filter_tips_more_infoи theme_filter_guidelines, и заставить их не возвращать ничего. Следующее:

Это целевая функция. Все вышеперечисленные функции темы будут перенаправлены на это.

function _mymodule_filter_tips($tips, $long = FALSE, $extra = ''){
  return '';
}

/**
 * Implements hook_theme_registry_alter
 */
function mymodule_theme_registry_alter(&$theme_registry) {
  $theme_registry['filter_tips']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_guidelines']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_guidelines']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_tips_more_info']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips_more_info']['function'] = '_mymodule_filter_tips';
}

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


0
/ hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {

    // We want to hide input formats and we can do it like following
    $form['body']['und']['0']['format']= '<div style="display:none;">';
    $form['body']['und']['0']['format']= '</div>';   

    return $form;
}

В основном работал для меня с этими небольшими изменениями.

$form['body'][LANGUAGE_NONE][0]['format']['#prefix']<br>
$form['body'][LANGUAGE_NONE][0]['format']['#suffix']
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.