XE보드에서 getTimeGap을 하루전, 2일전, 1달전 등으로 바꾸고 싶습니다
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | 사용안함 |
{getTimeGap($document->get('last_update'), "m.d")}
를 이용하여 m.d를 사용 + Lang.xml 을 통해 24시간 내에 등록된 댓글과 글에 관해서는
~시간전, ~분전, 몇 초전 등의 표시를 할 수 있게 되었습니다
그러나 24시간이 지난 후에는 m달/d일 이렇게 표시가 됩니다ㅜㅜ
이것을 ~일전, ~달전 등으로 바꾸기 위해서는 타임테이블 함수가 필요한 것으로 알고 있습니다.
86400=1일 이라는것도 이곳을 통해 배웠습니다.
게시판상에 나타내려면 list 나 read 노말에서 바꾸어야 한다는것도 배웠습니다
그런데 이 타임테이블 함수를 대체 어디에 어떻게 추가해야 하는지 모르겠습니다ㅜㅜ
펑션 time ago에 관한 것도 서치를 통해 얻었지만, 이것을 어디에 어떻게 추가해서 나타내야 할까요?
또 제가 알아본 아래 함수가 맞는걸까요?
function time_ago($stamp,$granularity=1) { if($stamp) { zdate($stamp,'d M Y H:i:s'); } else { $stamp = $this->getRegdate('d M Y H:i:s'); } $date = strtotime($stamp); $difference = time() - $date; $periods = array('년' => 31536000, '개월' => 2628000, '주' => 604800, '일' => 86400, '시간' => 3600, '분' => 60, '초' => 1); foreach ($periods as $key => $value) { if ($difference >= $value) { $time = floor($difference/$value); $difference %= $value; $retval .= ($retval ? ' ' : '').$time; $retval .= (($time > 1) ? $key : $key); $granularity--; } if ($granularity == '0') break; } if(!$retval) $retval = '방금'; return $retval.' 전'; }
zdate($oDocument->get('regdate'), 'relative' 를 통해 하려고 해보니 제가 원하는 ~일전, ~초전, ~분전과 같은 일은 안되더군요ㅠㅠ
xe보드에서 리스트 출력할때 1일전, 2일전, 1달전 이런 식으로 구현을 하려면 어떻게 해야 할까요?
도움 부탁드립니다ㅜㅜ
댓글 25
time_ago(strtotime($oDocument->get('regdate)));
해보세요
안녕하세요 답변 감사드립니다ㅜㅜ말씀하신대로 넣어보았습니다만
{time_ago(strtotime($oDocument->get('regdate)));}
time_ago(strtotime($oDocument->get('regdate)));
둘다 에러가 뜹니다ㅜㅜ strtotime 이라는 것을 따로 지정을 해주어야 하는걸까요???
아니면 제가 잘못 넣은것인지ㅠㅠ죄송합니다ㅠㅠ
본문에 있는 함수는 제가 어디에 적용시키는지 몰라서 못넣은 상태입니다 그래서 그런걸까요?
혹시나 해서 'regdate 로도 해보고 'regdate' 로도 해봤는데 안되네요ㅠㅠ
도와주셔서 너무나 감사드립니다 그런데 계속같은 에러가 떠요ㅠㅠ 제가 time ago 라는 것을 어딘가에 추가해야 하는걸까요?
어디에 어떻게 입력하셨나요?
해당 목록을 띄우는 html 파일이 맞나요?
해당 파일은 어디 디렉토리인가요?
{time_ago(strtotime($document->get('regdate')))}
으로 입력하면 잘 나오나요?
오류가 뜬다고 하셧는데 에러메세지나 증상은 어떻게 보이나요? 스샷있나요?
저 이미지를 보이는 곳은 어디 페이지인가요? 페이지주소
람보님 댓글 감사합니다
제가 위에 스샷 첨부한대로
람보님께서 가르쳐주신 어떤 수식을 입력하든 등록일 밑으로
{time_ago(strtotime($document->get('regdate')))}
<-이 문자들이 문자 그대로 뜹니다 ;_;
list_normal 에서 수정하고 있습니다
'regdate'를 하든 'regdate 를 쓰든 마찬가지입니다
이 이미지 파일에서 ;를 제외하고 써도 마찬가지더라구요ㅜㅜ
<td class="time" cond="$val->type=='regdate'">{getTimeGap($document->get('regdate'), "m.d")}</td>
에서 {getTimeGap($document->get('regdate'), "m.d")}를 말씀하신 것으로 수정하였으나 되지 않았습니다
게시글 목록에서는 $document->get('regdate') 를 써야 할 겁니다.
제가 코딩을 3,4일간 이 사이트에서 검색해가며 해본지라 미숙한 질문 드리는 점 죄송합니다
{time_ago(strtotime($Document->get('regdate)))}
로 넣어보았으나 같은 에러가 떴습니다...
아니면 그냥
$document->get('regdate')
을 넣어야 하나요?
답변 감사합니다
현재 목록에서도 oDocument를 통해 작성일자는 구해집니다
아시는 분이 계시다면 도움 부탁드립니다 ;_;
{@
$x_date = strtotime($document->getRegdate(YmdHi));
$time_calc = time() - $x_date;
}
<!--@if($time_calc < 60)-->{@ $_atc_date = '방금'}
<!--@elseif($time_calc >=60 && $time_calc < 3600)-->{@ $_atc_date = floor($time_calc/60).'분 전'}
<!--@elseif($time_calc>=3600 && $time_calc < 86400)-->{@ $_atc_date = floor($time_calc/3600).'시간 전'}
<!--@elseif($time_calc>=86400)-->{@ $_atc_date = floor($time_calc/86400).'일 전'}
<!--@end-->
시간경과에 따른 출력 형태를 선언해 놓구요.
실제 작성일자 출력 부분에
{$_atc_date}
로 하시면 될 것 같네요. 제 스킨에 적힌 코드를 참조했습니다.
정말 감사합니다!!! 지금 적용시켜봤는데
이틀전에 올린 글은 2 (깨짐), 하루전에 올린 것은 1 (깨짐) 이렇게 되는것으로 보아
성공적으로 적용된거 같습니다!! 이 깨진 글자만 어떻게 하면 될 것 같아서
'방금' 이나 '분 전'을 제 lang에 등록된대로 {$lang->min} 이나 {$lang->mins}로 바꾸었는데 역시 깨지네요
이 점에 관해서는 혹시 어떻게 수정해야 할지 도움을 구할 수 있을까요
계속 귀찮게 해드려 죄송합니다ㅠ_ㅠ
에디터를 어떤 것을 썼는지 모르겠지만 저장할때 UTF-8 로 인코딩 되어 저장되도록 하여야 합니다.
더 좋은 옵션은 BOM 없음 까지 적용하는 것입니다. 인코딩이 맞지 않아 생기는 문제입니다.
$lang 에서 불러온 값이 아니라 그것과는 전혀 관련 없습니다.
정말 감사합니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
만약 여기다가 달 전을 추가하고 싶으면
<!--@elseif($time_calc>=86400)-->{@ $_atc_date = floor($time_calc/86400).'일 전'}
에서 86400 X 30을 한 값을 넣고 달 전을 넣으면 되겠지요?
아무리 해도 안될 것 같았는데 너무너무 감사합니다!!!!!
마지막 추가하는 조건은 지금 마지막 처럼 단일 조건으로 하시면 됩니다.
그리고 윈도우의 기본 메모장이라면 그거 쓰지 마시고 코딩을 제대로 할 수 있는 편집 전용 에디터를 사용하시기 랍니다. ex) 노트++
무슨 말씀이신지 어렵습니다만 ELSEIF에 관해서 열심히 찾아보겠습니다
혹시 하나 더 여쭈어도 괜찮으시다면, 제가 등록일 옆에 '최종수정일' 이라는 메뉴를 하나 더 덧붙였습니다.
last_update 메뉴인데요
제가 1분전에 글을 등록하면
최종수정일, 등록일 모두 1분전으로 뜹니다
글을 수정하거나 댓글을 달 경우 등록일은 그대로 1분전 / 최종수정일은 '방금' 으로 표시되기 위해서는
{$_atc_date}를 어떻게 꾸며줘야 할까요?
{$_atc_date(getTimeGap($document->get('last_update'), "m.d"))}로 넣으면 될까요?
수정일 표시는 새로 만드셔야 합니다.
염치없게 굴어 정말 죄송합니다
혹시 불쾌하지 않으시다면 도움 받을 수 있을까요?
'새로 만들어야 한다' 는 개념이 무엇일까 생각하다
{@
$x_date = strtotime($document->getRegdate(YmdHi));
$time_calc = time() - $x_date;
}
<!--@if($time_calc < 60)-->{@ $_atc_date = '몇 초 전'}
<!--@elseif($time_calc >=60 && $time_calc < 3600)-->{@ $_atc_date = floor($time_calc/60).'분 전'}
<!--@elseif($time_calc>=3600 && $time_calc < 86400)-->{@ $_atc_date = floor($time_calc/3600).'시간 전'}
<!--@elseif($time_calc>=86400)-->{@ $_atc_date = floor($time_calc/86400).'일 전'}
<!--@end-->
에 $x_date = strtotime($document->getLast_Update(YmdHi)); 라는것을 밑줄에 추가했다가
사이트 전체가 먹통이 되어서 백업으로 되돌렸습니다
그 밑에 아예 {@ 로 시작해 <!--@end--> 로 끝나는 테이블을 하나 더 추가하여 getLastUpdate로 해보았으나 마찬가지였습니다
아니면 '새로 만들어야 한다'는 개념은 어느 태그를 서치하다보면 배울 수 있을까요? ;_;
모쪼록 질문이 불쾌하지 않으셨으면 좋겠습니다ㅜㅜ
$document->getRegdate(YmdHi) 이게 등록일 입니다.
수정일을 똑같이 한세트 더 만들어서 사용해야 한다는 것입니다.
말씀하신대로 세트를 '한세트 더' 만들어서 해보았습니다
수정일의 경우 getUpdate 로 하면 되더라구요 근데 문제는
{@
$x_date = strtotime($document->getUpdate (YmdHi));
(밑은 길어서 생략했습니다)
이렇게 한 세트를 더 만들 경우, Update와 Regdate가 똑같이 나오더라구요
예를 들어 등록은 1시간전에 하고 업데이트는 1초전에 했는데
한 채 더 만들어서 붙일 경우 똑같이 등록시간 1시간전/업데이트1시간전으로 출력이 되었습니다
긴 시간 끈기있게 인내심있게 가르쳐주셔서 감사합니다
변수도 다 바꾸셔야죠. 업데이트 시간을 담을 변수로 새로 할당하고 전부 새롭게 한세트를 다시 만드셔야 합니다.
$x_date <-- 이건 이미 썼으니 다른 것으로 바꾸셔야 하고 밑에 사용한 변수도 다 바꿔야 합니다.
time_calc -> time_calcc
@ $_atc_date ->@ $_atcc_date
이런식으로 전부 다 바꾸었습니다
하나바꾸고 업로드 / 하나바꾸고 업로드 이런 식으로 계속하다보니
그랬더니 ~일전, ~분전, 몇초전이 구현되었습니다!!!
그리고 업데이트와 등록일이 확실하게 구분되었어요!!
한가지 에러는 150분 전 1796분 전 이런 식으로 뜹니다
혹시 숫자도 바꾸어야 하나요? 숫자를
60 -> 59
3600 -> 3481
86400 -> 83544
이런식으로 바꿔서도 해보았습니다만 150분전이 148분전 으로 바뀌는등의 차이만 있네요
오류가 있는지 계속 살펴보겠습니다!!