Убрать возможность для пользователя выбирать формат ввода.

31 марта 2011 в 15:36
Аватар пользователя vic vic 0 51

Создал свой тип материала с несколькими текстовыми областями.
Нужно, чтобы для одной текстовой области был формат ввода full_html, а для другой filtred_html.

В друпале сейчас, к сожалению, нет возможности указать, чтобы некоторая текстовая область имела ОПРЕДЕЛЕННЫЙ формат ввода.
Можно лишь указать либо 'простой текст', либо 'на выбор пользователя'.
Как можно исправить эту ситуацию? Может есть подходящие модули?

Комментарии

Аватар пользователя vic vic 0

"NightL" wrote:

Этот модуль для drupal 6.x, для 7.x версия в разработке.

Вот что в описании модуля:
Most of the features in BF are in Drupal 7 core now.

31 марта 2011 в 16:42
Аватар пользователя vic vic 0

"NightL" wrote:
В 7-ке эти функции вроде как уже интегрированы

В том то и дело, что решения в семерке я не нашел. Может конечно что то упускаю...
Подскажите, если кто осведомлен.

1 апреля 2011 в 7:02
Аватар пользователя vic vic 0

Задать нужный формат можно путем переопределения формы hook_form_alter()
и там для нужной формы указать

'#format' => 'filtered_html',

А вот как убрать возможность выбора формата, пока не знаю.
Приходит в голову только скрыть стилями Wink Но это самое плохое решение.
Через hook_form_alter() убрать не получается, т.к. навешивание возможности выбора видимо идет позже.
Отвечает за это функция filter_process_format() из модуля filter.

Вот такие размышления пока.

1 апреля 2011 в 8:38

Я могу ошибаться, но возможно стоит настроить права на использование определенных форматов. Если у пользователя будет право только, к примеру на Filtered HTML, то форма выбора показываться не будет. (Собственно это и делает better_formats). Возможно это в 7-ке устроили.

1 апреля 2011 в 9:48
Аватар пользователя vic vic 0

"abarmot" wrote:
Я могу ошибаться, но возможно стоит настроить права на использование определенных форматов. Если у пользователя будет право только, к примеру на Filtered HTML, то форма выбора показываться не будет. (Собственно это и делает better_formats). Возможно это в 7-ке устроили.

Совершенно верно! НО, у меня пользователь должен иметь права доступа и в full-html и к filtered-html.
В том то и проблемма.

1 апреля 2011 в 14:32
Аватар пользователя olk olk 0

vic wrote:
"abarmot" wrote:
Я могу ошибаться, но возможно стоит настроить права на использование определенных форматов. Если у пользователя будет право только, к примеру на Filtered HTML, то форма выбора показываться не будет. (Собственно это и делает better_formats). Возможно это в 7-ке устроили.

Совершенно верно! НО, у меня пользователь должен иметь права доступа и в full-html и к filtered-html.
В том то и проблемма.

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

12 мая 2011 в 10:20
Аватар пользователя vic vic 0

Ну я нашел только такое решение.
Для текстового поля указывается значение по умолчанию - ПРОБЕЛ и указываю желаемый формат ввода.
Далее в форме я с помощью css скрываю виджет выбора формата ввода.

Решение далеко не идеальное, но лучше я пока не нашел.
Пишите свои решения.

24 апреля 2011 в 18:21

Подписываюсь на топик.

Ужасно в семерке видеть такое упущение! Банальное действие - назначить разным типам материалов разные форматы ввода по умолчанию - невозможно реализовать штатными средствами! Sad

VIC, вы не могли бы дать пример того, что нужно прописывать в form_alter?

7 мая 2011 в 15:03
Аватар пользователя vic vic 0

"tyrk" wrote:
VIC, вы не могли бы дать пример того, что нужно прописывать в form_alter?

Суть в чем - нужно указать желаемый формат ввода и убрать возможность выбора формата.

Задать желаемый формат ввод можно двумя способами:
1) В настройках текстового поля указывается значение по умолчанию - ПРОБЕЛ и указываю желаемый формат ввода.
2) Можно прописать желаемый формат в hook_form_alter. У меня для поля body получилось так
<?php $form['body']['ru'][0]'#format'] = 'filtered_html'?>
или если более универсальней
<?php $form['body'][$form['#node']->language][0]'#format'] = 'filtered_html'?>

А вот как убрать возможность выбора, я бы тоже хотел узнать.
Сам пока скрыл соответствующий виджет стилями.

12 мая 2011 в 10:14

vic wrote:

2) Можно прописать желаемый формат в hook_form_alter. У меня для поля body получилось так
<?php $form['body']['ru'][0]'#format'] = 'filtered_html'?>
или если более универсальней
<?php $form['body'][$form['#node']->language][0]'#format'] = 'filtered_html'?>

А в какой именно файл, вставлять код.

2 августа 2011 в 0:48
Аватар пользователя vic vic 0

"olk" wrote:
Я все же не понял в чем проблема , и как это пользователь должен иметь два формата, при этом не имея право на выбор этого формата ? В каком же формате тогда будет оформляться пост - если выбора нет ?
Проблема надуманная, так как любой формат ввода состоит из цепочки фильтров - добавьте/уберите в формат ввода по умолчанию (plain_text) нужные фильтры и дайте пользователям доступ только к этому формату...

Речь шла о случае, когда в форме имеется ДВЕ и более текстовые области. Каждая из них должна иметь свой формат ввода.
А на счет самого фильтра выбора формата ввода - довольно часто он не нужен и лишь перегружает страницу.

12 мая 2011 в 11:09

"vic" wrote:
Далее в форме я с помощью css скрываю виджет выбора формата ввода.
Решение далеко не идеальное, но лучше я пока не нашел.

hide($content['comments']['comment_form']['comment_body']['und']['0']['format']);

26 июня 2011 в 21:22

"DravE" wrote:
hide($content['comments']['comment_form']['comment_body']['und']['0']['format']);

А можно пожалуйста подробнее, как именно в drupal 7 не выводить формат ввода для комментариев и для добавления статей?
Заранее примного благодарен.

5 июля 2011 в 18:30

vic
Не совсем понял вопрос, если нужно спрятать Body (описание ноды) то <?php hide($content['body']); ?>
перед <?php print render($content); ?>

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

print("<pre>");
  print_r(array_values($content));
print("</pre>");

или использовать FireBug for Drupal.

Я например вообще не использую <?php print render($content); ?>, а вывожу каждое поле отдельно

        ....
        <div class="content clearfix"<?php print $content_attributes; ?>>
                <div style="float: left; width: 80%; margin-right: 15px;">
                        <? print render($content['field_author']);?>
                        <br/>
                        <div align="center">
                                <?php print render($content['field_poster']);?>
                        </div>
                        <?php print render($content['body']);?>
                </div>
                <? print render($content['field_imgs']);?>
                ....

это очень удобно в плане темизации.

P.S. Если body, вообще не нужно, то его можно просто удалить в настройках полей.

17 июля 2011 в 16:04
Аватар пользователя vic vic 0

"DravE" wrote:
Не совсем понял вопрос, если нужно спрятать Body (описание ноды)

Нет, я имел ввиду как скрыть возможность выбора формата ввода для поля body ноды.
За помощь спасибо!

17 июля 2011 в 16:34

"vic" wrote:
Нет, я имел ввиду как скрыть возможность выбора формата ввода для поля body ноды.

Все также,
"DravE" wrote:
А вообще $content это массив и любую его часть можно, как спрятать, так и показать отдельно.
Посмотреть его можно так:

print("<pre>");
  print_r(array_values($content));
print("</pre>");

или использовать FireBug for Drupal.


только в файле page--node--add.tpl.php

2 августа 2011 в 21:15

В Drupal 7 появилась функция hook_page_alter а еще есть такая статья Render Arrays in Drupal 7
из всего выше перечисленного получается что можно убрать fieldset с выбором формата ввода следующим образом:

делаем функцию

<?php
function myModule_page_alter(&$page)
{
    
$page['content']['system_main']['description']['format']['#attributes']['class'][] = 'element-hidden';
    
dpm($page);
}
?>

через dpm($page); ищем где нам надо отключить "format"

насчет "element-hidden" - узнал из статьи - "Изменения темизации в drupal 7"

19 июля 2011 в 2:15

"DravE" wrote:
 hide($content['comments']['comment_form']['comment_body']['und']['0']['format']);

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

29 июля 2011 в 17:08
Аватар пользователя vic vic 0

"Kerny" wrote:
А в какой именно файл, вставлять код.

Можно написать свой модуль с хуком hook_form_alter.
Или можно этот хук определить в файле template.php вашей темы.

2 августа 2011 в 7:59

А как именно определить хук в template.php. Просто я только знакомлюсь с друпалом, по гуглил толком не нашел ответа.

2 августа 2011 в 13:12

"Dr.Osd" wrote:
Класс, супер, спасибо огромное!
А есть какой-то мануал, на русском желательно, как в дальнейшем такие фишки самостоятельно определять. А то использовать готовое решение это хорошо, но хочется его ещё понимать...

"DravE" wrote:
А вообще $content это массив и любую его часть можно, как спрятать, так и показать отдельно.
Посмотреть его можно так:

<?php print("<pre>");
  
print_r(array_values($content));
print(
"</pre>"); ?>

или использовать FireBug for Drupal.

А насчет мануал, то http://google.ru + http://drupal.ru или http://drupal.org + http://translate.google.ru на край, если с английским проблемы.

2 августа 2011 в 21:14

Для Д7.7.
Переопределить формат ввода по умолчанию для комментария:

в node.tpl либо в comment-wrapper.tpl.php прописываем:

<?php $content['comments']['comment_form']['comment_body']['und']['0']['format']['format']['#value'] = 'filtered_html'
?>

Для скрытия ссылки на страницу описания форматов:

<?php hide($content['comments']['comment_form']['comment_body']['und']['0']['format']['help']);     
?>

Определяем только нужные нам стили:

<?php $content['comments']['comment_form']['comment_body']['und']['0']['format']['format']['#options'] = Array(plain_text => 'Plain text'); 
 
?>

Либо так:

<?php unset($content['comments']['comment_form']['comment_body']['und']['0']['format']['format']['#options']['plain_text']);
 
?>

А вот как сделать этот блок сворачиваемым?? Sad

ЗЫ. семерка на настройки как-то слабовата Sad

17 августа 2011 в 1:27

DiHalt, вставляю код вот так:

  <?php $content['comments']['comment_form']['comment_body']['und']['0']['format']['format']['#value'] = 'filtered_html'?>
  <?php print render($content['comments']); ?>

В раскрывающемся списке формат ввода меняется, но сама форма остается прежней, т.е редактор не меняется (для filtered_html он стоит у меня более упрощенный). Как поправить?

«А вот как сделать этот блок сворачиваемым?? :(»

Знаю как реализовать.

18 августа 2011 в 15:45

"Kerny" wrote:
В раскрывающемся списке формат ввода меняется, но сама форма остается прежней, т.е редактор не меняется (для filtered_html он стоит у меня более упрощенный). Как поправить?

Прописанная строчка в node.tpl.php и wysiwyg редактор с профилями у меня отрабатывают нормально. Drupal 7.7, denwer, Garland.

Кстати редактор походу через js цепляется. В массиве по крайней мере прописаны на профили js.

ЗЫ. F5 не юзать. Запоминает формы.

"Kerny" wrote:
«А вот как сделать этот блок сворачиваемым?? :(»
Знаю как реализовать.

как? в личку пожалуйста.

19 августа 2011 в 3:42

у меня drupal 7.4, обновлюсь гляну, надеюсь сработает.

Для свертывания вам нужно установить модуль field_group, затем зайти в настройки полей комментариев для нужного материала и сгруппировать нужные поля (поле) в иерархической структуре. Например, так:

+Добавить ответ group_message fieldset
-Автор autor
-Тема tema
-Текст ответа comment_body

См.скрин во вложение.

10 ноября 2015 в 11:47

"Kerny" wrote:
+Добавить ответ group_message fieldset
-Автор autor
-Тема tema
-Текст ответа comment_body

Интересное решение, но я имел ввиду немного другое - сделать сворачиваемым блок выбора формата текста. Вот как на этом сайте под формой комментариев - "формат ввода". В 6-ке вроде такое по дефолту есть.

20 августа 2011 в 0:15

"vic" wrote:
Ну я нашел только такое решение.
Для текстового поля указывается значение по умолчанию - ПРОБЕЛ и указываю желаемый формат ввода.

vic, не получается задать таким образом формат. Я правильно понимаю, что в настройках текстового поля выбираю:
1) Обработка текста - С применением фильтров (формат ввода выбирается пользователем)
2) Значение по умолчанию:

пробелfiltered_html

(вместо слова пробел - реальный пробел Smile

При этом всё равно по умолчанию выставляется тот формат, что стоит выше в настройках фильтров. В моём случае, это Full HTML.

11 января 2012 в 21:28
Аватар пользователя vic vic 0

"antton" wrote:

Может графический редактор съедает ваш пробел? Попробуйте его отключить.

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

12 января 2012 в 7:19

Эврика! Дошло. До меня дошло. Поясню для остальных, как и где назначить формат для конкретного поля.

1. Открываем настройки конкретного текстового поля (по виду поле может быть, как "Текст", так и "Текстовая область").
2. В пункте "Обработка текста", выбираем - "С применением фильтров (формат ввода выбирается пользователем)"
3. В форме "Значение по умолчанию" (Выбранное значение будет использоваться по умолчанию.) - ставим пробел.
4. Жмём кнопку Сохранить.
4. Страница обновляется. Под полем "Значение по умолчанию" появляется пункт "Формат текста", указываем нужный нам, например "Filtered HTML".
5. Жмём кнопку Сохранить.

12 января 2012 в 22:54

Систему понял, но по ходу это глюк, недоработка Drupal. Потому как без пробела настройки привязки конкретного формата к полю не сохраняются... В чём разница то, есть пробел или нет.

Если логически мыслить, ставить значением по умолчанию пробел - это зло. Так как если значения по умолчанию нет и пользователь ничего не забил в это поле, то при сохранении профиля данные из этого поля в базу данных не записываются. А вот если значением по умолчанию стоит пробел, то при редактировании профиля, даже если пользователь ничего не забьёт в это поле, в базу данных будет занесена строчка об этом поле - со значение пробел. => ведёт к разрастанию базы данных и заполнению пустыми данными.

Гм. И это работает только для полей в node в типах материала. Но система с пробелом не работает, если эти поля в профайле.

12 января 2012 в 22:26
Аватар пользователя vic vic 0

"antton" wrote:
Если логически мыслить, ставить значением по умолчанию пробел - это зло.

Полностью с Вами согласен. Я писал, что решение далеко не идеальное.

13 января 2012 в 7:31

Сделал как описано тут и выбор исчез:

<?php
// hook_form_alter function
function node_form_alter(&$form, &$form_state$form_id) {
    
// We want this on a specific node type
    
if ($form_id == 'company_node_form') {
        
$form['#after_build'][] = 'node_company_node_form_after_build';
    }
}

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

Но потом выбор опять почему-то появился Sad

9 октября 2012 в 16:51

Есть простой способ убрать лишнее из формы комментария.
заходим в Типы материалов => поля комментариев
admin/structure/types/manage/article/comment/fields
Действия => Изменить
admin/structure/types/manage/article/comment/fields/comment_body
И там можно обработку текста изменить на простой.

30 ноября 2012 в 14:23

При последнем решении исчезает возможность комментирования с айфонов.. На андроидах не проверял.

Может кто-то за тыщу рублей поможет сделать две задачи. Третий день парюсь - не программист я((.

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

12 января 2013 в 9:26

"NightL" wrote:

Посмотрите модуль better_formats


Сейчас уже появился модуль для семерки

Одна проблема, после того, как я назначил для комментариев конкретный формат, выбор форматов исчез, а вот подсказки - нет:

http://screencast.com/t/2v4JMJhN

28 августа 2013 в 12:28

"MaxPal" wrote:
Сейчас уже появился модуль для семерки

А что за модуль то?

Установил better_formats в 7 он как раз расширяет базовые возможности ядра и дает возможность выбрать у поля формат, а так же можно менять вес формата у поля.

Только не могу понять как сделать что бы формат подставлялся сразу, у меня все равно появляется селект выбора с одним значением, и значение не стоит по умолчанию. Как мне сделать что бы фильтр подставлялся сразу???

3 сентября 2013 в 14:34