Изменение разметки потоковых комментариев в Drupal 6

StackOverflow https://stackoverflow.com/questions/2064271

  •  20-09-2019
  •  | 
  •  

Вопрос

я здесь с неприятным вопросом.

Drupal обрабатывает комментарии, предоставляя пользователю возможность отображать их всего 4 способами: Flat list - collapsed, Flat list - expanded, Threaded list - collapsed, и Threaded list - expanded.

Я использую последний, который предоставляет разметку типа:

<div class="comment">
    <!-- comment's content -->
</div>
<div class="indented">
    <!-- next comment is an 'answer' to the previous comment! -->
    <div class="comment">
        <!-- comment's content -->
    </div>
</div>

Но я хотел бы, чтобы комментарий 'children' находился внутри того же элемента dom, что и комментарий 'parent'.Так, например, что-то вроде:

<div class="comment">
    <!-- comment's content -->
    <div class="indented">
        <!-- next comment is an 'answer' to the previous comment! -->
        <div class="comment">
            <!-- comment's content -->
        </div>
    </div>
</div>

для того, чтобы иметь разметку, которая позволяет мне показывать многопоточные комментарии как этот блог (используя wordpress) делает.

Он использует разметку, подобную:

<ul>
    <li>
        <div class="comment>
            <!-- comment's content -->
        </div>
        <ul class="children">
            <li>
                <div class="comment>
                    <!-- comment's content -->
                </div>
            </li>
        </ul>
    </li>
</ul>

Итак, что же такое друпалиш как это сделать (лучше, если все необходимые мне изменения будут в файлах template.php или шаблонов)?

Это было полезно?

Решение

комментарий_рендер() кажется, все делает внутренне.Так что вам нужно было бы переписать это.К сожалению, если вы используете node_show() узел_show() для рендеринга ваших узлов comment_render будет запускаться автоматически (не через переопределяемую функцию темы), поэтому вам нужно будет проделать довольно много работы, чтобы заставить это делать то, что вы хотите.

Во-первых, вам придется использовать hook_nodeapi чтобы убедить ядро drupal в отсутствии комментариев (the модуль разговора делает ли это)

function talk_nodeapi(&$node, $op) {
  switch ($op) {
    case 'load':
      if (talk_activated($node->type) && arg(0) == 'node' && !arg(2)) {
        // Overwrite setting of comment module and set comments for this node to disabled.
        // This prevents the comments of being displayed.
        $output['comment_original_value'] = $node->comment;
        $output['comment'] = 0;
        return $output;
      }
      break;
  }
}

Затем вам нужно будет написать свою собственную реализацию comment_render (с вложенностью) и вызвать ее после рендеринга узла (возможно, на вашей странице шаблона или в функции предварительной обработки).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top