w2ui
この記事は最新更新日から、4年以上経過しています。

前回の記事「w2uiサイドツリーをPHPで出力」でツリー表示するアイテム数が17,000個を超えていたため、表示にかなり時間が掛かってしまいました。

ですので今回、表示までの時間を短縮できるように修正していきたいと思います。

初期表示用のPHPを作成する

初期状態では、全ての子要素は閉じられていて見えない状態で表示するようにします。

ですので第一階層のみ表示することと、イベント処理などを返却する初期表示用のPHP「data/side/initside.php」を作成します。

 

今回のソースのポイントは、選択されている行の3か所になります。

 

1.子要素があるか?判別する項目「flg」を追加

サブクエリーを使って取得したレコードのIDに紐付く、子要素が存在するか?を取得しています。

 

2.子要素があれば、ダミー要素を設定する

子要素がデータ上確認できるのであれば、ダミーで項目を追加しておきます。

こうしないとツリーの左にプラス「+」が表示されなくなってしまいますので、設定しておきます。

w2uiで設定するidは、必ずユニーク(重複しない値)にする必要があるため、取得レコードのid先頭に「D」という文字列を付けて設定しています。

 

3.onExpandイベント処理を作成

onExpandイベントでは、子要素が表示されたときに発生するイベントになります。

行っていることとしては、findメソッドで子要素を取得し削除し、テストで項目を追加しています。

※後ほどダミー要素のみ削除する処理に変更します。

 

初期表示用のPHPをJavaスクリプトに設定

「js/script.js」のサイドツリー読み込み部分を、追加したPHPに変更します。

 

ここまで行うと、下の画面のように子要素を表示すると要素が3つ追加され表示されるかと思います。

 

子要素を取得するPHPを作成

子要素が表示されたときに、紐付く子要素を取得するPHP「data/side/getChild.php」を作成します。

親要素のidをGETパラメータで受け取ることを想定しています。(17行~20行)

返却するJsonは、nodeの部分のみとなっています。

 

onExpandイベント処理修正

「data/side/initside.php」のonExpandイベント処理を下記の通りに修正しました。

 

w2uiのfindメソッドを利用すると、指定したID以下の子要素を全て取得してしまいます。

ダミーとして設定している要素は、必ず各親要素以下に1つのみですので、child[0]と指定しています。(5~6行)

6行でtextが設定されていないこと=ダミー要素と判別しています。

ダミー要素が残っている場合は、まだ正しい子要素の読み込みがされていないため、7行で親IDを指定して子要素を取得しています。

8行で、取得した子要素を追加しています。

9行でダミーで追加してあった要素を削除しています。

 

ここまで行うと、下記のような画面表示を行うことができました。

 

まとめ

アイテム数17,000のサイドツリーでしたが、上記の方法でストレス無く読み込みができるようになりました。

他にも方法はあるかと思いますので、もっと良い方法があれば教えてくださいm(_ _)m

 

今回の記事で取り扱ったソース一式は下記からダウンロードできます。

 

 

By にど寝

もともと名古屋でシステムエンジニアをしてましたが、現在は地元に帰省してネットショップの社内システムエンジニアをしてます。  

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)