修訂 | 7cfe55480911def2ebb7836e373bc7fe318f7065 (tree) |
---|---|
時間 | 2018-01-15 22:35:26 |
作者 | naoki hirata <naoki@magi...> |
Commiter | naoki hirata |
アクセスポイントメニューにメニュー定義へのリンクを付加。
@@ -8,7 +8,7 @@ | ||
8 | 8 | * |
9 | 9 | * @package Magic3 Framework |
10 | 10 | * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp> |
11 | - * @copyright Copyright 2006-2017 Magic3 Project. | |
11 | + * @copyright Copyright 2006-2018 Magic3 Project. | |
12 | 12 | * @license http://www.gnu.org/copyleft/gpl.html GPL License |
13 | 13 | * @version SVN: $Id$ |
14 | 14 | * @link http://www.magic3.org |
@@ -25,6 +25,7 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
25 | 25 | protected $useMenu; // メニューを使用するかどうか |
26 | 26 | protected $useCloseButton; // 「閉じる」を使用するかどうか |
27 | 27 | protected $systemType; // システム運用タイプ |
28 | + protected $isHierMenu; // メニュー定義編集画面が多階層タイプであるかどうか | |
28 | 29 | const DEFAULT_CSS_FILE = '/default.css'; // CSSファイル |
29 | 30 | const WIDGET_CSS_FILE = '/widget.css'; // ウィジェット単体表示用CSS |
30 | 31 | const DEFAULT_NAV_ID = 'admin_menu'; // ナビゲーションメニューID |
@@ -49,6 +50,7 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
49 | 50 | const SITE_CLOSE_ICON_FILE = '/images/system/site_close24.png'; // アクセスポイント非公開 |
50 | 51 | const LOGOUT_ICON_FILE = '/images/system/logout24.png'; // ログアウトアイコン |
51 | 52 | const CONFIG_ICON_FILE = '/images/system/config24.png'; // ウィジェット設定画面アイコン |
53 | + const MENU_ICON_FILE = '/images/system/menu24.png'; // メニュー定義画面アイコン | |
52 | 54 | const MAX_SITENAME_LENGTH = 20; // サイト名の最大文字数 |
53 | 55 | const MAX_SITENAME_LENGTH_S = 9; // サイト名の最大文字数 |
54 | 56 | const ICON_SIZE = 24; // アイコンサイズ |
@@ -58,13 +60,16 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
58 | 60 | const MENU_TITLE_PREVIEW = 'プレビュー'; |
59 | 61 | const MENU_TITLE_CONTENT = 'コンテンツ管理'; // コンテンツ編集メニューのタイトル |
60 | 62 | const MENU_TITLE_SUB_CONTENT = 'サブコンテンツ管理'; // サブコンテンツ編集メニューのタイトル |
63 | + const MENU_TITLE_MENUDEF = 'メニュー定義'; // メニュー定義編集メニューのタイトル | |
61 | 64 | const UNTITLED_USER_NAME = '名称なしユーザ'; // ユーザ名が設定されていなかった場合の表示名 |
62 | 65 | const MAINMENU_INDENT_LEBEL = 4; // メインメニューのインデントレベル |
63 | 66 | const SITEMENU_INDENT_LEBEL = 2; // サイトメニューのインデントレベル |
64 | 67 | const MAINMENU_COL_STYLE = 'col-md-'; // Bootstrapのカラムクラス |
65 | 68 | const MENUBAR_HEIGHT = 60; // メインメニューバーの高さ |
66 | 69 | const SUB_MENUBAR_HEIGHT = 50; // サブメニューバーの高さ |
67 | - | |
70 | + const SEL_MENU_ID = 'admin_menu'; // メニュー変換対象メニューバーID | |
71 | + const TREE_MENU_TASK = 'menudef'; // メニュー管理画面(多階層) | |
72 | + | |
68 | 73 | // DB定義値 |
69 | 74 | const CF_SITE_IN_PUBLIC = 'site_in_public'; // サイト公開状況 |
70 | 75 | const CF_SITE_PC_IN_PUBLIC = 'site_pc_in_public'; // PC用サイトの公開状況 |
@@ -475,6 +480,9 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
475 | 480 | $menuTag = ''; |
476 | 481 | $isOpen = $this->gSystem->siteInPublic(); |
477 | 482 | |
483 | + // メニュー定義の編集画面のタイプを取得 | |
484 | + $this->isHierMenu = $this->getMenuIsHider(); // メニュー定義編集画面が多階層タイプであるかどうか | |
485 | + | |
478 | 486 | // アクセスポイントごとの公開状況 |
479 | 487 | $sitePcInPublic = $this->gSystem->sitePcInPublic(); // PC用サイトの公開状況 |
480 | 488 | $siteSmartphoneInPublic = $this->gSystem->siteSmartphoneInPublic(); // スマートフォン用サイトの公開状況 |
@@ -497,6 +505,8 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
497 | 505 | $iconTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::SITE_ICON_SIZE . '" height="' . self::SITE_ICON_SIZE . '" border="0" alt="' . $iconTitle . '" /><b class="caret"></b></a>' . M3_NL; |
498 | 506 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '<ul class="dropdown-menu">' . M3_NL; |
499 | 507 | $iconTag .= $this->createContentMenu(0, $isVisibleSite); // コンテンツ編集メニュー付加 |
508 | + $iconTag .= $this->createMenuDefMenu(0, $isVisibleSite); // メニュー定義編集メニュー付加 | |
509 | + $iconTag .= $this->createAccessPointControlMenu(0, $isVisibleSite); // アクセスポイント公開制御メニュー付加 | |
500 | 510 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '</ul>'. M3_NL; |
501 | 511 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '</li>' . M3_NL; |
502 | 512 | $menuTag .= $iconTag; |
@@ -519,6 +529,8 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
519 | 529 | $iconTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::SITE_ICON_SIZE . '" height="' . self::SITE_ICON_SIZE . '" border="0" alt="' . $iconTitle . '" /><b class="caret"></b></a>' . M3_NL; |
520 | 530 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '<ul class="dropdown-menu">' . M3_NL; |
521 | 531 | $iconTag .= $this->createContentMenu(2, $isVisibleSite);// コンテンツ編集メニュー付加 |
532 | + $iconTag .= $this->createMenuDefMenu(2, $isVisibleSite); // メニュー定義編集メニュー付加 | |
533 | + $iconTag .= $this->createAccessPointControlMenu(2, $isVisibleSite); // アクセスポイント公開制御メニュー付加 | |
522 | 534 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '</ul>'. M3_NL; |
523 | 535 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '</li>' . M3_NL; |
524 | 536 | $menuTag .= $iconTag; |
@@ -541,6 +553,8 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
541 | 553 | $iconTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::SITE_ICON_SIZE . '" height="' . self::SITE_ICON_SIZE . '" border="0" alt="' . $iconTitle . '" /><b class="caret"></b></a>' . M3_NL; |
542 | 554 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '<ul class="dropdown-menu">' . M3_NL; |
543 | 555 | $iconTag .= $this->createContentMenu(1, $isVisibleSite); // コンテンツ編集メニュー付加 |
556 | + $iconTag .= $this->createMenuDefMenu(1, $isVisibleSite); // メニュー定義編集メニュー付加 | |
557 | + $iconTag .= $this->createAccessPointControlMenu(1, $isVisibleSite); // アクセスポイント公開制御メニュー付加 | |
544 | 558 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '</ul>'. M3_NL; |
545 | 559 | $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '</li>' . M3_NL; |
546 | 560 | $menuTag .= $iconTag; |
@@ -757,6 +771,18 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
757 | 771 | $menuTag .= '<li ><a href="#" onclick="m3ShowConfigWindow(\'' . $widgetId . '\', 0, 0);return false;">' . $iconTag . $this->convertToDispString($title) . '</a></li>' . M3_NL; |
758 | 772 | } |
759 | 773 | } |
774 | + return $menuTag; | |
775 | + } | |
776 | + /** | |
777 | + * アクセスポイント公開制御メニュー作成 | |
778 | + * | |
779 | + * @param int $deviceType デバイスタイプ | |
780 | + * @param bool $isVisibleSite アクセスポイント公開中かどうか | |
781 | + * @return string メニュータグ | |
782 | + */ | |
783 | + function createAccessPointControlMenu($deviceType, $isVisibleSite) | |
784 | + { | |
785 | + $menuTag = ''; | |
760 | 786 | |
761 | 787 | // サーバ管理でのシステム運用の場合はアクセスポイントの制御項目を表示しない |
762 | 788 | if ($this->systemType == self::SYSTEM_TYPE_SERVER_ADMIN) return $menuTag; // サーバ管理の場合 |
@@ -778,6 +804,63 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
778 | 804 | $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2); |
779 | 805 | $menuTag .= '<li><a href="#" onclick="siteOpen(' . $deviceType . ',' . intval(!$isVisibleSite) . ');return false;">'; |
780 | 806 | $menuTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" />' . $openSiteMessage . '</a></li>' . M3_NL; |
807 | + | |
808 | + return $menuTag; | |
809 | + } | |
810 | + | |
811 | + /** | |
812 | + * メニュー定義編集メニュー作成 | |
813 | + * | |
814 | + * @param int $deviceType デバイスタイプ | |
815 | + * @param bool $isVisibleSite アクセスポイント公開中かどうか | |
816 | + * @return string メニュータグ | |
817 | + */ | |
818 | + function createMenuDefMenu($deviceType, $isVisibleSite) | |
819 | + { | |
820 | + $menuTag = ''; | |
821 | + | |
822 | + // セパレータ | |
823 | + $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2); | |
824 | + $menuTag .= '<li class="divider hidden-xs"></li>' . M3_NL; | |
825 | + | |
826 | + // タイトル | |
827 | + $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2); | |
828 | + $menuTag .= '<li class="dropdown-header">' . self::MENU_TITLE_MENUDEF . '</li>' . M3_NL; | |
829 | + | |
830 | + // ページID取得 | |
831 | + $pageId = ''; | |
832 | + switch ($deviceType){ | |
833 | + case 0: // PC用画面のとき | |
834 | + default: | |
835 | + $pageId = $this->gEnv->getDefaultPageId(); | |
836 | + break; | |
837 | + case 1: // 携帯用画面のとき | |
838 | + $pageId = $this->gEnv->getDefaultMobilePageId(); | |
839 | + break; | |
840 | + case 2: // スマートフォン用画面のとき | |
841 | + $pageId = $this->gEnv->getDefaultSmartphonePageId(); | |
842 | + break; | |
843 | + } | |
844 | + $ret = $this->db->getMenuId($pageId, $rows); | |
845 | + if ($ret){ | |
846 | + $iconTitle = 'メニュー定義'; | |
847 | + $iconUrl = $this->gEnv->getRootUrl() . self::MENU_ICON_FILE; // メニュー定義画面アイコン | |
848 | + | |
849 | + for ($i = 0; $i < count($rows); $i++){ | |
850 | + $title = $rows[$i]['mn_name']; | |
851 | + $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2); | |
852 | + $menuTag .= '<li><a href="#" onclick="siteOpen(' . $deviceType . ',' . intval(!$isVisibleSite) . ');return false;">'; | |
853 | + $menuTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" />' . $this->convertToDispString($title) . '</a></li>' . M3_NL; | |
854 | + } | |
855 | + } | |
856 | + | |
857 | + // メニュー定義画面のURLを作成 | |
858 | + $taskValue = 'menudef'; | |
859 | + if (empty($isHierMenu)) $taskValue = 'smenudef'; | |
860 | + $menuDefUrl = $this->gEnv->getDefaultAdminUrl() . '?' . 'task=' . $taskValue . '&openby=tabs&menuid=' . $menuId; | |
861 | + $this->tmpl->addVar("_widget", "url", $this->getUrl($menuDefUrl)); | |
862 | + $this->tmpl->addVar("_widget", "menu_id", $menuId); | |
863 | + | |
781 | 864 | return $menuTag; |
782 | 865 | } |
783 | 866 | /** |
@@ -817,5 +900,18 @@ class admin_menu4WidgetContainer extends BaseAdminWidgetContainer | ||
817 | 900 | |
818 | 901 | return array($titleTag, $menuTag); |
819 | 902 | } |
903 | + /** | |
904 | + * メニュー管理画面が多階層メニューかどうかを取得 | |
905 | + * | |
906 | + * @return bool true=多階層、false=単階層 | |
907 | + */ | |
908 | + function getMenuIsHider() | |
909 | + { | |
910 | + $isHier = false; // 多階層メニューかどうか | |
911 | + $ret = $this->db->getNavItemsByTask(self::SEL_MENU_ID, self::TREE_MENU_TASK, $row); | |
912 | + if ($ret) $isHier = true; | |
913 | + | |
914 | + return $isHier; | |
915 | + } | |
820 | 916 | } |
821 | 917 | ?> |
@@ -8,7 +8,7 @@ | ||
8 | 8 | * |
9 | 9 | * @package Magic3 Framework |
10 | 10 | * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp> |
11 | - * @copyright Copyright 2006-2014 Magic3 Project. | |
11 | + * @copyright Copyright 2006-2018 Magic3 Project. | |
12 | 12 | * @license http://www.gnu.org/copyleft/gpl.html GPL License |
13 | 13 | * @version SVN: $Id$ |
14 | 14 | * @link http://www.magic3.org |
@@ -49,7 +49,7 @@ class admin_menuDb extends BaseDb | ||
49 | 49 | $queryStr = 'SELECT * FROM _nav_item '; |
50 | 50 | $queryStr .= 'WHERE ni_nav_id = ? '; |
51 | 51 | $queryStr .= 'AND ni_task_id = ? '; |
52 | - $queryStr .= 'AND ni_visible = true '; | |
52 | +// $queryStr .= 'AND ni_visible = true '; | |
53 | 53 | $retValue = $this->selectRecord($queryStr, array($navId, $taskId), $row); |
54 | 54 | return $retValue; |
55 | 55 | } |
@@ -60,13 +60,13 @@ class admin_menuDb extends BaseDb | ||
60 | 60 | * @param bool $taskId タスク |
61 | 61 | * @return true = 正常、false=異常 |
62 | 62 | */ |
63 | - function updateNavItemMenuType($itemId, $taskId) | |
63 | +/* function updateNavItemMenuType($itemId, $taskId) | |
64 | 64 | { |
65 | 65 | $sql = 'UPDATE _nav_item SET ni_task_id = ? WHERE ni_id = ?'; |
66 | 66 | $params = array($taskId, $itemId); |
67 | 67 | $retValue =$this->execStatement($sql, $params); |
68 | 68 | return $retValue; |
69 | - } | |
69 | + }*/ | |
70 | 70 | /** |
71 | 71 | * 画面配置している主要コンテンツ編集ウィジェットを取得 |
72 | 72 | * |
@@ -165,5 +165,33 @@ class admin_menuDb extends BaseDb | ||
165 | 165 | $retValue = $this->selectRecords($queryStr, array($setId), $rows); |
166 | 166 | return $retValue; |
167 | 167 | } |
168 | + /** | |
169 | + * 画面に表示中のメニューのメニューIDを取得 | |
170 | + * | |
171 | + * @param string $pageId ページID | |
172 | + * @param array $rows レコード | |
173 | + * @param int $setId 定義セットID | |
174 | + * @return bool 1行以上取得 = true, 取得なし= false | |
175 | + */ | |
176 | + function getMenuId($pageId, &$rows, $setId = 0) | |
177 | + { | |
178 | + $queryStr = 'SELECT DISTINCT pd_menu_id, mn_name, mn_sort_order, '; | |
179 | + $queryStr .= 'CASE pd_sub_id '; | |
180 | + $queryStr .= 'WHEN \'\' THEN -1 '; | |
181 | + $queryStr .= 'ELSE pg_priority '; | |
182 | + $queryStr .= 'END AS idx '; | |
183 | + $queryStr .= 'FROM (_page_def LEFT JOIN _widgets ON pd_widget_id = wd_id AND wd_deleted = false) '; | |
184 | + $queryStr .= 'LEFT JOIN _page_id ON pd_sub_id = pg_id AND pg_type = 1 ';// ページサブID | |
185 | + $queryStr .= 'LEFT JOIN _menu_id ON pd_menu_id = mn_id ';// メニューID | |
186 | + $queryStr .= 'WHERE pd_id = ? '; | |
187 | +// $queryStr .= 'AND (pd_sub_id = ? or pd_sub_id = \'\') '; // 空の場合は共通項目 | |
188 | + $queryStr .= 'AND pd_set_id = ? '; | |
189 | + $queryStr .= 'AND pd_menu_id != \'\' '; // メニューIDが設定されている | |
190 | + $queryStr .= 'AND pd_visible = true '; // ウィジェットは表示中 | |
191 | + $queryStr .= 'AND wd_deleted = false '; // ウィジェットは削除されていない | |
192 | + $queryStr .= 'ORDER BY idx, mn_sort_order'; | |
193 | + $retValue = $this->selectRecords($queryStr, array($pageId, $setId), $rows); | |
194 | + return $retValue; | |
195 | + } | |
168 | 196 | } |
169 | 197 | ?> |