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

Главные вкладки

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

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

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

Комментарии

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

"NightL" wrote:

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

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

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

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

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

Аватар пользователя vic vic 1 апреля 2011 в 8:38

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

'#format' => 'filtered_html',

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

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

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

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

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

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

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

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

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

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

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

Аватар пользователя vic vic 24 апреля 2011 в 18:21

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

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

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

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

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

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

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

"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'?>

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

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

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'?>

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

Аватар пользователя vic vic 12 мая 2011 в 11:09

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

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

Аватар пользователя DravE DravE 26 июня 2011 в 21:22

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

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

Аватар пользователя Dr.Osd Dr.Osd 5 июля 2011 в 18:30

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

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

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

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, вообще не нужно, то его можно просто удалить в настройках полей.

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

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

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

Аватар пользователя DravE DravE 2 августа 2011 в 21:15

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

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

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

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


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

Аватар пользователя semasping semasping 19 июля 2011 в 2: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"

Аватар пользователя Dr.Osd Dr.Osd 29 июля 2011 в 17:08

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

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

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

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

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

Аватар пользователя Kerny Kerny 2 августа 2011 в 13:12

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

Аватар пользователя DravE DravE 2 августа 2011 в 21:14

"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 на край, если с английским проблемы.

Аватар пользователя DiHalt DiHalt 17 августа 2011 в 1:27

Для Д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

Аватар пользователя Kerny Kerny 18 августа 2011 в 15:45

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

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

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

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

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

Аватар пользователя DiHalt DiHalt 19 августа 2011 в 3:42

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

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

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

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

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

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

Аватар пользователя Kerny Kerny 10 ноября 2015 в 11:47

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

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

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

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

Аватар пользователя DiHalt DiHalt 20 августа 2011 в 0:15

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

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

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

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

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

пробелfiltered_html

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

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

Аватар пользователя vic vic 12 января 2012 в 7:19

"antton" wrote:

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

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

Аватар пользователя antton antton 12 января 2012 в 22:54

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

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

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

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

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

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

Аватар пользователя vic vic 13 января 2012 в 7:31

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

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

Аватар пользователя arroyo arroyo 9 октября 2012 в 16:51

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

<?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

Аватар пользователя FunArt FunArt 30 ноября 2012 в 14:23

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

Аватар пользователя Vedus Vedus 12 января 2013 в 9:26

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

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

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

Аватар пользователя MaxPal MaxPal 28 августа 2013 в 12:28

"NightL" wrote:

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


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

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

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

Аватар пользователя elf39 elf39 3 сентября 2013 в 14:34

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

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

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

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