@마시마로 님의 짧은주소변환 애드온이 유용한대 매번 구글api에서 주소를 변환하는 애로사항이 있습니다.
그래서 api 작동은 글 작성시 1회만 해서 해당 글의 extra_var 필드에 받아온 짧은 주소를 저장 한 후 이 후 글 읽기에서는 이 저장된 짧은 주소를 보여주면 좋을 것 같아 질문을 드립니다.
$result 에 담긴 짧은주소 의 데이터를
extra_var 필드에 저장(update) 하는 쿼리를 실행하는 php소스와 쿼리 xml
exra_var 필더에 저장된 값을 불러오는(get) 쿼리를 실행하는php 소스와 쿼리 xml
두가지를 어떻게 작성하는지 궁금합니다. 좋은 자료인데 호스팅사의 컨디션에 따라 구글과의 통신속도 등등 여러가지에 따라 api사용이 글 읽는 속도에 많은 영향을 준다면 사용하지 못하는 경우가 많을 듯 해서요. 저희도 글읽는 속도가 떨어져서 지금 사용을 중단한 상태입니다.
댓글 10
구조 자체는 api 를 계속 통신을 해야 하니 개선을 하면 당연히 좋을듯 한데 개발자님 응원만 해봅니다.
다만 전 적용후 전/후 차이가 크게 느껴지지 않네요. 사이트가 작아서 그런가~
extra_var에 짧은 주소가 있는지 확인
있다면 -> 바로 불러오고
없다면 -> API 통신해서 가져오기
XE 특성상 extra_var를 사용하려면 사전 등록을 해야 합니다.
"앞으로 이 모듈에서 short_url이라는 확장변수를 사용하겠음! 내가 찜했음! 퉤!"라고 먼저 선언해 놓아야 나중에 short_url이라는 확장변수를 저장할 수 있어요. 미리 등록하지 않은 확장변수를 넣으면 코어에서 무시합니다. (글 작성시 폼에서 함께 들어오는 온갖 잡스러운 변수들이 모두 저장되면 곤란하기 때문) 확장변수 사전 등록을 할 때는 DocumentController 클래스의 insertDocumentExtraKey() 함수를 사용합니다. 게시판 설정에서 확장변수를 수동으로 등록해도 상관없습니다.
일단 이렇게 등록해 놓으면 insertDocument나 updateDocument를 호출하면서 $obj->short_url 변수에 짧은주소를 넣어주기만 하면 됩니다. 알아서 저장됩니다. 특정 문서의 짧은주소를 불러올 때는 $oDocument->getExtraEidValue('short_url') 하시면 되고요.
사용자정의를 말씀 드린게 아니구요.
문서안의 extra_var 필드를 말씀드린거라서요.
text로 넣을 수 있는 필드가 있습니다.
포인트팡팡 애드온에서 댓글에서 당첨된 회원과 포인트를 기록해 두는 방식을 말씀 드린거에요.
아래 글에도 댓글로 보여드렸던 이미지 인데요
이게 문서 1개의 db 이거든요. 이 db에 하나의 필드로 가지고 있는 곳이요.
문서를 가져올 때 모든 필드를 다 불러왔다면 $oDocument->get('extra_vars')로 접근이 가능할 거고요, 그렇지 않다면 별도 쿼리로 불러와야 할 거예요. 기존 애드온에 쿼리가 들어있을 테니 참고해 보세요.
불러온 후에는 unserialize 해서 객체로 변환한 후, 원하시는 데이터를 추가하고, 다시 serialize 해서 저장해야 합니다. 저장하는 쿼리도 저 기능을 이미 사용하는 애드온에 함께 들어있을 거예요. documents 테이블의 extra_vars 필드를 update하는 것뿐일 테니, 쿼리 파일을 복사하실 필요도 없이 그냥 불러다 써도 무방합니다.
단, 다른 자료에서 이미 저 필드를 사용하고 있다면 구현 방식에 따라 서로 덮어씌우는 상황이 발생할 수도 있습니다. 이런 문제 때문에 확장변수를 다른 테이블로 분리하게 된 거죠...