Q&A

혹시 모듈 트리거를 통해 코어의 seo 태그를 제어할 수 있을까요?

2022.07.05 09:26
1,516
0
CMS/프레임워크 Rhymix 2.0
개발 언어 PHP 8.1

안녕하세요

 

혹시 라이믹스 코어에서 붙여주는 og, twitter 태그 등을

코어수정없이 moduleobject.proc 트리거를 이용해서 제거를 하는 메소드가 있을까요?

 

브라우저 타이틀을 나중에 끼어들어서 덮어씌우는건 Context 함수를 통해 settitle을 할 수 있던데, 메타태그나 seo태그 등을 제거하는 부분은 혼자서 찾기가 어렵네요 ㅠㅠ 

 

특정 조건에서 페이지의 seo태그를 빼거나 넣거나 조절을 해보려고 하는데요, 개발방향 조언을 부탁드립니다 

댓글 5

  • 2022.07.05 11:14 #1695723

    굳이 제거하거나 덮어씌울 것 없습니다. 코어에서 넣어주는 메타 태그는 기본값일 뿐, 모듈 실행 도중이든 직후(moduleObject.proc after)든 언제라도 title이나 og 태그를 직접 지정할 수 있으니 원하시는 값을 넣으면 됩니다.

     

    Context::setBrowserTitle(제목);

    Context::addMetaTag(이름, 값);

    Context::addMetaImage(파일명, width, height);

    Context::addOpenGraphData(키, 값);

     

    만약 지정되지 않는 것이 있다면 버그이니 신고해 주시기 바랍니다.

  • 2022.07.05 11:22 #1695736

    기진곰님 안녕하세요! 안그래도 소스코드를 샅샅이 뒤져보고 있었는데요

     

    // call a trigger before layout
    ModuleHandler::triggerCall('layout', 'before', $oModule);

    // apply layout
    $output = $handler->toDoc($oModule);

    // call a trigger before display
    ModuleHandler::triggerCall('display', 'before', $output);
    $original_output = $output;

     

    DisplayHandler.class.php의 82번째 라인 즈음에 위 라인이 존재하고

    저 $output = $handler->toDoc($oModule); 코드 부분에서 addMetaTag 등이 진행되면서 Context.class.php의 $_instance에 opengraph_metadata, meta_images 등이 오브젝트로 들어간다 까지 이해하였습니다.

     

    혹시 코어에서 처리를 하고 나서, 나중에 제가 끼어들어서 meta 태그 또는 og 태그 "요소를 제거" 하거나  "요소를 바꿔치기" 하려면

     

    ModuleHandler::triggerCall('display', 'before', $output);

     

    이 부분에서 

     

    Context::getOpenGraphData() 을 통해 데이터를 가져오고 > 제가 값을 조작한다음 > Context::addOpenGraphData(키, 값); 을 통해 다시 집어넣으면 되는걸까요?

     

    아니면 좀 더 일찍 호출되는 트리거에서 끼어들어야 할까요?

     

    og태그에서 특정 요소를 제가 끼어들어서 조작하고 싶은데, 이미 존재하는 og태그 값에 무언가를 추가하는 메소드(addOpenGraphData)는 존재하는데 removeOpenGraphData 는 존재하지가 않는것 같네요 ㅠㅠ

     

  • 2022.07.05 11:27 #1695741

    layout.before 이전에 아무 때나 하셔도 됩니다. 대개 여기보다는 moduleObject.proc 전후 시점이 더 유리합니다. 확인하신 시점에서 무조건 현재 글이나 게시판 기준으로 메타 태그를 만들어 넣는 것이 아니라, 수동으로 지정한 값이 없는 경우에만 자동으로 만들어 넣도록 되어 있거든요. 미리 지정해 두시면 그 값을 존중합니다.

    그 후에 하시려고 하면 오히려 복잡합니다. HTML 태그가 이미 삽입되어 버린 상황에서 다시 빼려면 복잡한 정규식을 동원한 비효율적인 처리가 필요하겠지요.

     

    단, 제거하려면 복잡해질 수밖에 없겠네요. 값이 없으면 자동으로 다시 넣어버리니까요.

  • 2022.07.05 11:32 #1695751
    아 네 말씀주신 내용으로 큰 도움이 되었습니다 감사합니다~

    Context::setBrowserTitle 은 있는데
    Context::setOpenGraphData('og:url', $canonical_url); 함수는 없어서 조금 헤맷었네요 ㅎㅎ
  • 2022.07.05 11:34 #1695755
    canonical URL을 변경하고 싶으시다면 Context::setCanonicalURL() 함수가 따로 있습니다.