묻고답하기
로그인 할때마다 DB의 포인트가 자동으로 캐시에 리프래쉬 문의
2012.09.11 01:05
포인트를 외부페이지에서 증.감 시켰을때 캐쉬에 반영되게 하기 위해서
로그인 할때마다 DB의 포인트가 자동으로 캐시에 리프래쉬 되게 하는 방법이 가능할까요?
송동우 님이 알려주신 아래의 소스는 제가 응용하기 위해서는
해설이 많이 요구되는 수준이라서..귀찮게 할것 같아 알려달라 할수도 없고..
http://www.xpressengine.com/qna/20939941
위의 소스를 참고해서 힌트를 좀 자세히 알려주실분 있는가요?
댓글 4
-
송동우
2012.09.11 01:39
-
고이풀
2012.09.11 13:30
송동우님.재로그인 하니까 잘되네요.^*^..감사해요..제가 모듈제작 못해서,외부페이지 만들어서 포인트 지급해요. -
고이풀
2012.09.11 13:32
외부페이지에서 지급즉시 캐시를 리프래쉬 시키는 쿼리에 연결하면 좋겠지만,능력이 안되어 이것으로도 괜찮네요. -
송동우
2012.09.11 14:15
외부페이지에서 바로 적용하는 것은
이때까지 계속 링크 걸었던 곳의 답변의 코드를 이용하면 됩니다.
관리자에게만 나타나게 조건을 주고
폼의 내용을 점수 입력, 점수 받을 대상만 추가해서
조금만 응용하면 됩니다........
당연히 db포인트 적용되고 캐시파일도 적용되고....
아마도
외부페이지에서 직접쿼리를 db에 날려 포인트를 수정하는 것 같은데요......
그러면 캐시파일은 변경되지 않죠.......
링크된 돗의 코드는 외부페이지 상관없이 db에 적용되고 캐시파일도 적용됩니다......
-
송동우
2012.09.11 15:05
한가지 정의 해야할 것은
외부페이지라는 것은
관리페이지에서 페이지 모듈을 통해서 생성된 페이지를 말하는 겁니다.
그렇지 않으면 그건 xe와 전혀 상관없는 페이지입니다.
페이지 모듈을 통해 생성한 외부페이지라는 전제하에
아래 코드를 원하는 곳에 붙여 넣어 보세요.....
<div cond="$logged_info->is_admin=='Y'">
<form method="post" action="">
<label>{$lang->nick_name}</label><input type="text" name="memberNick" />
<label>+</label><input type="radio" name="addOrMinus" value="" checked="checked" />
<label>-</label><input type="radio" name="addOrMinus" value="-" />
<label>포인트</label><input type="text" name="pointMore" />
<button type="submit">Go</button>
</form>
{@ $pointMore = preg_match('/[^0-9]/', $pointMore)?'':$pointMore}
<block cond="$pointMore&&$memberNick">
{@
$oMemberModel =& getModel('member');
$output = $oMemberModel->getMemberSrlByNickName($memberNick);
$oPointController = &getController('point');
$oPointController->setPoint($output,$addOrMinus.$pointMore, 'add');
}
</block>
</div>관리자에게만 나타나고
원하는 회원의 닉네임과 포인트 점수를 입력하면 됩니다.....
db및 캐시파일도 바로 적용됩니다....
이것 역시 링크에 걸어둔 답변을 응용한 것일뿐 별 다른 것 없는 없습니다만
응용력이 없으신 것 같아
마지막으로 이 문제에 대해 답변 드리며 코드 올립니다.....
-
고이풀
2012.09.11 23:05
로그인 한 본인이 리프래쉬 할수 있는 버튼이 필요해요...보완 설명을 아래 글로 달았습니다. 송선생임 감사..해욤. -
고이풀
2012.09.11 23:03
외부페이지라는 것은
관리페이지에서 페이지 모듈을 통해서 생성된 페이지를 말하는 겁니다.
그렇지 않으면 그건 xe와 전혀 상관없는 페이지입니다.
외부페이지에서 직접쿼리를 db에 날려 포인트를 수정하는 것 같은데요.=>맞습니다. 관리자에서 생성한 외부페이지가 아니라
일반 웹페이지를 만들어서 쿼리를 통해 DB에 바로 입력시키다 보니..
Xe의 코어에 반영시킬 방법이 없고, 재로그인 방법밖에 없더군요.
포인트값을 DB에서 캐시로 리프래쉬 하는 더 좋은 방법을 생각해 본다면
로그인 박스에 출력되게 한 [포인트] 글자를 클릭하였을때
재로그인 하였을때와 같이 포인트값이 DB에서 리프래쉬 되게 하면 참 좋겠다 생각해요.
그럴려면 포인트 글자에 링크를 걸면 좋겠는데,
링크를 걸 소스의 파일동작이 화면 변동없이 내부에서 순간적으로 이루어 져야 하는데
이것이 가능할 까요?
이것이 불가능하다 해도 송동우님이 먼저 알려주신 소스로도 도움이 되니까 감사해요.
xe - modules - member - member.controller.php 열고
line 1550 쯤에
$this->setSessionInfo();
이것 바로 아래에
$output = executeQuery('point.getPoint', $args);
$cache_path = sprintf('./files/member_extra_info/point/%s/', getNumberingPath($args->member_srl));
FileHandler::makedir($cache_path);
$cache_filename = sprintf('%s%d.cache.txt', $cache_path, $args->member_srl);
FileHandler::writeFile($cache_filename, $output->data->point);
이것 입력.......
만일 이것도 이해가 안되면
전체적인 작업의 설명이 필요할 듯 합니다......
한번에 끝날 수 있는 질문을
질문이 구체적이지 않아 꼬리에 꼬리를 무는 질문반복 현상이 나타나는 듯 합니다.......
사실 db에서 직접 포인트를 수정할 필요도 없고
훨씬 간편하게 작업을 할 수 있는데 어렵게 작업을 하고 있다는 느낌입니다....
아무튼 그런건 질문이 구체적이지 않으니 3자 입장에서는 무엇을 하려고 하는지
제대로 이해하지 못해서 생기는 오해일 수도 있구요......
해보시고
안되면 다시 글 남기세요..........그때는 좀 구체적으로.......