見出し画像

業務アプリ メニュー画面にアイコンボタンを追加(webix)No.019

前回のメニューサンプルは、パソコンのような大きな画面では、使えますが、スマホなどの小さい画面では操作性が悪いですよね。対策として、アイコンボタンでメニューを構成してみました。パソコンでは、ボタンを5列まで表示し、スマホでは、2列で表示しています。
以下は、表示例です。
パソコンのとき

スマホのとき

パソコンとPCでレイアウトを変更する操作は、PHP側でデバイスタイプを判断してJavascriptのソース作成時に変更する実装が正式ですが、今回は、ソースを見やすいように、Jacascript側で判断しています。
メニューアイコンは、すべてのメニューを表示するより、事前に選択した(よく使うメニューを選択)メニューを表示する実装の方が、現実的です。
サンプルソースでは、そのあたりの実装を省略しています。
また、アイコンボタンの色指定は、CSS(スタイル)で定義しています。この定義もPHP(サーバ側)でDBを検索後に、情報によって、JavascriptやHTML(スタイル定義)を編集するロジックが必要となります。
サンプルでは、編集後のソースとしてみてください。
webixのいくつかのコンポーネントを組み合わせた画面になっています。いろいろなコンポーネントを組み合わせると、ソースが少し複雑になっていますので、webixのマニュアルを参照にしながらみてください。
以下に変更したメニューのソース(UI)を紹介します。
webix_menu_samle.php

<?php
	//webix_menu_samle.php
	$TITLE_INFO ="webix";
	$VER_INFO ="V01L10";
    define('ROOT_PATH','/home/sunsun/www/webix01'); //ソースを保存しているパス(動作環境に応じて記述する必要あり)
    define('SUB_FOLDER','/webix01');    //サブフォルダを指定したURL
	
	$userid = 'admin';
	$myfilename = basename(__FILE__);	//自分自身のファイル名取得
	$logheader = 'userid='.$userid.', '.$myfilename.':';//ログ出力時のヘッダー情報(自ファイル名,ログインIDを付与)
	if(isset($_POST['userid'])){
		$userid = $_POST['userid'];
	}

	$devicemode = "1";
	if(isset($_POST['devicemode'])){
		$devicemode = $_POST['devicemode'];
	}
	$userdevice = "pc";
	if(isset($_POST['userdevice'])){
		$userdevice = $_POST['userdevice'];
	}
	
	$logheader = 'userid='.$userid.', '.$myfilename.':';//ログ出力時のヘッダー情報(自ファイル名,ログインIDを付与)


?>
<!DOCTYPE html>
<html>
	<head>
	<meta charset="UTF-8">
	<meta http-equiv="Cache-Control" content="no-cache">
    <script src="<?php  echo SUB_FOLDER; ?>/webix_GPL_1020/webix.js"></script>
	<link href="<?php  echo SUB_FOLDER; ?>/webix_GPL_1020/skins/compact.css?<?php echo date('Ymd-H'); ?>" rel="stylesheet" type="text/css">    
	<link href="<?php  echo SUB_FOLDER; ?>/commonlib/webix_custom_css.css?<?php echo date('Ymd-H'); ?>" rel="stylesheet" type="text/css">    
	<link rel="icon" href="<?php  echo SUB_FOLDER; ?>/image/webix_64.ico">
	<script src="<?php  echo SUB_FOLDER; ?>/commonlib/moment-with-locales.js"></script>
	<link rel="stylesheet" href="<?php  echo SUB_FOLDER; ?>/webix_GPL_1020/css/materialdesignicons.min.css" type="text/css" charset="utf-8">
	<title><?php echo $TITLE_INFO.' ('.$VER_INFO.')' ?></title>
<style>
.h_title {
color: #FFFFFF;
}
.pop_style_er .webix_popup_title {
  	font-size: 25px;
    color: red;
}

.pop_style_wr .webix_popup_title {
  	font-size: 25px;
    color: blue;
}

.button_css button.webix_button{
background: #00007C;
border:1px solid #FFFFFF;
color: #FFFFFF;
font-size: 10px;
}
.webix_icon1{
    font-size: 48px;
}


.bt_1 button.webix_button{
background: #4CB050;
border:1px solid #FFFFFF;
color: #000000;
font-size: 10px;
}
.bt_2 button.webix_button{
background: #3F51B5;
border:1px solid #FFFFFF;
color: #000000;
font-size: 10px;
}
.bt_3 button.webix_button{
background: #2196F3;
border:1px solid #FFFFFF;
color: #000000;
font-size: 10px;
}
.bt_4 button.webix_button{
background: #FF9700;
border:1px solid #FFFFFF;
color: #000000;
font-size: 10px;
}
.bt_5 button.webix_button{
background: #00BCD4;
border:1px solid #FFFFFF;
color: #000000;
font-size: 10px;
}
.button_css button.webix_button{
background: #00007C;
border:1px solid #FFFFFF;
color: #FFFFFF;
font-size: 10px;
}
</style>

</head>
<body>
<script type="text/javascript" charset="utf-8">

webix.i18n.setLocale("ja-JP");
var userid = '<?php echo $userid; ?>';
var devicemode = '<?php echo $devicemode; ?>';
var userdevice = '<?php echo $userdevice; ?>';

var menu_data = [
	{id: "100", icon: "mdi mdi-logout", value:"ログアウト",menutyep:"menu",url:"/webix01/sample_login.php"},
	{id: "200", icon: "mdi mdi-view-comfy", value: "マスター管理",menutyep:"group",  data:[
		{ id: "201", icon: "mdi mdi-collage", value: "組織",menutyep:"menu",url:""},
		{ id: "202",icon: "mdi mdi-human", value: "従業員",menutyep:"menu",url:"/webix01/view/ZTEST/webix_sample08.php"}
	]},
	{id: "300", icon: "mdi mdi-table", value:"帳簿",menutyep:"group", data:[
		{id: "301",icon:"mdi mdi-alpha-e-box-outline", value: "電子帳簿",menutyep:"menu",url:"/webix01/view/UD0010/UD0010_upload_lists.php"},
	]},
    {id: "400", icon: "mdi mdi-qrcode", value:"QRコード",menutyep:"menu",url:"/webix01/view/QR0010/QR0012_QRcode_read.php"},
    {id: "500", icon: "mdi mdi-help", value:"HELP",menutyep:"group", data:[
		{id: "501", icon: "mdi mdi-license",value: "webix Lisnce",menutyep:"menu",url:"/webix01/folder/pdf/GPL_LICENSE.pdf"},
	]},
];

function exec_menu(url_info,win_mode,userid){
	if(win_mode == ""){
		webix.send(url_info,{userid:userid}, "GET");
	}
	else{
		webix.send(url_info,{userid:userid}, "GET",win_mode);
	}
}
var my_menu_button_collection = {};
if(userdevice == "smd"){
    my_menu_button_collection ={
    	margin:5, 
    	rows:[
          {height:100, cols: [
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-logout"></span><div class="text">ログアウト</div>',width:100,inputWidth:100,css:"bt_1",
       			click:function(){
       				exec_menu("/webix01/sample_login.php",'',userid);
     			}
     		},
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-human"></span><div class="text">従業員</div>',width:100,inputWidth:100,css:"bt_2",
       			click:function(){
       				exec_menu("/webix01/view/ZTEST/webix_sample08.php",'_blank',userid);
     			}
     		},
          ]
         },
         {height:100, cols: [
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-alpha-e-box-outline"></span><div class="text">電子帳簿</div>',width:100,inputWidth:100,css:"bt_3",
       			click:function(){
       				exec_menu("/webix01/view/UD0010/UD0010_upload_lists.php",'_blank',userid);
     			}
     		},
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-qrcode"></span><div class="text">QRコード</div>',width:100,inputWidth:100,css:"bt_4",
       			click:function(){
       				exec_menu("/webix01/view/QR0010/QR0012_QRcode_read.php",'_blank',userid);
     			}
     		},
          ]
         }
    	]
    };
}
else{
    my_menu_button_collection ={
    	margin:5, 
    	rows:[
          {height:100, cols: [
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-logout"></span><div class="text">ログアウト</div>',width:100,inputWidth:100,css:"bt_1",
       			click:function(){
       				exec_menu("/webix01/sample_login.php",'',userid);
     			}
     		},
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-human"></span><div class="text">従業員</div>',width:100,inputWidth:100,css:"bt_2",
       			click:function(){
       				exec_menu("/webix01/view/ZTEST/webix_sample08.php",'_blank',userid);
     			}
     		},
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-alpha-e-box-outline"></span><div class="text">電子帳簿</div>',width:100,inputWidth:100,css:"bt_3",
       			click:function(){
       				exec_menu("/webix01/view/UD0010/UD0010_upload_lists.php",'_blank',userid);
     			}
     		},
    		{ view:"button", label: '<span class="webix_icon1 mdi mdi-qrcode"></span><div class="text">QRコード</div>',width:100,inputWidth:100,css:"bt_4",
       			click:function(){
       				exec_menu("/webix01/view/QR0010/QR0012_QRcode_read.php",'_blank',userid);
     			}
     		},
          ]
         }
    	]
    };
}


var form_collection1 = [my_menu_button_collection];


if(userdevice == "smd"){
	var menu_tab_width = 200;
	var mymenu_form_width = 340
}
else{
	var menu_tab_width = 680;
	var mymenu_form_width = 680;
}


var mymenu_datas = {
  animate:false,
  cells:[
    {
      id:"Menu1",
  	  view:"form",	//作成されるエレメントの種類
  	  scroll:"auto",	//構成画面のスクロール設定
  	  elements:form_collection1 ,	//フォームの構成要素を指定
  	  width:menu_tab_width,	//フォームの横幅
 	  margin:3,
  	  elementsConfig:{
    	labelPosition:"top",
    	labelWidth:140,
    	bottomPadding:18
  	 }
    }
  ]
};

var menu_tabbar = [{
  	view:"tabbar", type:"bottom", multiview:true,id:"menu_tabbar", options: [
    	{ value: "<span class='webix_icon wxi-user'></span><span style='padding-left: 4px'>マイメニュー</span>", id: 'Menu1' },
  	],height:10
  },
  mymenu_datas
];


var mymenu_form_data = {
  view:"form",	//作成されるエレメントの種類
  id: "form1",	//参照用のID情報
  scroll:"auto",//構成画面のスクロール設定
  elements:menu_tabbar ,	//フォームの構成要素を指定
  width:mymenu_form_width,	//フォームの横幅
  margin:3,
  elementsConfig:{
  	labelPosition:"top",
  	labelWidth:140,
  	bottomPadding:18
  }
};

webix.ready(function(){
  webix.ui({
    rows: [
      { view: "toolbar", padding:3, elements: [
          { view: "icon", icon: "mdi mdi-menu",tooltip:"最小表示", click: function(){
              $$("$sidebar1").toggle();
          }
      },
      { view: "label", label: "メニュー"},
      { view: "button", type: "icon", width: 45,  icon: "mdi mdi-logout",tooltip:"ログアウト",
		click:function(){
			  exec_menu("/webix01/sample_login.php",'',userid);
		 }
	  },
      ]
      },
      { cols:[
        { view: "sidebar",
          data: menu_data,
          on:{
            onAfterSelect: function(id){
              var item = this.getItem(id);
              if(item.url == ""){
                  webix.alert("本メニューは、未実装です。");
                  return;
              }
              if(item.value  == "ログアウト"){
                  webix.send(item.url,{userid:userid}, "GET");	//ログインしたログインIDを付与して開く
                  return
              }
              else{
                  window.open(item.url, '_blank'); 	//新規タブで機能を開く
                  $$("sidebar").unselect(id);
              }
            }
          }
        },
       {padding:5,cols:[
			mymenu_form_data,
            ]
        }
      ]
      },
    ]
  });
  if(userdevice == "smd"){
	webix.ui.fullScreen();
	$$("$sidebar1").toggle();
  }
  
});


</script>
 </body>
 </html>

今回の修正の結果、No.018の記述が変更となりますので、ご了承願います。

動作確認用のサンプルURLは、以下のとおりです。ログイン操作から実施願います。尚、個別メニュー側は閉じるボタン未実装なので、各画面を手動で閉じてください。今後、個別画面も変更します。


この記事が気に入ったらサポートをしてみませんか?