RadarURL
웹 프로그래밍

현재 XE 1.7.3 의 메뉴체계 에 불만이 있으신 분들만 써보세요

by JaeSoo posted Jul 21, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

제(sejin7940)  나름 수정한 menu 모듈 올려드립니다.

현재 XE 1.7.3 의 메뉴체계 에 불만이 있으신 분들만 써보세요

 

어떤 문제가 생길지 모르니  (저만 테스트한거기에..  ^^;)

실제 사이트에는 아직 적용하지 마시고,  테스트 사이트 등을 운영하시는 분들만  한번 깔아서 사용해보세요

(실제 사이트는,  추후 이걸 적용해보신 분들이  버그 없다고 할때...  반응 보고 하시길.. 책임 안 집니다 ^^;)

 

 

XE 1.7.3  기반의  메뉴 기능을 개선해보았습니다.

 

1) 메뉴 삭제와 모듈 삭제를 분리

 

-> 메뉴가 삭제될때 원본 모듈(게시판/위젯/페이지 등)  이 삭제 안 되도록 해두었습니다.  

 

    그러면, 메뉴 삭제 후  다른 메뉴에서 이 생성되어있는 모듈을 연결할 수 있어야겠죠?

    또한 게시판에서 모듈을 복사해서 생성한 뒤에,  메뉴에서 연결할 방법이 있어야겠죠?   

 

 

2) 바로가기를 통해  미리 생성된 게시판/모듈등을 메뉴에 바로 연결 가능  (두가지형태로)

 

->  메뉴추가 / 바로가기    한 다음에

    utl 링크탭의  주소란의  http:// 를 지우고,  그냥  mid  값을 기재하시면 되는데..

    이 때, '모듈 설정과 직접 연결 '  에 체크를 해두면,  마치  메뉴추가에서 직접 게시판 생성한 것처럼 게시판과 연결이 되고

         (바로가기가 아니라 생성과 같은 형태가 되기에 아이콘도 바로가기 아이콘이 안 나올겁니다.

          모듈 설정과 연결되기에 메뉴수정에서 메뉴ID 를 바꾸면  모듈의 id 도 같이 바뀌게 되겠죠. )

    '모듈 설정과 직접 연결' 를 체크 안 하고 mid 를 기재하면,  바로가기 로 연결이 걸립니다.

         (바로가기가 아닌 경우..  수정시 모듈자체에 영향은 안 줍니다)

 

    추후 관리 원하는 방식에 맞춰서 '모듈 설정과 직접 연결 ' 를 체크하시면 됩니다. 

   (물론 어느 경우든 메뉴 삭제시 모듈이 같이 삭제되진 않습니다.  관리의 편이를 생각해서 결정하시면 됩니다.

 

 05f2cf88a273157011a52862a895adc1.gif

 

3) 홈페이지 첫페이지 설정 메뉴 도 삭제 가능

-> 홈 아이콘이 있는 메뉴도 삭제 가능합니다.

     물론 재연결도 가능합니다. 

 

 

 

설치 방법 :

 

moduls/menu  를 지우지 마시고..  (제가 올리는 수정모듈에 흠이 있을수도 있으니 ^^;;)

기존 걸 menu_bk  로 폴더명을 변경하신 후에

첨부파일 중에,  menu.zip 을 압축풀고,   modules/  폴더 안에,  첨부한 menu  폴더를 올려보세요

참고로 수정내용은 txt 파일로 같이 첨부해드립니다.

 

다운로드:menu.zip


혹시나 이거 적용후,  사이트가 박살나면...

새로 올린 menu 폴더 지우고,  menu_bk 를 menu 로 변경해서 복원하시면 될겁니다 ^^;;

 

(혹시나의 상황에 대해 절대 책임지지 않습니다 ^^;)

 

 

테스트해보시고, 

잘 되면 잘된다...  고 의견 남겨주시고  (다른 분들도 도전해보시도록..    피해자를 늘려야죠 ^^;; )

문제가 있거나 어떤 문제가 있는지 댓글 달아주세요 ^^;  ( 보완하고, 정 못 쓸정도가 되면 이 글 지워버리게요 ^^;;;)

 

 

 

참고로,    게시판 1.7 에 게시판 신규생성 버튼 넣는 방법은

modules/board/tpl/index.html 에서..

<a class="x_btn modalAnchor x_pull-right _manage_selected" href="#manageSelectedModule">{$lang->cmd_manage_selected_board}</a>

로 된 코드 밑에 아래의 1번 코드를 추가해주시면 됩니다.

<a class="x_btn x_pull-right" style="margin-right:10px" href="{getUrl('act','dispBoardAdminInsertBoard','module_srl','')}">{$lang->cmd_create_board}</a>


또는 다른방법으론 

<span class="x_btn-gruop x_pull-right"><a class="btn" href="{getUrl('act','dispBoardAdminInsertBoard', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_create_board}</a>&nbsp;<a class="x_btn modalAnchor x_pull-right _manage_selected" href="#manageSelectedModule">{$lang->cmd_manage_selected_board}</a></span>

 와 같이 해도 됩니다.

그러면 아래 그림처럼 게시판등록 버튼이 생깁니다.

bd1533c81a120e760a8a7dc9f269b1d3.gif



 

 

참고2.  XE 1.7 의  페이지 모듈에서 페이지 생성하는 방법 은

http://joinjobs.net/xe/jj_xetip/3717 에 적어두었습니다 ^^ 

 

 

 

ps. 현재 XE 1.7.3 자체의 몇가지 하자는 이 개선에서는 그냥 무시합니다. ^^;;

예를들어,  모듈 연결된 설정의 메뉴ID 를 변경하면,   바로가기 링크걸린 다른 메뉴의 ID 값은 같이 변경 안 된다든지 등..

 

 

=======================================

 

1. 1차수정 (130316 20:35)

   1) 기존에는 바로가기로 생성된 mid 만 연결가능하게 했었는데 (없으면 에러뜨게)

       사이트맵을 먼저 생성 후 게시판을 복사할 수도 있으니 생성되지 않은 게시판들에 대해서도

       사이트맵에서 먼저 메뉴 생성하고 지정가능하게 변경

 

   2) 메뉴 수정시 이상한 alert 창 하나 뜨던거 삭제


2.수정방법

function deleteMenu  안에서



// Delete modules

$output = executeQueryArray('menu.getMenuItems', $args);

if(!$output->toBool())

{

return $output;

}


$oModuleController = getController('module');

$oModuleModel = &getModel('module');


foreach($output->data as $itemInfo)

{

if($itemInfo->is_shortcut != 'Y' && !preg_match('/^http/i',$itemInfo->url))

{

$moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url, $menuInfo->site_srl);

if($moduleInfo->module_srl)

{

$output = $oModuleController->onlyDeleteModule($moduleInfo->module_srl);

if(!$output->toBool())

{

$oDB->rollback();

return $output;

}

}

}

}


전체를 주석처리




private function _deleteMenuItem 에서



$moduleInfo = $oModuleModel->getModuleInfoByMid($node['url'], $menuInfo->site_srl);

if($moduleInfo->module_srl)

{

$output = $oModuleController->onlyDeleteModule($moduleInfo->module_srl);

if(!$output->toBool())

{

$oDB->rollback();

return $output;

}

}


부분 삭제 또는 주석처리





2. 시작메뉴 삭제방법


1)

modules/menu/menu.admin.controller.php 에서


function procMenuAdminDelete()  함수에서



if($isStartmenuInclude)

{

return new Object(-1, 'msg_cannot_delete_homemenu');

}


를 삭제하거나 주석처리




2)

modules/menu/menu.admin.controller.php 에서


public function deleteItem 함수에서


if($isStartmenuInclude)

{

return new Object(-1, 'msg_cannot_delete_homemenu');

}


를 삭제하거나 주석처리



3)




3. 메뉴 바로가기에서 바로가기  를 mid 로 연결하는 방법


modules/menu/menu.admin.model.php  에서



1) private function _insertShortcut  함수에서



// empty target shortcut

else



위에다가 아래 항목 추가



// 게시판 모듈 mid 지정시 (sejin7940)

elseif($request->shortcut_target) {


$args = new stdClass();

$args->menu_srl = $request->menu_srl;

$args->name = $request->menu_name;

$args->parent_srl = $request->parent_srl;


if($request->shortcut_link_module) {

$args->is_shortcut = 'N';

}

else {

$args->is_shortcut = 'Y';

}


/*

// check already created module instance

$oModuleModel = &getModel('module');

// if not exist module, return error

$moduleInfo = $oModuleModel->getModuleInfoByMid($request->shortcut_target);

if(!$moduleInfo)

{

// return new Object(-1, 'msg_module_is_not_exists');

// $args->is_shortcut = 'Y';

}

*/


$args->url = $request->shortcut_target;

}




2) public function procMenuAdminUpdateItem()  함수에서


// type is module short cut

else if(is_numeric($request->shortcut_target))

{

// Get new original information

$newItemInfo = $oMenuAdminModel->getMenuItemInfo($request->shortcut_target);

if(!$newItemInfo->menu_item_srl)

{

return new Object(-1, 'msg_invalid_request');

}


$args->url = $newItemInfo->url;

$args->is_shortcut = 'Y';

}



아래쪽에다가  아래 문구 통째로 추가


// 게시판 모듈 mid 지정시 (sejin7940)

elseif($request->shortcut_target) {


// check already created module instance

$oModuleModel = &getModel('module');


if($request->shortcut_link_module) {

$args->is_shortcut = 'N';

}

else {

$args->is_shortcut = 'Y';

}


/*

// if not exist module, return error

$moduleInfo = $oModuleModel->getModuleInfoByMid($request->shortcut_target);

if(!$moduleInfo)

{

// return new Object(-1, 'msg_module_is_not_exists');

// $args->is_shortcut = 'Y';

}

*/

$args->url = $request->shortcut_target;


}




3. modules/menu/tpl/sitemap.html 에서


1) 

sMID = $('#default ._url_link').val();  


아래에다가 추가


params['shortcut_link_module'] = $('#default ._url_link_module').attr("checked");  // sejin7940 (모듈과 직접 설정 링크 값 전달)



2)

1834번째줄 즈음의


params[sTargetKey] = sUrl;   아래에다가 추가


if(isShortCut=='Y') params['shortcut_link_module'] = $('#add_menu .x_active ._url_link_module').attr("checked");  // sejin7940 (모듈과 직접 설정 링크 값 전달)





3) 

<input type="url" class="_linkUrl" required title="{$lang->url_link}" /> 


아래에다가 추가


<br><input type="checkbox" class="_url_link_module">모듈 설정과 직접 연결 <!-- sejin7940 -->




4) 

<input type="text" class="_url_link" title="{$lang->url_link}" />


아래에다가 추가


<br><input type="checkbox" class="_url_link_module">모듈 설정과 직접 연결 <!-- sejin7940 -->




4) 대략 1884번째줄 즈음의


if(htInfo.href !== htInfo.url){

// Menu shortcut

$(this).find('a[href="#fix_linkMenu"]').click();

//$(this).find('._menu_link').val();

showMenuSelector($(this).find('._menuSelector_menuTreeContainer'), htInfo.url);

}else{

// URL shortcut

$(this).find('a[href="#fix_linkUrl"]').click();

$(this).find('._url_link').val(htInfo.url);

showMenuSelector($(this).find('._menuSelector_menuTreeContainer'));

}*/


주석처리하고 그 아래에다가 기재



// sejin7940 - 메뉴링크 대신 무조건 URL 링크가 기본이 되도록  ( 메뉴링크에 해당되어도 현재 어떤 메뉴인지 표시도 안 되어서 의미가 적은듯)

// URL shortcut

$(this).find('a[href="#fix_linkUrl"]').click();

$(this).find('._url_link').val(htInfo.url);

showMenuSelector($(this).find('._menuSelector_menuTreeContainer'));

 

 
 

출처 : http://joinjobs.net/xe/3710


Articles

1 2 3 4 5 6 7 8 9 10