질문/조언질답게시판

필요가 없을 것 같아 어제 질문글을 삭제했는데 브라우저에 따라 이 기능이 필요해서 다시 올립니다.

 

/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg

 

위 와 같은 경로의 이미지 url 소스를 글 읽는 화면에서 

 

/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg?현재시간년월일분초 

 

로 치환해 주는 스크립트가 필요합니다.

 

정규식과 같은 지식이 부족해 직접 하지 못해 문의를 드립니다.

 

특정 조건의 방문자(회원)에게 치환된 ulr로 제공하려고 합니다.

- 특정 조건 등은 애드온 php에서 확인하고 작동이 필요한 경우 스크립트를 로드하려고 합니다.

 

브라우저캐시 무력화를 위한 것으로 어제 브라우저 강력새로고침을 발생시켜 더 좋은 해결책으로 구현하긴 했으나 웹뷰에서는 앱캐시로 인해 url주소를 변경해 제공해야 하는 상황이 발견되어 필요하게 되었습니다.

  • profile
    스크립트라면 여기 있는 js 함수를 응용하면 될 것 같네요.
    http://tylerfrankenstein.com/user/4/code/javascript-date-time-yyyy-mm-dd-hh-mm-ss
  • profile profile

    본문에서 위 문자열을 정규식으로 처리해서 뒤에 ?timestamp를 붙인 것으로 치환해주는 게 필요한거라서요...

  • profile profile
    아 정규식으로 하셔야 하는 거군요. 저는 그냥 특정 class값이 있는 img 태그의 src 값에 물음표랑 현재의 년월일시분초 문자열을 붙여주면 되겠지 싶었어요;;
  • profile profile

    일부 첨부가 아닌 이미지가 극히 소수가 있긴 하지만 말씀하신대로 모든 이미지를 처리해도 가능할 것 같습니다. 다만 첨부형태라도 특정 class를 가지는 것이 아니라 class 기준으로는 어려울 것 같구요. 그래서 정규식으로 저 url 을 선택하게 된 것입니다.

     

    물론 전체 타겟은 본문을 특정하는 XE 내장 클래스 등을 써야 하는 것은 맞을 것 같구요. 개별 이미지 소스는 class가 따로 없구요.

  • profile profile

    혹시 본문의 모든 이미지(확장자가 있는)를 src 값 뒤에 ?timestamp로 붙여서 바꿔치기하는 것 요청드려도 될까요? 시간 여유가 되시면 한번 봐주세요. 타겟은 PC,모바일 '.rd_body .xe_content , .read-body .xe_content'  이렇게 됩니다.

     

    아 한번만 캐싱을 무력화 하면 성공하는 것이니 굳이 매시간을 붙일 필요는 없을 것 같네요.

    ?특정문자 로 해서 붙여주는 방법이 더 좋을 것 같습니다. ?nocache

  • profile profile

    마침 약속한 사람이 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;
    }

  • profile profile
    으윽, 모바일이라 수정도 어렵네요ㅠㅠ
    대강 위와 같이 each 활용해서 응용하시면 될 것 같아요.
  • profile profile
    아.. 타임스탬프는 그냥 201905150550 이런식이었구요. 다시 생각해보니 타임스탬프는 필요 없을 것 같구 그냥 지정된 단어로 하려고 합니다. 아래 펑션을 버리고 위에 것만 쓰면 되는거네요 ?
  • profile profile

    혹시 모듈에서 만드는 이미지가 있긴한데 그게 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");
    });

  • profile profile
    네 timestamp() 함수 날리시면 됩니다.
    일괄적으로 문자열을 붙이는 것이면 말씀하신대로 따옴표 써야 하겠구요.
    그리고 php데이터이미지를 식별할 껀덕지가 있다면 그걸 기준으로 filter 처리하거나 not() 메소드로 예외 처리가 가능할 거예요.
  • profile profile
    아 그리고 요소 잡으실 때
    jQuery('.rd_body .xe_content , .read-body .xe_content') 대신에
    jQuery('.rd_body .xe_content img, .read-body .xe_content img') 로 하셔야겠어요.
  • profile profile
    감사합니다. 혹시 특정 class를 제외할 수 없을까요? 위에 말씀 드린 특정 img 가 클래스를 가지고 있습니다.
  • profile profile
    제외할 클래스명이 not이라면
    jQuery('.rd_body .xe_content img, .read-body .xe_content img').not('.not').each~~ 로 하면 될 것 같은데요.
    이처럼 선택자가 둘 이상인 경우에도 되는지는 확언은 못하겠네요;;
  • profile profile

    많은 도움 감사합니다.   .not('.emcard img') 로 하니 잘되네요.

     

    도움 주셔서 구현 완료 되었습니다. 너무 감사했습니다.

  • profile profile
    오호, 소스 구조가 제가 생각했던 것과 달랐나보네요;;
    암튼 잘 됐다니 다행입니다~

서버에 요청 중입니다. 잠시만 기다려 주십시오...