2017-12-12 21 views
0

私はwordpressのようにツリー構造のメニューを作成しています。私はそれをwordpressのようにすることができます。私のUIは、単に次のようになります。動的に追加されたサブアレイを更新する

enter image description here

ここでは、ユーザーは、彼らが必要とするどのように多くのこれまでのサブメニューの追加することができます。以下 JSONコードの形式:1つのサブメニューを取得し、更新する

[ 
    { 
     "layout":0, 
     "layouttype":1, 
     "deleted":0, 
     "new":0, 
     "deleter":0, 
     "slug":"Home", 
     "name":"Home", 
     "id":"12122017033717-1" 
    }, 
    { 
     "layout":0, 
     "layouttype":4, 
     "deleted":0, 
     "new":0, 
     "deleter":0, 
     "slug":"About", 
     "name":"About", 
     "id":"12122017033717-2" 
    }, 
    { 
     "layout":0, 
     "layouttype":1, 
     "deleted":0, 
     "new":0, 
     "deleter":0, 
     "slug":"Services", 
     "name":"Servicessss", 
     "id":"12122017033717-3", 
     "children":[ 
     { 
      "layout":0, 
      "layouttype":6, 
      "deleted":0, 
      "new":0, 
      "deleter":1, 
      "slug":"Services-1", 
      "name":"Services 1", 
      "id":"12122017033717-4" 
     }, 
     { 
      "layout":0, 
      "layouttype":1, 
      "deleted":0, 
      "new":0, 
      "deleter":1, 
      "slug":"ss", 
      "name":"ss", 
      "id":"12122017033920-1", 
      "children":[ 
       { 
        "layout":0, 
        "layouttype":1, 
        "deleted":0, 
        "new":0, 
        "deleter":1, 
        "slug":"fddzfsdz", 
        "name":"fddzfsdz", 
        "id":"12122017040829-1" 
       }, 
       { 
        "layout":0, 
        "layouttype":3, 
        "deleted":0, 
        "new":0, 
        "deleter":1, 
        "slug":"fddzfsdzfcg", 
        "name":"Sarath", 
        "id":"12122017040829-2" 
       }, 
       { 
        "layout":0, 
        "layouttype":1, 
        "deleted":0, 
        "new":0, 
        "deleter":1, 
        "slug":"asassssss", 
        "name":"asassssss", 
        "id":"12122017041219-1" 
       } 
      ] 
     } 
     ] 
    } 
] 

そして、現在のコードが付属しています。

$arr = json_decode($arr); 
foreach($arr as $item) { 
    $menuid = $item - > id; 
    if ($menuid == $id) { 
     $item - > layouttype = $page_layout; 
    } 
    if (property_exists($item, 'children')) { 
     foreach($item - > children as $innerRow) { 
      $submenuid = $innerRow - > id; 
      if ($submenuid == $id) { 
       $innerRow - > layouttype = $page_layout; 
      } 
     } 
    } 
} 

データ 'layouttype'を動的に編集する必要があります。私はforeach()を使って試してみましたが、1つまたは2つのサブメニューのサブメニューでうまくいきましたが、ユーザがサブメニューのサブメニューを追加すると、そのコードには対応できません。

誰かが私にこのforeachループがサブメニューのサブの数に基づいて動作するように修正することができる最良の方法を教えてもらえますか?

+0

すべてのメニューデータを取得する代わりに、最初のメニューデータを取得するだけです。その後、子メニューデータを取得するためにajaxを使用します。それはあなたのコードを保存します。アプリケーションの読み込み速度が速くなりました... – GYaN

+0

@GyandeepSharmaこんにちは、ありがとうございます。私はあなたの意見に追いつくことができませんでした。 –

+1

Sarath Hari、Gyandeep Sharmaはおそらく、バックエンド処理の代わりにクライアントサイドのJavaScriptを使用することを提案したいと考えています。私はこれに同意します。これは時間がかからず、レンダリングが高速で、サーバーの負荷が少ないためです。 –

答えて

0

無限/無限のネスティングが必要な場合は、反復関数を使用する必要があります。

など。

function recurrentMenuProcess(branch) { 
    foreach (item in branch) { 
     //processing here 
     if (item.hasChildren) { 
      recurrentMenuProcess(item); 
     } 
    } 
} 
recurrentMenuProcess(json); 
+0

こんにちは、もう少し近いようです。ありがとうございました。参考リンクはありますか? –

+0

あなたは参照リンクを意味しますか? =) –

関連する問題