CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | 사용안함 |
필요가 없을 것 같아 어제 질문글을 삭제했는데 브라우저에 따라 이 기능이 필요해서 다시 올립니다.
/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg
위 와 같은 경로의 이미지 url 소스를 글 읽는 화면에서
/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg?현재시간년월일분초
로 치환해 주는 스크립트가 필요합니다.
정규식과 같은 지식이 부족해 직접 하지 못해 문의를 드립니다.
특정 조건의 방문자(회원)에게 치환된 ulr로 제공하려고 합니다.
- 특정 조건 등은 애드온 php에서 확인하고 작동이 필요한 경우 스크립트를 로드하려고 합니다.
브라우저캐시 무력화를 위한 것으로 어제 브라우저 강력새로고침을 발생시켜 더 좋은 해결책으로 구현하긴 했으나 웹뷰에서는 앱캐시로 인해 url주소를 변경해 제공해야 하는 상황이 발견되어 필요하게 되었습니다.
댓글 15
http://tylerfrankenstein.com/user/4/code/javascript-date-time-yyyy-mm-dd-hh-mm-ss
본문에서 위 문자열을 정규식으로 처리해서 뒤에 ?timestamp를 붙인 것으로 치환해주는 게 필요한거라서요...
일부 첨부가 아닌 이미지가 극히 소수가 있긴 하지만 말씀하신대로 모든 이미지를 처리해도 가능할 것 같습니다. 다만 첨부형태라도 특정 class를 가지는 것이 아니라 class 기준으로는 어려울 것 같구요. 그래서 정규식으로 저 url 을 선택하게 된 것입니다.
물론 전체 타겟은 본문을 특정하는 XE 내장 클래스 등을 써야 하는 것은 맞을 것 같구요. 개별 이미지 소스는 class가 따로 없구요.
혹시 본문의 모든 이미지(확장자가 있는)를 src 값 뒤에 ?timestamp로 붙여서 바꿔치기하는 것 요청드려도 될까요? 시간 여유가 되시면 한번 봐주세요. 타겟은 PC,모바일 '.rd_body .xe_content , .read-body .xe_content' 이렇게 됩니다.
아 한번만 캐싱을 무력화 하면 성공하는 것이니 굳이 매시간을 붙일 필요는 없을 것 같네요.
?특정문자 로 해서 붙여주는 방법이 더 좋을 것 같습니다. ?nocache
마침 약속한 사람이 30분 늦는다고 해서ㅋㅋ
다만 모바일이라 어렵네요;;
(그런데 이렇게 전체에 적용하면 섬네일에 붙은 타임스탬프를 따로 예외 처리를 해야할 것 같아요ㅜ)
jQuery('.xe_content img').each(function() {
var src = jQuery(this).attr('src');
jQuery(this).attr('src', src + timestamp());
});
function timestamp() {
now = new Date();
year = "" + now.getFullYear();
month = "" + (now.getMonth() + 1);
if (month.length == 1) { month = "0" + month; } day = "" + now.getDate();
if (day.length == 1) { day = "0" + day; }
hour = "" + now.getHours();
if (hour.length == 1) { hour = "0" + hour; }
minute = "" + now.getMinutes();
if (minute.length == 1) { minute = "0" + minute; }
second = "" + now.getSeconds();
if (second.length == 1) { second = "0" + second; }
return "?" + year + month + day + hour + minute + second;
}
대강 위와 같이 each 활용해서 응용하시면 될 것 같아요.
혹시 모듈에서 만드는 이미지가 있긴한데 그게 php데이터라 확장자가 없는 주소인데 이것도 함께 치환되어 버리나요? 제가 확장자만 있는 것으로 하고 싶다고 한게 이것 때문이기도 합니다.
만약 함게 치환된다면.. 특정 클래스는 제외하는 것은 어떻게 할까요???
jQuery('.rd_body .xe_content , .read-body .xe_content').each(function() {
var src = jQuery(this).attr('src');
jQuery(this).attr('src', src + '?nocahe');
});
문법상 " " 를 써야 하는거 같기도 합니다.
jQuery('.rd_body .xe_content , .read-body .xe_content').each(function() {
var src = jQuery(this).attr('src');
jQuery(this).attr('src', src + "?nocahe");
});
일괄적으로 문자열을 붙이는 것이면 말씀하신대로 따옴표 써야 하겠구요.
그리고 php데이터이미지를 식별할 껀덕지가 있다면 그걸 기준으로 filter 처리하거나 not() 메소드로 예외 처리가 가능할 거예요.
jQuery('.rd_body .xe_content , .read-body .xe_content') 대신에
jQuery('.rd_body .xe_content img, .read-body .xe_content img') 로 하셔야겠어요.
jQuery('.rd_body .xe_content img, .read-body .xe_content img').not('.not').each~~ 로 하면 될 것 같은데요.
이처럼 선택자가 둘 이상인 경우에도 되는지는 확언은 못하겠네요;;
많은 도움 감사합니다. .not('.emcard img') 로 하니 잘되네요.
도움 주셔서 구현 완료 되었습니다. 너무 감사했습니다.
암튼 잘 됐다니 다행입니다~