댓글을 수정하면 댓글의 수정 시각이 출력되도록 하였습니다. 기존에는 댓글의 최초 작성 시각만 출력되며, 댓글의 수정 시각은 출력되지 않는 문제가 있었습니다. 댓글 작성·수정시 출력되는 샘플 정보는 아래와 같습니다.
* 변경 전(前)
westporch
Sat, 03/10/2018 - 12:28
* 변경 후(後)
westporch
Submitted: Sat, 03/10/2018 - 12:28
Modified: Sat, 03/10/2018 - 13:20
1. 해결 방법
drupal/core/themes/bartik/templates/comment.html.twig 파일을 아래와 같이 수정함으로써 댓글이 수정된 시각을 출력할 수 있었습니다.
(.. 생략 ..)
- <p class="comment__time">{{ created }}</p>
+ <p class="comment__time">Submitted: {{ created }}</p>
+ <p class="comment__time">Modified: {{ changed }}</p>
(.. 생략 ..)
가장 먼저 드루팔의 관리자 설정 화면에서 댓글의 수정된 시각을 출력하는 옵션을 찾아보았지만 이와 관련된 설정은 없었습니다. 대략 2시간 동안 구글링을 해봤지만 원하는 답을 찾을 수 없었습니다. 그래서 직접 드루팔의 테마·모듈 파일들을 열어본 결과 comment.html.twig 파일을 수정하면 댓글의 수정된 시각을 출력할 수 있다는 것을 알게 되었습니다.
2. 작업 과정
이 항목에서는 세부 작업 과정을 설명합니다.
2.1. 드루팔 테마의 댓글 관련 파일(comment.html.twig) 확인
드루팔의 테마(bartik) 파일을 수정하면 댓글 시간을 출력할 수 있을 것 같았습니다. 그래서 드루팔 테마의 댓글 관련 파일인 drupal/core/themes/bartik/templates/comment.html.twig를 살펴보았습니다. 이 파일에서 아래와 같은 created, changed 변수에 대한 설명을 확인할 수 있었습니다.
{#
/**
* @file
* Bartik's theme implementation for comments.
*
* Available variables:
* - author: Comment author. Can be a link or plain text.
(.. 생략 ..)
* - created: Formatted date and time for when the comment was created.
* Preprocess functions can reformat it by calling format_date() with the
* desired parameters on the 'comment.created' variable.
* - changed: Formatted date and time for when the comment was last changed.
(.. 생략 ..)
*/
#}
2.2. 드루팔의 댓글 모듈(comment.module) 확인
comment.html.twig에서 찾은 changed 변수가 댓글 모듈(drupal/core/modules/comment/comment.module)에서 어떻게 사용되는지 궁금해서 comment.module 파일을 열어보았습니다. 아래처럼 comment.module 파일에서 template_preprocess_comment 함수에서 댓글의 변경된 시각을 가져오는 부분(if-else 구문)을 찾았습니다.
function template_preprocess_comment(&$variables) {
/** @var \Drupal\comment\CommentInterface $comment */
$comment = $variables['elements']['#comment'];
$commented_entity = $comment->getCommentedEntity();
$variables['comment'] = $comment;
$variables['commented_entity'] = $commented_entity;
$variables['threaded'] = $variables['elements']['#comment_threaded'];
$account = $comment->getOwner();
$username = array(
'#theme' => 'username',
'#account' => $account,
);
$variables['author'] = drupal_render($username);
$variables['author_id'] = $comment->getOwnerId();
$variables['new_indicator_timestamp'] = $comment->getChangedTime();
$variables['created'] = format_date($comment->getCreatedTime());
// Avoid calling format_date() twice on the same timestamp.
if ($comment->getChangedTime() == $comment->getCreatedTime()) {
$variables['changed'] = $variables['created'];
}
else {
$variables['changed'] = format_date($comment->getChangedTime());
}
(.. 이하 생략 ..)
}
2.3. comment.html.twig 파일 수정
comment.html.twig의 {{ created }} 처럼 {{ changed }}를 추가하면 댓글의 수정된 시각을 출력할 수 있을 것 같았습니다. 그래서 댓글의 변경된 시각을 출력하기 위해서 comment.html.twig 파일을 아래와 같이 수정했습니다.
<article role="article"{{ attributes.addClass(classes)|without('role') }}>
{#
Hide the "new" indicator by default, let a piece of JavaScript ask the
server which comments are new for the user. Rendering the final "new"
indicator here would break the render cache.
#}
<span class="hidden" data-comment-timestamp="{{ new_indicator_timestamp }}"></span>
<footer class="comment__meta">
{{ user_picture }}
<p class="comment__author">{{ author }}</p>
- <p class="comment__time">{{ created }}</p>
+ <p class="comment__time">Submitted: {{ created }}</p>
+ <p class="comment__time">Modified: {{ changed }}</p>
<p class="comment__permalink">{{ permalink }}</p>
{#
Indicate the semantic relationship between parent and child comments
for accessibility. The list is difficult to navigate in a screen
reader without this information.
#}
{% if parent %}
<p class="visually-hidden">{{ parent }}</p>
{% endif %}
</footer>
<div{{ content_attributes.addClass('comment__content') }}>
{% if title %}
{{ title_prefix }}
<h3{{ title_attributes }}>{{ title }}</h3>
{{ title_suffix }}
{% endif %}
{{ content }}
</div>
</article>
2.4. 작업 내용 확인
수정된 comment.html.twig 파일의 내용을 반영하기 위해서 관리자 페이지에서 드루팔의 Cache를 비웠습니다. 이후 댓글이 작성·수정된 페이지를 새로고침하니 댓글의 작성 시각뿐만 아니라 댓글의 수정 시각도 추가로 확인할 수 있었습니다.
westporch
Submitted: Sat, 03/10/2018 - 12:28
Modified: Sat, 03/10/2018 - 13:20