모바일 레이아웃을 제작 중에, 하단에 사이트바를 넣었습니다.
1차 메뉴 아래 2차, 3차메뉴 어디를 접속하든,
해당 메뉴에 불이 켜지게 하고 싶었습니다.
1. 해당 하위 메뉴 구하기
<?php $reg = "/\/|\#|\:|\?|\=|\.|\&/"; foreach($__Context->main_menu as $key=>$val1){ foreach($val1 as $key2=>$val2){ echo "'".preg_replace($reg,"",$val2['href'])."',"; foreach($val2 as $key3=>$val3){ foreach($val3 as $key4=>$val4){ echo "'".preg_replace($reg,"",$val4['href'])."',"; foreach($val4 as $key5=>$val5){ foreach($val5 as $key6=>$val6){ echo "'".preg_replace($reg,"",$val6['href'])."',"; } } } } echo "<br>"; } } ?>
$reg는 문자열 변환 정규식입니다.
/,#,:,?,.,=,& 같은 문자는 모두 공백으로 만들어줍니다.
아래에 여러번 쓰이기 때문에 $변수화시켜줬습니다.
$__Context->main_menu는 XE의 문법을 PHP 코드에 활용하기 위해서 앞에 $__Context->를 붙여줬습니다.
원래 XE에서는 $main_menu로 쓰고 있습니다.
foreach문을 여러번 써줬는데 메뉴가 저런 식으로 구성되어있더군요. 중첩에 중첩에.. 왜 저런지는 모르겠습니다만
일단 저렇게 해줘야 출력되어서 저렇게 써줬습니다-_-;
preg_replace("찾는문자","바꿀문자","대상문자") 이렇습니다.
2. 배열로 만들기
1번 과정에서 해당 메뉴에 있는 하위 메뉴를 모두 구해왔다면 이제 배열로 다 담아줍니다.
{@ $store = array('shop','shop','shop','store_wordpress','gnu_market','store_cafe24','store_excel','design_market','pointcharge','pointcharge','httpseondcomindexphpactdispPointhistoryListamp;midpointcharge','market_point','xe_refund','plusad','manual','manual_layout','manual_widget','manual_widgetskin','manual_widgetstyle','manual_module','manual_addon','version','xe_download','xe_download','xe_data','xe_idea','xe_market','shop_guide'); $experts = array('process','process','project_consulting','request','order','portfolio','portfolio_cms','preview','portfolio_xe','client_interview','myprojects','licensekey','cart','xe_myshop','paylog','price','httpseondcompricea','httpseondcompriceb','httpseondcompricec'); $hosting = array('hosting','hosting_forum','hosting_faq'); $webdeveloper = array('web','web','about_webdeveloper','tip','link','cms','xe','rhymix','xe_devtip','wordpress','gnuboard','cafe24','godomall','zeroboard4','ciboard','xe3','cms_qna','cms_experts','xe_link','webplanning','uiplan','webservice','project_review','companyreview','webdesign','design','uidesign','Adobe','collection','frontend','coding','css','javascript','developer','interview','itworks','php','hancoding','android','openapi','arduino','python','flutter','bot','qa_about','qa_about','qa_consulting','qos','qa_test','webaccessibility','qa_faq','download','memobook','software','cgi','jwfreenote','ietoy_download','phpstorm','webstorm','editplus','sublime','intellij','vscode'); $community = array('todak','todak','timeline','talks','qna','localgram','fun','topiktalks','music','liberalarts','mac','openkakao','noodle','food','coffee','wine','diy','onlinecommunity','humanrights','life','ppomppu','chair','sofas','interior','salze','mvno','hair','tip_life','wedding','parenting','share','sale','buy','coworking','freemarket','policy','law','live','lawguide','livewith','carwash','fintech','apt','stock','business','campaign','incruit','project','welfare','itcoop','hello','attendance','hello','memolog','pr'); }
3. 메뉴에 조건문 걸기
<li class="on"|cond="in_array($mid, $community)"> <a href="/todak"> <img src="assets/img/ico-community.svg" alt="커뮤니티"> <span>커뮤니티</span> </a> </li>
cond="in_array($mid, $community)"는 mid가 $community라는 배열문 안에 있는 문자의 경우 조건문이 발동하게 됩니다.
ps. 늘 오픈카톡방에서 이런 질문을 같이 찾아주시는 분들 감사합니다. -_-)/; 참여 원하시는 분들은 같이 이야기 나눠요~
https://open.kakao.com/o/giaKKnl
참조
https://www.hooni.net/xe/study/5645
https://blog.naver.com/PostView.nhn?blogId=reviewer__&logNo=221424138188
https://extbrain.tistory.com/24
https://xe1.xpressengine.com/qna/22012930
https://xe1.xpressengine.com/qna/21246875
https://xetown.com/tips/1132274
https://xe1.xpressengine.com/qna/23182018
https://hamait.tistory.com/342