XE 게시판 스킨에서 <?php function ... 구문을 사용하는 방법
게시판스킨에서 내가 만든 사용자 함수 사용하기 class myskin_function 라는 글을 참조했습니다.
(이 글에서는 2가지 방법을 소개해드립니다. 첫번째 방법은 위 글에서 설명한 방법이고, 두번째 방법은 간단하게 아랫쪽에 적어두었습니다.)
1. 게시판 스킨 list.html 상단에 function.html 파일을 삽입한다.
(list.html 파일의 경로 : ./modules/board/skins/eb_itssa/list.html )
<include target="assets/inc/function.html" />
2.function.html 내용
{@ $XE_version = __ZBXE_VERSION__; if(!$XE_version) $XE_version = __XE_VERSION__; $var_version = $mi->skin." Skin V4.1.0(".$XE_version."+".phpversion().")"; $linkpath = getUrl('mid',$mid,'pGanjioption',1,'offset',$offset,'pOption',$pOption,'listStyle',$listStyle,'pYear','','pMonth','','pDay',''); $skinpath = $tpl_path;// 스킨 설치 경로지정 $XE_path = getUrl(''); $obj=null;// 클리어 쿼리검색 object $arr_plan=null;// 전역변수 처럼 작용되어 위젯, 스킨 모두에서 클리어함) // 해당스킨에 function 디렉토리를 만들고 스킨에서 사용할 공통으로 사용하는 추가 함수 부분 - if(!class_exists('myskin_function')) : // 사용자 펑션이 있는지 체크 require_once($skinpath.'class.myskin_function.php'); endif; }
위 파일에서 class.myskin_function.php 파일을 불러오게 됩니다.
function.html 파일의 경로 : ./modules/board/skins/eb_itssa/assets/inc/function.html
class.myskin_function.php 파일의 경로 : ./modules/board/skins/eb_itssa/assets/inc/class.myskin_function.php
(참고로, 참조한 문서에서는 function/ 이라는 디렉토리 안에 넣었는데 저는 assets/inc/ 안에 2개의 파일 모두 넣어놓았습니다. 그래서 참조문서와는 require_once 부분의 경로가 조금 다릅니다.)
3. class.myskin_function.php 내용
<?php class myskin_function extends BaseObject { /** * @function: fn_youtube_install_extra_keys($module_srl) * @return: array * @brief:회원 확장변수 폼형식 불러오기 C.m.A. **/ function fn_member_extra_form($member_info) {// $oMemberModel = &getModel('member'); $oMemberModel = getModel('member'); $member_info = get_object_vars($member_info); $arr = $oMemberModel->getCombineJoinForm($member_info); return $arr; } function fn_my_function1($str) { // ~~~어쩌구 저쩌구 내가 만들 함수들~~~ return $tag; } function fn_my_function2($str) { // ~~~어쩌구 저쩌구 내가 만들 함수들~~~ return $tag; } function sum($arg1, $arg2){ echo $arg1 + $arg2; } } // end of class ?>
간단하게 function sum 이라는 함수를 추가해봤습니다.
4. list.html 에서의 사용방법
참조한 문서에서는
{myskin_function::sum(6,4)}
이렇게 사용한다고 되어있는데 저렇게 작성하면 아래 오류가 뜹니다.
Error #0 "Non-static method myskin_function::sum() cannot be called statically" in D:\Wnmp\nginx-bins\default\www\rx\files\cache\template\modules\board\skins\eb_itssa\list.html.php on line 73
D:\Wnmp\nginx-bins\default\www\rx\common\framework\debug.php:681
이 오류는 다음 글에서 수정 방법이 나와있습니다.
https://blog.wplauncher.com/non-static-method-should-not-be-called-statically/
1-1) 잘못 작성한 예
$subscribers = ServiceClass::getSubscribers();
1-2) 올바른 작성방법
$service = new ServiceClass();
$subscribers = $service->getSubscribers();
위 글에서 알려준 수정방법을 따르면 아래와 같이 수정하면 됩니다.
2-1) 잘못 작성한 방법, 수정 전
{myskin_function::sum(6,4)}
2-2) 올바른 작성방법, 수정 후
{@ $service = new myskin_function(); $sum = $service->sum(6,4); } {$sum}
질문1. list.html에서 바로 <?php ... ?> 를 사용할 수는 없을까요? 왜 복잡하게 function.html 파일과 class.myskin_function.php 파일을 별도로 작성한 걸까요?
바로 list.html 파일에서 제가 원하는 반복되는 글 출력 부분에 일반적인 <?php function sum()... ?> 코드를 작성하게 되면 아래와 같은 오류가 뜹니다.
PHP Fatal Error: Cannot redeclare fu_price_format() (previously declared in D:\Wnmp\nginx-bins\default\www\rx\files\cache\template\modules\board\skins\eb_itssa\list.html.php:75) in D:\Wnmp\nginx-bins\default\www\rx\files\cache\template\modules\board\skins\eb_itssa\list.html.php on line 75 D:\Wnmp\nginx-bins\default\www\rx\common\framework\debug.php:681
위 오류는
이 글에서보면 중복으로 function fu_price_format()을 호출해서라는데, 아마 제가 잘못 작성해서겠죠?;;
list에서 글이 반복되는데 저 함수를 호출해서 그럴 겁니다;;
# 첫번째 방법
# 두번째 방법
반대로 list.html 에서 php 구문을 그대로 사용하는 방법은 아래와 같습니다.
<?php function fu_price_format($price) { if($price>=10000) { $man = $price/10000; $man = round($man,1); $result = $man."만"; } else{ $result=$price; } return $result; } ?>
그리고 조회수를 출력하는 부분에서
<?=fu_price_format($__Context->document->get('readed_count'))?>
이렇게 적어주시면 됩니다.