수직형 타임라인(Content 위젯 스킨)에서 연혁 구현하는 방법
@김햄C님께 대댓글 달려다가 내용이 길어져서 별도 게시물로 작성합니다.
현재 해당 위젯 스킨은 날짜 구현이 문서 등록일로 되어 있는데요, 이를 특정 날짜로 수정해서 사이트나 운영 단체의 연혁으로 활용할 수 있도록 하는 팁입니다.
1. 확장변수를 불러오기 위해 루트/widgets/content/content.class.php 수정: 순정 파일 기준 933행과 934행 사이에 다음을 추가
{
$oDocumentModel = &getModel('document');
return $oDocumentModel->getExtraVars($this->get('module_srl'), $this->get('document_srl'));
}
function getExtraEidValue($eid)
{
$extra_vars = $this->getExtraVars();
foreach($extra_vars as $idx => $key)
{
$extra_eid[$key->eid] = $key;
}
return $extra_eid[$eid]->value;
}
2. 불러오고자 하는 게시판에 '일자(연월일) 형식'의 사용자 정의가 있는지 확인하고 없으면 추가. 여기선 해당 확장변수의 번호는 1번이고, 사용자 정의 이름은 event_date라고 가정하겠습니다.
3. 루트/widgets/content/skins/vertical-timeline/_history.html 를 열고 9행의 <li loop="$widget_info->content_items=>$key,$item" class="cd-timeline-block" style="display:none"|cond="$_idx >= $widget_info->list_count"> 끝 부분에 다음과 같이 조건식 추가: <li loop="$widget_info->content_items=>$key,$item" class="cd-timeline-block" style="display:none"|cond="$_idx >= $widget_info->list_count" cond="$item->getExtraEidValue('event_date')">
4. 같은 파일 14행의 {$item->getRegdate("Y.m.d")} 을 다음과 같이 수정: {zdate($item->getExtraEidValue('event_date'),'Y.m.d')} 또는 {zdate($item->getExtraVars()[1]->value,'Y.m.d')}
- 그 외에 뽀너스로 해당 게시물을 확장변수에 따라 정렬하는 방법도 알아보면 좋을 텐데요. 그건 지금 밥 먹으러 나가야 해서;;;; 그럼 이만 줄입니다. 도움이 됐으면 좋겠습니다.
...
5. (밥 먹고 옴ㅋ) 확장변수에 따른 위젯 정렬 방법: _hisotory.html 6행 쯤에 다음의 내용을 삽입.
<!--@foreach($widget_info->content_items as $key => $item)-->
{@ $new_sort[$key] = $item->getExtraEidValue('event_date'); }
<!--@end-->
{@ array_multisort($new_sort,SORT_DESC,$widget_info->content_items); }
- 여기서도 $item->getExtraEidValue('event_date') 대신 $item->getExtraVars()[1]->value 를 사용해도 무방합니다.
- 오래된 날짜부터 정렬하고 싶으면 SORT_DESC 대신 SORT_ASC 를 사용하면 됩니다.

댓글 20
정말 감사합니다! 저 같은 사람한테는 진짜 도움되는 글이에요 ㅠㅠㅠㅠㅠㅠ 나중에 혹시 디자인적으로 뭔가 생기시면 저도 도와드리고 싶...OTL 능력이 요것밖에 안되네요. 무튼, 정말 정말 감사합니다! 이따가 시도해봐야겠어요 +ㅅ+
저도 공홈에 있는 팁 참고한 거여서 사실 별 거 없어요 헤헷
<img src="{$item->getThumbnail($widget_info->thumbnail_width,$widget_info->thumbnail_height,$widget_info->thumbnail_type)}" /> 이라는 부분이 있을 텐데요.
이거를
<img src="{$item->getThumbnail()}" />로 바꿔보세요.
감사합니다. 참고로 위에 서버오류는 제가 contents.class.php에 잘못 가져다 붙여서 생긴 문제였어요. 썸네일 안나오는건 말씀하신데로 바꾸니까 잘 나옵니다. 정말 감사합니다. 너무 좋은 자료에요
바로 아래에 있는 adlib님 댓글을 참고해보세요.
덧. 아, 설치 의뢰하셨군요. 그게 가장 빠르고 안전한 길일 수 있겠어요. 그리고 가능하시다면 위의 팁은 코어를 수정하는 것이니 가급적 하지 마시고, 위젯 스킨 자체적으로 확장변수를 구현하게끔 의뢰해보세요. 그게 좀 더 안정적일 겁니다.
스킨에서 바로 연혁 구현할 수 있는 방법을 정리해볼게요.
(참고로 저는 스킨 파일을 유실해서 직접 테스트는 못해봤어요)
1. 불러오고자 하는 게시판에 '일자(연월일) 형식'의 사용자 정의가 있는지 확인하고 없으면 추가. 여기선 해당 확장변수의 번호를 1번이라고 가정하겠습니다.
2. 루트/widgets/content/skins/vertical-timeline/_history.html 6행 쯤에 다음의 내용을 삽입.
{@
$extra_vars = DocumentModel::getExtraVars($item->getModuleSrl(), $item->get('document_srl'));
$primary_sort[$key] = !empty($extra_vars) ? $extra_vars[1]->value : '';
$secondary_sort[$key] = $item->get('list_order');
}
<!--@end-->
{@ array_multisort($primary_sort, SORT_DESC, $secondary_sort, SORT_ASC, $widget_info->content_items); }
3. 루트/widgets/content/skins/vertical-timeline/_history.html 수정
(중략)
</li>
이 부분을 다음과 같이 바꿔줍니다.
{@
$extra_vars = DocumentModel::getExtraVars($item->getModuleSrl(), $item->get('document_srl'));
$event_date = !empty($extra_vars) ? $extra_vars[1]->value : '';
}
<li class="cd-timeline-block" style="display:none"|cond="$_idx >= $widget_info->list_count" cond="$event_date">
(중략)
</li>
<!--@endforeach-->
4. 같은 파일에서 {$item->getRegdate("Y.m.d")} 을 찾아 다음과 같이 수정:
{zdate($event_date, 'Y.m.d')}
로 수정
우선 상세한 답글 너무 감사드립니다. 알려주신대로 해보니 타임라인이 생성되는데 성공했습니다. ^^
단, 타임라인에 표시되는 순서가 같은 날짜일 경우, 정렬을 오름,내림차순과 상관없이 무조건 내림차순으로 표시되는군요.
게시판에는 아래처럼 번호순으로 글을 등록하였고, 날짜는 1.2.3번은 동일한 날짜로 했습니다만 타임라인에서는 등록순이 아니라
마지막에 등록한 역순으로 표기됩니다.
썸네일도 안되는데, 썸네일은 어디를 수정하면 될까요?
수정된 타임라인 파일은 윤삼님께서 원본파일 없으시다고 해서 첨부하였습니다.
썸네일은 https://xetown.com/tips/292144#comment_1272943 의 댓글처럼 해보시면 어떨까 싶네요.
그리고 원본 파일 감사합니다 :D
오... 완벽해진거 같습니다. 타임라인 정렬도 잘되고 썸네일도 잘 나옵니다. 즐거운 설연휴 되십시요. 다시한번 감사드립니다.
위의 파일 맨 아래줄 } 위에 아래 코드를 삽입 하시면 됩니다. (923과 924 사이)
function getExtraVars()
{
$oDocumentModel = &getModel('document');
return $oDocumentModel->getExtraVars($this->get('module_srl'), $this->get('document_srl'));
}
function getExtraEidValue($eid)
{
$extra_vars = $this->getExtraVars();
foreach($extra_vars as $idx => $key)
{
$extra_eid[$key->eid] = $key;
}
return $extra_eid[$eid]->value;
}
{
return $this->get('thumbnail_x' . intval($source_size));
}
}
function getMemberSrl()
{
return $this->get('member_srl');
}
}
/* End of file content.class.php */
/* Location: ./widgets/content/content.class.php */
여기 어디에 넣어야 하는걸까요? 몇번째 줄에 넣어야 하는건지 감이 안옵니다;; ㅎ
920행
요기에..
921행
맞을까요?