Темизация вывода комментариев и формы комментария

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

Аватар пользователя olexad olexad 19 октября 2009 в 19:43

Здравствуйте!

Господа, подскажите пожалуйста, каким образом можно темизировать вывод комментариев и саму форму комментария?

Решение для темизации формы (http://drupaldance.com/blog/tuning-comments-form) не работает в 6-ой версии...

Спасибо

Комментарии

Аватар пользователя direqtor direqtor 20 октября 2009 в 2:58

еще comment-wrapper.tpl.php

А решение с drupaldance должно работать, только посмотрите различия в API функций темизации. Они небольшие, поправить легко.

Аватар пользователя olexad olexad 20 октября 2009 в 10:16

О comment-wrapper.tpl.php знаю, но как в нем "достучаться" к переменным для темизации вывода?

Решение с drupaldance, к сожалению, пока не работает...

Сайт этот сейчас не грузится, поэтому выкладываю код для template.php здесь:

<?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 и, соответственно, не отрабатывает функции.

Аватар пользователя Mhuadeep Mhuadeep 2 марта 2010 в 8:09

Вопрос еще в силе, аналогичная ситуация.

есть тема canbtl
Папка с темой Сanbtl

По какой то странной причине в файле template.php функция phptemplate_breadcrumb работает, а вот функция phptemplate_comment_form не работает и за место неё выполняется стандартная функция, что нужно сделать что бы заработала phptemplate_comment_form или как можно её переопределить полностью.

Абсолютно логично что должна отрабатываться именно функция phptemplate_comment_form как написано в документации, так как она не работала я попробовал сделать следующим образом

function canbtl_theme()
{
    return array('comment_form' => array('arguments' => array('form' => NULL)));
}

function canbtl_comment_form($form)
{
    return '';
}

но все равно эффекта ноль, в чем может быть проблема?

Аватар пользователя olk olk 2 марта 2010 в 10:11

Ну не знаю у меня вроде все работает Smile вот кусок из template.php (тема называется hotel_fix)

<?php
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']),
  );

  

$form['comment_filter']['format'] = $element;
  }

  

$output drupal_render($form);
  return 
$output;
}
?>

Не забываем чистить после изменения кэш регистра тем

Аватар пользователя direqtor direqtor 2 марта 2010 в 11:24

"Mhuadeep" wrote:
есть тема canbtl
Папка с темой Сanbtl
Может в грамотности проблема. Одного различия в регистре букв хватит, чтобы ни хера не работало. Если же с этим все в порядке, то чистите кеш реестра тем.

И поставьте вот этот модуль [module=devel]. Там есть специальный инструмент лдя просмотра функций темизации и шаблонов.

Аватар пользователя iehon iehon 6 сентября 2010 в 2:08

у меня снова ничего не вышло. так кто-нибудь сделал лаконичную форму ввода комментариев для 6го друпала?

Аватар пользователя otmoroz otmoroz 15 августа 2011 в 14:00

а у меня если скопировать comment.tpl и (или) comment-wrapper в папку темы, ошибки появляются. типа неизвестная функция в файле comment.tpl. что это такое?

Аватар пользователя GotLosiom GotLosiom 22 сентября 2011 в 17:40

Столкнулся с такой же проблемой. Решение в топике дано, но, возможно, кто то не сразу обратил на это внимание (на другую функцию). По умолчанию функция имя_темы_comment_form
не работает, ее нужно описать:

<?php
/**
 * Implementation of hook_theme().
 */
function имя_темы_theme() {
return array(
 
'comment_form' => array(
      
'arguments' => array('form' => NULL),
    ),
    
//описание других форм для хука
  
);
}
?>