애드온 만들때 페이지 최상단 문구표시 관리자에서만 오류 나오는이유?
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 8.1 |
addon.php
<?php
/* Copyright (C) NAVER <http://www.navercorp.com> */
if(!defined('__XE__'))
exit();
//test
echo 'hello world';
오류내용
일반 사용자 보는 페이지에서는 안나오고요
관리페이지만 들어가면 아작스오류가 계속 뜨네요
모든 관리페이지에서 동일증상이고요
페이지 자체는 정상동작이 되나 방문자표는 출력이 안됩니다.
저는 페이지 맨위에 글씨만 출력하고싶을뿐인데 간단한게 왜안될까요
hello wolrd도 한번나오라고 썼지만 네번이나 중복 출력되고있습니다.
댓글 5
다른 건 잘 모르겠는데 네 번 나오는 건 애드온 호출시점($called_position) 구분을 안 해줘서 그런 걸 겁니다.
애드온 호출 시점 총 4회 중 1회만 echo가 되도록 해야 해요.
호출 시점이나 상황 상관없이 무조건 hello world를 출력하도록 구성하셨으니 당연히 오류가 발생할 수밖에 없습니다. 다른 애드온 소스코드를 보시고 어떻게 구성되어 있는지 분석하시는걸 먼저 하셔야 할것 같습니다.
포토스와이프 애드온이 유저가 보는 화면에서만 실행되며 화면상 내용을 출력하는게 전부인 애드온중 하나입니다.
코드를 잘 보시면
if($called_position == 'after_module_proc' && Context::getResponseMethod() == "HTML" && Context::get('module') != 'admin' && !isCrawler())
와 같은 if문을 확인하실수 있습니다.
$called_position == 'after_module_proc' - called_position이라는 변수가 after_module_proc일때만 실행합니다. called_position에는 총 4가지 값이 올 수 있으며 자세한 내용은 https://conory.com/blog/14417 에 잘 정리되어 있습니다.
Context::getResponseMethod() == "HTML" - exec_json으로 요청하는 경우 동작하지 않기 위해 들어있는 조건입니다.
Context::get('module') != 'admin' - 관리자 화면에서 동작하는것을 막기 위해 들어있는 조건입니다.
!isCrawler() - 네이버 봇, 구글 봇 등 검색봇 방문시 실행하지 않습니다.