Создал свой тип материала с несколькими текстовыми областями.
Нужно, чтобы для одной текстовой области был формат ввода full_html, а для другой filtred_html.
В друпале сейчас, к сожалению, нет возможности указать, чтобы некоторая текстовая область имела ОПРЕДЕЛЕННЫЙ формат ввода.
Можно лишь указать либо 'простой текст', либо 'на выбор пользователя'.
Как можно исправить эту ситуацию? Может есть подходящие модули?
Комментарии
Посмотрите модуль [module=better_formats]
Этот модуль для drupal 6.x, для 7.x версия в разработке.
Вот что в описании модуля:
Most of the features in BF are in Drupal 7 core now.
В 7-ке эти функции вроде как уже интегрированы
В том то и дело, что решения в семерке я не нашел. Может конечно что то упускаю...
Подскажите, если кто осведомлен.
Задать нужный формат можно путем переопределения формы hook_form_alter()
и там для нужной формы указать
'#format' => 'filtered_html',
А вот как убрать возможность выбора формата, пока не знаю.
Приходит в голову только скрыть стилями Но это самое плохое решение.
Через hook_form_alter() убрать не получается, т.к. навешивание возможности выбора видимо идет позже.
Отвечает за это функция filter_process_format() из модуля filter.
Вот такие размышления пока.
Я могу ошибаться, но возможно стоит настроить права на использование определенных форматов. Если у пользователя будет право только, к примеру на Filtered HTML, то форма выбора показываться не будет. (Собственно это и делает better_formats). Возможно это в 7-ке устроили.
Совершенно верно! НО, у меня пользователь должен иметь права доступа и в full-html и к filtered-html.
В том то и проблемма.
Я все же не понял в чем проблема , и как это пользователь должен иметь два формата, при этом не имея право на выбор этого формата ? В каком же формате тогда будет оформляться пост - если выбора нет ?
Проблема надуманная, так как любой формат ввода состоит из цепочки фильтров - добавьте/уберите в формат ввода по умолчанию (plain_text) нужные фильтры и дайте пользователям доступ только к этому формату...
актуально
Ну я нашел только такое решение.
Для текстового поля указывается значение по умолчанию - ПРОБЕЛ и указываю желаемый формат ввода.
Далее в форме я с помощью css скрываю виджет выбора формата ввода.
Решение далеко не идеальное, но лучше я пока не нашел.
Пишите свои решения.
Подписываюсь на топик.
Ужасно в семерке видеть такое упущение! Банальное действие - назначить разным типам материалов разные форматы ввода по умолчанию - невозможно реализовать штатными средствами!
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'; ?>
А вот как убрать возможность выбора, я бы тоже хотел узнать.
Сам пока скрыл соответствующий виджет стилями.
А в какой именно файл, вставлять код.
Речь шла о случае, когда в форме имеется ДВЕ и более текстовые области. Каждая из них должна иметь свой формат ввода.
А на счет самого фильтра выбора формата ввода - довольно часто он не нужен и лишь перегружает страницу.
hide
($content['comments']['comment_form']['comment_body']['und']['0']['format']);
спс
А можно пожалуйста подробнее, как именно в drupal 7 не выводить формат ввода для комментариев и для добавления статей?
Заранее примного благодарен.
.
А где это надо разместить?
Dr.Osd, vic
в node.tpl.php перед
<?php print render($content['comments']); ?>
Спасибо!
А если нужно убрать у body ноды?
vic
Не совсем понял вопрос, если нужно спрятать Body (описание ноды) то
<?php hide($content['body']); ?>
перед
<?php print render($content); ?>
А вообще
$content
это массив и любую его часть можно, как спрятать, так и показать отдельно.Посмотреть его можно так:
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, вообще не нужно, то его можно просто удалить в настройках полей.
Нет, я имел ввиду как скрыть возможность выбора формата ввода для поля body ноды.
За помощь спасибо!
Все также,
только в файле
page--node--add.tpl.php
В 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"
Класс, супер, спасибо огромное!
А есть какой-то мануал, на русском желательно, как в дальнейшем такие фишки самостоятельно определять. А то использовать готовое решение это хорошо, но хочется его ещё понимать...
Можно написать свой модуль с хуком hook_form_alter.
Или можно этот хук определить в файле template.php вашей темы.
А как именно определить хук в template.php. Просто я только знакомлюсь с друпалом, по гуглил толком не нашел ответа.
А насчет мануал, то http://google.ru + http://drupal.ru или http://drupal.org + http://translate.google.ru на край, если с английским проблемы.
http://api.drupal.org/api/drupal/modules--system--system.api.php/functio...
Для Д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']);
?>
А вот как сделать этот блок сворачиваемым??
ЗЫ. семерка на настройки как-то слабовата
DiHalt, вставляю код вот так:
<?php $content['comments']['comment_form']['comment_body']['und']['0']['format']['format']['#value'] = 'filtered_html'; ?>
<?php print render($content['comments']); ?>
В раскрывающемся списке формат ввода меняется, но сама форма остается прежней, т.е редактор не меняется (для filtered_html он стоит у меня более упрощенный). Как поправить?
«А вот как сделать этот блок сворачиваемым?? :(»
Знаю как реализовать.
Прописанная строчка в node.tpl.php и wysiwyg редактор с профилями у меня отрабатывают нормально. Drupal 7.7, denwer, Garland.
Кстати редактор походу через js цепляется. В массиве по крайней мере прописаны на профили js.
ЗЫ. F5 не юзать. Запоминает формы.
как? в личку пожалуйста.
у меня drupal 7.4, обновлюсь гляну, надеюсь сработает.
Для свертывания вам нужно установить модуль field_group, затем зайти в настройки полей комментариев для нужного материала и сгруппировать нужные поля (поле) в иерархической структуре. Например, так:
+Добавить ответ group_message fieldset
-Автор autor
-Тема tema
-Текст ответа comment_body
См.скрин во вложение.
Интересное решение, но я имел ввиду немного другое - сделать сворачиваемым блок выбора формата текста. Вот как на этом сайте под формой комментариев - "формат ввода". В 6-ке вроде такое по дефолту есть.
Вот в этом, к сожалению помочь не могу.
Да я уже решил вопрос - написал модуль. Теперь у мню как в шестерке.
А где этот чудесный модуль?
vic, не получается задать таким образом формат. Я правильно понимаю, что в настройках текстового поля выбираю:
1) Обработка текста - С применением фильтров (формат ввода выбирается пользователем)
2) Значение по умолчанию:
(вместо слова пробел - реальный пробел
При этом всё равно по умолчанию выставляется тот формат, что стоит выше в настройках фильтров. В моём случае, это Full HTML.
Может графический редактор съедает ваш пробел? Попробуйте его отключить.
Я точно не помню, но помойму у меня тоже были какие то глюки, вродде как со второго раза удавалось только задать нужный формат.
Эврика! Дошло. До меня дошло. Поясню для остальных, как и где назначить формат для конкретного поля.
1. Открываем настройки конкретного текстового поля (по виду поле может быть, как "Текст", так и "Текстовая область").
2. В пункте "Обработка текста", выбираем - "С применением фильтров (формат ввода выбирается пользователем)"
3. В форме "Значение по умолчанию" (Выбранное значение будет использоваться по умолчанию.) - ставим пробел.
4. Жмём кнопку Сохранить.
4. Страница обновляется. Под полем "Значение по умолчанию" появляется пункт "Формат текста", указываем нужный нам, например "Filtered HTML".
5. Жмём кнопку Сохранить.
Систему понял, но по ходу это глюк, недоработка Drupal. Потому как без пробела настройки привязки конкретного формата к полю не сохраняются... В чём разница то, есть пробел или нет.
Если логически мыслить, ставить значением по умолчанию пробел - это зло. Так как если значения по умолчанию нет и пользователь ничего не забил в это поле, то при сохранении профиля данные из этого поля в базу данных не записываются. А вот если значением по умолчанию стоит пробел, то при редактировании профиля, даже если пользователь ничего не забьёт в это поле, в базу данных будет занесена строчка об этом поле - со значение пробел. => ведёт к разрастанию базы данных и заполнению пустыми данными.
Гм. И это работает только для полей в node в типах материала. Но система с пробелом не работает, если эти поля в профайле.
Полностью с Вами согласен. Я писал, что решение далеко не идеальное.
.
Сделал как описано тут и выбор исчез:
<?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;
}
?>
Но потом выбор опять почему-то появился
Нормальное решение без правки тем появилось?
Есть простой способ убрать лишнее из формы комментария.
заходим в Типы материалов => поля комментариев
admin/structure/types/manage/article/comment/fields
Действия => Изменить
admin/structure/types/manage/article/comment/fields/comment_body
И там можно обработку текста изменить на простой.
При последнем решении исчезает возможность комментирования с айфонов.. На андроидах не проверял.
Может кто-то за тыщу рублей поможет сделать две задачи. Третий день парюсь - не программист я((.
Требуется выставить Имя, мыло, Домашняя страница в одну строчку и убрать описание форматов в комментариях.
Сейчас уже появился модуль для семерки
Одна проблема, после того, как я назначил для комментариев конкретный формат, выбор форматов исчез, а вот подсказки - нет:
http://screencast.com/t/2v4JMJhN
Я поставил комментарии http://hypercomments.com/ru . Хочешь модулем, хочешь в блоке PHP код, всё на русском и много фишек разных и теперь не парюсь со стандартным модулем.
А что за модуль то?
Установил better_formats в 7 он как раз расширяет базовые возможности ядра и дает возможность выбрать у поля формат, а так же можно менять вес формата у поля.
Только не могу понять как сделать что бы формат подставлялся сразу, у меня все равно появляется селект выбора с одним значением, и значение не стоит по умолчанию. Как мне сделать что бы фильтр подставлялся сразу???