УрокСкрываем подсказки фильтра по редактированию

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

Метод скрытия подсказок через css-атрибут display: none; конечно работает для пользователей, но вот боты (как спамерские, так и поисковые) всё равно в коде видят их. А поисковые боты ещё и обижаются на скрытый текст, поэтому скрывать через стили я бы не рекомендовал.

Чтобы красивым образом скрыть подсказки по редактированию, добавьте в template.php следущую функцию, добавив в названии своё имя темы:

/**
 * Override default theme_filter_tips().
 */
function ИМЯТЕМЫ_filter_tips($variables) {
  $tips = $variables['tips'];
  $long = $variables['long'];
  $output = '';
 
  $multiple = count($tips) > 1;
  if ($multiple) {
    $output = '<h2>' . t('Text Formats') . '</h2>';
  }
 
  if (count($tips)) {
    if ($multiple) {
      $output .= '<div class="compose-tips">';
    }
    foreach ($tips as $name => $tiplist) {
      if ($multiple) {
        $output .= '<div class="filter-type filter-' . drupal_html_class($name) . '">';
        $output .= '<h3>' . $name . '</h3>';
      }
 
      if ($multiple) {
        $output .= '</div>';
      }
    }
    if ($multiple) {
      $output .= '</div>';
    }
  }
 
  return $output;
}

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

По сути, эта функция перекрывает стандартную функцию вывода фильтров theme_filter_tips. В новой функции я убрал кусок кода, который выводит подсказки возле фильтров:

      if (count($tiplist) > 0) {
        $output .= '<ul class="tips">';
        foreach ($tiplist as $tip) {
          $output .= '<li' . ($long ? ' id="filter-' . str_replace("/", "-", $tip['id']) . '">' : '>') . $tip['tip'] . '</li>';
        }
        $output .= '</ul>';
      }

Чтобы убрать ссылку "Подробнее о форматировании" рядом с форматами ввода, необходимо перекрыть функцию темы theme_filter_tips_more_info, вернув пустую строку, вместо ссылки.

Итак, добавляем в template.php:

/**
 * Override default theme_filter_tips_more_info().
 */
function ИМЯТЕМЫ_filter_tips_more_info() {
  return '';
}

Снова сбрасываем кэш темы и любуемся красивыми форматами ввода без лишнего хлама.

Комментарии

Аватар пользователя Дмитрий
Дмитрий написал:

Ещё вариант для той же цели - модуль better_formats

19.10.2011 22:21
Аватар пользователя Тайный поклоник
Тайный поклоник написал:

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

19.10.2011 23:20
Аватар пользователя vegas
vegas написал:

Очень пригодилась статья! Словами не передать :) Жаль, не сразу заметил. Зато мануал еще немного подучил! :))) Спасибо!

25.10.2011 21:13
Аватар пользователя vegas
vegas написал:

А как сделать, чтобы вообще не добавлялось поле с фильтром, если не админ? Конечно при условии, что для всех остальных разрешен только один формат.

27.10.2011 17:46
Аватар пользователя Spleshka
Spleshka написал:

В начале функции theme_filter_tips() вставить например такой код:

global $user;
if ($user->uid != 1) {
  return;
}
27.10.2011 20:02
Аватар пользователя vegas
vegas написал:

а под полем ввода текста таки добавляется пустой fieldset, и я никак не могу сообразить, какая функция его выводит :(
Чё-то не нравится он мне. Некрасиво. Доктор, помоги его убрать/вырезать/ампутировать... Пожалуйста!

28.10.2011 15:46
Аватар пользователя vegas
vegas написал:

написал "пустойfieldset" как тег :)

upd: не получается зачеркнуть, поэтому можно удалить это сообщение

28.10.2011 15:45
Аватар пользователя vegas
vegas написал:

И надо бы дать возможность поправлять собственные каляки, как раньше :)

28.10.2011 03:00
Аватар пользователя vegas
vegas написал:

Разобрался с fieldset(ом). Новая тема Drupalace.ru вдохновила! :)

02.11.2011 08:28
Аватар пользователя Spleshka
Spleshka написал:

Совсем забыл про вопрос, извиняюсь :) Если вдруг ещё пригодиться - в node.tpl.php перед выводом контента скрыть выбор фильтров:

<?php hide($content['comments']['comment_form']['comment_body']['und'][0]['format']); ?>
02.11.2011 14:26
Аватар пользователя FT
FT написал:

А как для 7ки вообще убрать форматы ввода вместе с подсказками через template.php?

06.12.2011 07:47
Аватар пользователя FT
FT написал:

я буду больше спать!
я буду больше спать!

06.12.2011 16:08
Аватар пользователя Spleshka
Spleshka написал:

Вот это правильно

06.12.2011 17:15
Аватар пользователя Сергей
Сергей написал:

Не работает. Просто ничего не меняется. Кеш очищал, название темы менял.

11.02.2012 14:16
Аватар пользователя Spleshka
Spleshka написал:

Друпал 7 ? Если да - то не может не меняться. Ищите ошибку у вас, т.к. я этим кодом на этом сайте скрывал подсказки.

11.02.2012 14:48
Аватар пользователя Сергей
Сергей написал:

Да, drupal 7. Но тут загадка какая-то у меня ... даже через css пытаюсь скрыть (display:none;) и все равно не скрывается! Я в шоке. Ума не приложу что может быть.

11.02.2012 15:14
Аватар пользователя Spleshka
Spleshka написал:

Вы точно в правильной теме всё это делаете?) А то у меня бывали случаи, что я нетуда код записывал, и долго не мог понять, почему ничего не работает.

11.02.2012 15:22
Аватар пользователя Сергей
Сергей написал:

Вы правы, спасибо огромное! Форма вызывается из темы SEVEN (создание материалов) Указанный выше код вставляю в template.php этой темы, все работает. А можно ли как-то вызвать его (код) через свою тему? (не хотелось бы что-то менять в системной)

11.02.2012 15:46
Аватар пользователя Spleshka
Spleshka написал:

К сожалению, нельзя. Однако можно создать свою тему, указав в качестве базовой - SEVEN. Далее положите в эту тему template.php со своими настройками и включите вашу тему в качесте темы админки.

11.02.2012 16:15
Аватар пользователя Sirega
Sirega написал:

А как убрать полоску которая расширяет экран, находится в блоке div class="grippie.

08.03.2012 04:57
Аватар пользователя Sirega
Sirega написал:

Не экран, а поле комментария

08.03.2012 04:58
Аватар пользователя Spleshka
Spleshka написал:

В каком Друпале?

12.03.2012 00:03
Аватар пользователя Zestagio
Zestagio написал:
function ИМЯТЕМЫ_form_alter(&$form, &$form_state, $form_id) {
  $form['comment_body']['#after_build'][] = 'ИМЯТЕМЫ_customize_comment_form';
}
 
function ИМЯТЕМЫ_customize_comment_form(&$form) {
  unset($form['und']['0']['format']);
  return $form;
}

Вот так можно убрать форматы ввода из любой формы

04.04.2012 23:45
Аватар пользователя Роман
Роман написал:

Если по умолчанию для гостевых комментариев стоит filtred_html с wysiwyg, то редактор работать не будет. поле комментария становится plain text

06.04.2012 00:53
Аватар пользователя Никто
Никто написал:

думаю не сложно дописать, что бы по умолчанию поле было filter html

06.04.2012 12:15
Аватар пользователя Марина
Марина написал:

Хочу сразу сказать спасибо: на вашем сайте нашла множество решений своих вопросов!
Есть еще один: после того как скрыла подсказки к форматам ввода и установила формат ввода по умолчанию (прошло какое-то время) и пропала сама форма ввода комментария!
Появляется только по ссылке "ответить".
Может подскажите, куда копать?

31.05.2012 05:32
Аватар пользователя Spleshka
Spleshka написал:

Модули дополнительные не устанавливали? Фильтры-то к форме комментариев имеют, на самом деле, довольно слабое отношение.

31.05.2012 17:40
Аватар пользователя Марина
Марина написал:

Устанавливала. Просто обнаружилась пропажа самой формы не сразу (ведь все работало, я ее и не проверяла :).
Форма комментария есть, если идти по ссылке "ответить" на уже существующий комментарий.
А если добавить свой, то между тэгами пусто.
Пыталась вернуть исходный файл .tpl (у меня комменты были темизированны), не помогло...

01.06.2012 05:03
Аватар пользователя Spleshka
Spleshka написал:

Что-то мне подсказывает, что вы просто в настройках типа материала поставили "Отображать форму комментариев на отдельной странице" :)

01.06.2012 17:50
Аватар пользователя Марина
Марина написал:

:) Это было бы слишком просто. Стоит "отображать комментарии на той же странице" :(

04.06.2012 04:42
Аватар пользователя bigferumdron
bigferumdron написал:

Буду благодарен, если ответите на несколько вопросов по теме:

1. Если скрыть филдсет с выбором формата ввода через node.tpl.php - то для формы ввода будет использован формат ввода, назначенный для роли по умолчанию?

2. Как так получается, что в шаблоне node.tpl.php реально скрыть $content['comments']['comment_form']['comment_body']['und'][0]['format'] а непосредственно если переопределять саму форму комментирования, через hook_form_ID_alter - то там вообще отсутствует этот массив с форматом.. Получается он формируется где-то раньше, т.е не вместе с формой комментов? дико интересно...

3. Подскажите пожалуйста, как можно програмно установить формат ввода по умолчанию для конкретной формы, допустим для формы комментариев? чтобы для всех ролей, в этой форме был один и тот же формат ввода, скажем plain_text . Пользуюсь ckeditor и получается ситуация, что несмотря на то, что для поля комментов по умолчанию задан формат ввода plain_text - у админа все равно показывается весь редактор с кучей кнопок..

01.06.2012 15:31
Аватар пользователя Spleshka
Spleshka написал:

1. Да
2. Форматирование цепляется к элементу textarea уже после обработки всей формы.
3. filter_process_format() там пример есть.

01.06.2012 18:01
Аватар пользователя bigferumdron
bigferumdron написал:

Что касательно второго вопроса, поясню, почему это важно. Просто использую модуль ajax_comments . В этом модуле, форма по кнопке ответить подгружается следующим образом:

$form_build = drupal_get_form("comment_node_{$node->type}_form", (object) array('nid' => $node->nid, 'pid' => $pid));
  $form = drupal_render($form_build);

И получается, даже не смотря на то, что в шаблоне ноды node.tpl.php я убираю филдсет с выбором формата, в генерируемой на аяксе форме, он все равно есть.
Вопрос как его убрать не правя сам модуль аякс комментариев?

01.06.2012 18:07
Аватар пользователя Spleshka
Spleshka написал:

Посмотрите что возвращено в $form_build, там уже должны быть записи о фильтрах

01.06.2012 22:25
Аватар пользователя bigferumdron
bigferumdron написал:

Да, все верно, там они уже есть. Но ведь это внутри модуля ajax_comments . Но ведь это не друпал вей хакать модули чужие.. Если б как-то внутри другого модуля, своего.. или теплейт.пхп..

Извините, что возможно напрягаю.

01.06.2012 23:58
Аватар пользователя Игорь
Игорь написал:

Очень красивый дизайн и великолепно сделаны коменты. Красавчик! Большая работа проделана.

09.11.2012 23:05
Аватар пользователя Эдик
Эдик написал:

Плюсую. Снимаю шляпу перед автором дизайна! Особенно понравилось оформление комментов.

01.02.2014 08:39

Комментировать