Здравствуйте!
Господа, подскажите пожалуйста, каким образом можно темизировать вывод комментариев и саму форму комментария?
Решение для темизации формы (http://drupaldance.com/blog/tuning-comments-form) не работает в 6-ой версии...
Спасибо
Здравствуйте!
Господа, подскажите пожалуйста, каким образом можно темизировать вывод комментариев и саму форму комментария?
Решение для темизации формы (http://drupaldance.com/blog/tuning-comments-form) не работает в 6-ой версии...
Спасибо
Комментарии
comment.tpl.php за вывод комментария отвечает.
еще comment-wrapper.tpl.php
А решение с drupaldance должно работать, только посмотрите различия в API функций темизации. Они небольшие, поправить легко.
О comment-wrapper.tpl.php знаю, но как в нем "достучаться" к переменным для темизации вывода?
Решение с drupaldance, к сожалению, пока не работает...
Сайт этот сейчас не грузится, поэтому выкладываю код для template.php здесь:
function mytheme_theme() {
return array(
'comment_form' => array(
'arguments' => array('form' => NULL),
),
);
}
function mytheme_comment_form($form) {
// убираем имя автора (если юзер залогинен)
if ($form['_author'])
unset($form['_author']['#type']);
// убираем все форматы форматирования из формы
unset($form['comment_filter']['format']);
// формируем один единственный формат ввода
// (будет сформирован формат, который выбран в админке по-умолчанию)
// тут же мы избавляемся и от ссылки "Подробнее о форматировании"
// просто не включив ее в состав формы
$form['comment_filter'][1] = array(
'#type' => 'value',
'#value' => variable_get('filter_default_format', 1)
);
$tips = _filter_tips(variable_get('filter_default_format', 1), FALSE);
$form['comment_filter']['format']['guidelines'] = array(
'#title' => t('Formatting guidelines'),
'#value' => theme('filter_tips', $tips, FALSE, $extra),
);
// убираем поле "домашняя страница" с формы
// так как в большинстве случаев оно лишнее
unset($form['homepage']);
// скрываем подпись у главного поля комментирования
$form['comment_filter']['comment']['#title'] = '';
// устанавливаем меньшее количество строк у поля
$form['comment_filter']['comment']['#rows'] = '7';
// это условие спасает нас, в случае залогиненного юзера
// (у залогиненных нет этих полей)
if (($form['mail'])&&($form['name'])) {
// оборачиваем всю правую часть в теги
// ниже, в описании стилей можно увидеть, что класс side
// выравнивается по правому краю
$form['name']['#prefix'] = '<div class="side">';
$form['name']['#suffix'] = '</div>';
$form['mail']['#prefix'] = '<div class="side">';
$form['mail']['#suffix'] = '</div>';
// оборачиваем поле для ввода в свои теги
$form['comment_filter']['#prefix'] = '<div class="main">';
$form['comment_filter']['#suffix'] = '</div>';
}
// оборачиваем в теги надпись о форматировании
// обратите внимание на css свойства класса guidelines
$form['comment_filter']['format']['guidelines']['#prefix'] =
'<div class="guidelines nolink">';
$form['comment_filter']['format']['guidelines']['#suffix'] = '</div>';
//подключаем файл с js-блиотекой на страницу
drupal_add_js(path_to_theme().'/comments.js');
//цепляем вызовы js-функций под код нашей формы
$form['#suffix'] .= '<script type="text/javascript">'.
'insertGuidelinesLink("'.t('What can I enter?').'");'.
'replaceButtons("#comment-form");'.
'</script>';
//выводим форму
$output .= drupal_render($form);
return $output;
}
?>
Складывается впечатление, что система вообще не видит template.php и, соответственно, не отрабатывает функции.
а тема ваша точно называется mytheme?
да, конечно
Вопрос еще в силе, аналогичная ситуация.
есть тема canbtl
Папка с темой Сanbtl
По какой то странной причине в файле template.php функция phptemplate_breadcrumb работает, а вот функция phptemplate_comment_form не работает и за место неё выполняется стандартная функция, что нужно сделать что бы заработала phptemplate_comment_form или как можно её переопределить полностью.
Абсолютно логично что должна отрабатываться именно функция phptemplate_comment_form как написано в документации, так как она не работала я попробовал сделать следующим образом
{
return array('comment_form' => array('arguments' => array('form' => NULL)));
}
function canbtl_comment_form($form)
{
return '';
}
но все равно эффекта ноль, в чем может быть проблема?
Ну не знаю у меня вроде все работает вот кусок из template.php (тема называется hotel_fix)
<?php
$form['comment_filter']['format'] = $element;
$output = drupal_render($form);
function hotel_fix_theme(){
return array(
'links' => array(
'arguments' => array('links' => NULL,'attributes'=>array()),
),
'primary_links' => array(
'arguments' => array('links' => NULL,'attributes'=>array()),
),
'secondary_links' => array(
'arguments' => array('links' => NULL,'attributes'=>array()),
),
'comment_form' => array(
'arguments' => array('form' => NULL),
),
'node_form' => array(
'arguments' => array('form' => NULL),
),
);
} //...
//... function hotel_fix_comment_form($form){
if ( isset($form['_author'])){
$form['_author']['#id'] = 'author';
}
$form['comment_filter']['comment']['#rows'] = 8;
unset(
$form['homepage']);if( $form['comment_filter']['format']['#type'] != 'fieldset' ){
$element = array(
'#type' => 'fieldset',
'#title' => ' Что я могу вводить ? ',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#attributes' => array('class'=>'comment-format'),
'#value' => drupal_render($form['comment_filter']['format']),
);
}
return $output;
}
?>
Не забываем чистить после изменения кэш регистра тем
И поставьте вот этот модуль [module=devel]. Там есть специальный инструмент лдя просмотра функций темизации и шаблонов.
у меня снова ничего не вышло. так кто-нибудь сделал лаконичную форму ввода комментариев для 6го друпала?
В прикреплённом файле модуль для этой цели. Модуль практически один в один как с drupaldance.com
не работает:(
Вот это попробуйте. Там в принципе и лэйаут можно подправить.
На 7ке почему-то не работают эти функции( Может они там по другому стали называться?
Спасибо, у меня шестерке сразу заработало.
а у меня если скопировать comment.tpl и (или) comment-wrapper в папку темы, ошибки появляются. типа неизвестная функция в файле comment.tpl. что это такое?
Столкнулся с такой же проблемой. Решение в топике дано, но, возможно, кто то не сразу обратил на это внимание (на другую функцию). По умолчанию функция имя_темы_comment_form
не работает, ее нужно описать:
<?php
/**
* Implementation of hook_theme().
*/
function имя_темы_theme() {
return array(
'comment_form' => array(
'arguments' => array('form' => NULL),
),
//описание других форм для хука
);
}?>
а я скопировал заново и у меня заработало - не знаю почему...
потому что в скопированном есть
$output .= drupal_render($form);
а у тебя нету
Неплохой модуль - кучу лишней работы сразу отпало.
Модуль установился, но в нём всё же остался мусор - http://www.drupal.ru/node/79174
Как его почистить?
Нашёл - http://www.drupal.ru/node/12254