2013-04-15 2 views
0

Я пытаюсь работать с предварительно созданной библиотекой для настройки телефонов SIP. Они, похоже, использовали JSON для шаблонов, и я на незнакомой территории. Существует много моделей/моделей, а некоторые из них имеют несколько шаблонов. Я хотел бы получить содержимое шаблона и преобразовать его в форму php. Я не уверен, как кодировать имена разных разделов. Я хотел бы написать одну функцию PHP, которая делает все это независимо от используемого файла шаблона. Вот два из шаблонов я работаю с:Интерпретация стороннего JSON-файла в форму PHP

{ 
    "template_data":{ 
    "category":[ 
     { 
     "name":"keys", 
     "subcategory":[ 
      { 
      "name":"Soft Keys (9480i\/6755i\/6757i)", 
      "item":[ 
       { 
       "description":"Soft Keys (9480i\/6755i\/6757i)", 
       "type":"loop", 
       "loop_start":"1", 
       "loop_end":"18", 
       "data":{ 
        "item":[ 
        { 
         "variable":"$softkey_type", 
         "default_value":"empty", 
         "category":"keys", 
         "description":"Soft Key {$count} Type", 
         "type":"list", 
         "data":[ 
         { 
          "text":"Empty", 
          "value":"empty" 
         }, 
         { 
          "text":"Services", 
          "value":"services" 
         }, 
         { 
          "text":"Speed Dial", 
          "value":"speeddial" 
         }, 
         { 
          "text":"Line", 
          "value":"line" 
         }, 
         { 
          "text":"BLF", 
          "value":"blf" 
         }, 
         { 
          "text":"List", 
          "value":"list" 
         }, 
         { 
          "text":"Do Not Disturb", 
          "value":"dnd" 
         }, 
         { 
          "text":"XML URL", 
          "value":"xml" 
         }, 
         { 
          "text":"BLF Transfer", 
          "value":"blfxfer" 
         }, 
         { 
          "text":"Intercom", 
          "value":"icom" 
         }, 
         { 
          "text":"Pickup", 
          "value":"pickup" 
         }, 
         { 
          "text":"Flash", 
          "value":"flash" 
         }, 
         { 
          "text":"Special Prefix Code", 
          "value":"spre" 
         }, 
         { 
          "text":"Park", 
          "value":"park" 
         }, 
         { 
          "text":"Directory", 
          "value":"directory" 
         }, 
         { 
          "text":"Callers", 
          "value":"callers" 
         } 
         ] 
        }, 
        { 
         "variable":"$softkey_label", 
         "default_value":"", 
         "description":"Soft Key {$count} Label", 
         "type":"input" 
        }, 
        { 
         "variable":"$softkey_value", 
         "default_value":"", 
         "description":"Soft Key {$count} Value", 
         "type":"input" 
        }, 
        { 
         "variable":"$softkey_states", 
         "default_value":"Any", 
         "description":"Soft Key {$count} States", 
         "type":"list", 
         "data":[ 
         { 
          "text":"Any", 
          "value":"connected,idle,incoming,outgoing" 
         }, 
         { 
          "text":"Connected", 
          "value":"connected" 
         }, 
         { 
          "text":"Idle", 
          "value":"idle" 
         }, 
         { 
          "text":"Incoming", 
          "value":"incoming" 
         }, 
         { 
          "text":"Outgoing", 
          "value":"outgoing" 
         }, 
         { 
          "text":"Idle or Incoming", 
          "value":"idle,incoming" 
         }, 
         { 
          "text":"Connected or Outgoing", 
          "value":"connected,outgoing" 
         }, 
         { 
          "text":"None (Hide Button)", 
          "value":[ 

          ] 
         } 
         ] 
        }, 
        { 
         "type":"break" 
        } 
        ] 
       } 
       } 
      ] 
      } 
     ] 
     } 
    ] 
    } 
} 

и вот еще:

{ 
    "template_data":{ 
    "category":[ 
     { 
     "name":"keys", 
     "subcategory":[ 
      { 
      "name":"Multi Function Keys", 
      "item":[ 
       { 
       "variable":"$key_mode_01", 
       "default_value":"", 
       "description":"Key 1 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_01", 
       "default_value":"Speed Dial 1", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_01", 
       "default_value":"*01", 
       "description":"Value #1", 
       "type":"input" 
       }, 
       { 
       "type":"break" 
       }, 
       { 
       "variable":"$key_mode_02", 
       "default_value":"", 
       "description":"Key 2 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_02", 
       "default_value":"Speed Dial 2", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_02", 
       "default_value":"*02", 
       "description":"Value #2", 
       "type":"input" 
       }, 
       { 
       "type":"break" 
       }, 
       { 
       "variable":"$key_mode_03", 
       "default_value":"", 
       "description":"Key 3 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_03", 
       "default_value":"Speed Dial 3", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_03", 
       "default_value":"*03", 
       "description":"Value #3", 
       "type":"input" 
       }, 
       { 
       "type":"break" 
       }, 
       { 
       "variable":"$key_mode_04", 
       "default_value":"", 
       "description":"Key 4 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_04", 
       "default_value":"Speed Dial 4", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_04", 
       "default_value":"*04", 
       "description":"Value #4", 
       "type":"input" 
       }, 
       { 
       "type":"break" 
       }, 
       { 
       "variable":"$key_mode_05", 
       "default_value":"", 
       "description":"Key 5 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_05", 
       "default_value":"Speed Dial 5", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_05", 
       "default_value":"*05", 
       "description":"Value #5", 
       "type":"input" 
       }, 
       { 
       "type":"break" 
       }, 
       { 
       "variable":"$key_mode_06", 
       "default_value":"", 
       "description":"Key 6 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_06", 
       "default_value":"Speed Dial 6", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_06", 
       "default_value":"*06", 
       "description":"Value #6", 
       "type":"input" 
       }, 
       { 
       "type":"break" 
       }, 
       { 
       "variable":"$key_mode_07", 
       "default_value":"", 
       "description":"Key 7 Mode", 
       "type":"list", 
       "data":[ 
        { 
        "text":"Speed Dial", 
        "value":"0" 
        }, 
        { 
        "text":"BLF", 
        "value":"1" 
        }, 
        { 
        "text":"Presence Watcher", 
        "value":"2" 
        }, 
        { 
        "text":"Eventlist BLF", 
        "value":"3" 
        } 
       ] 
       }, 
       { 
       "variable":"$key_name_07", 
       "default_value":"Speed Dial 7", 
       "description":"Key Name", 
       "type":"input" 
       }, 
       { 
       "variable":"$speed_dial_07", 
       "default_value":"*07", 
       "description":"Value #7", 
       "type":"input" 
       } 
      ] 
      } 
     ] 
     } 
    ] 
    } 
} 

Похоже, что это было разработано, чтобы сделать именно то, что я хочу, я просто не знаю, как начать. Я могу получить данные из файлов шаблонов, но оттуда пропал. Я пробовал работать с json_decode, но результат не кажется более удобным для работы. Я также попытался использовать php для получения содержимого шаблона, а затем с помощью javascript для его демонтажа. Это своего рода работа, но для каждого файла потребуется больше статических переменных, и если поставщик файлов что-то изменит, может потребоваться больше времени на редактирование. Если кто-нибудь знает про самый простой способ приблизиться к этому, мы будем очень благодарны.

ответ

0

Я бы использовал handlebars.js для отображения информации. Посмотрите здесь:

http://handlebarsjs.com/ 

Я использую его ежедневно, и его так просто, как:

<tr> 
<td>{{clock_number}}</td> 
<td style="width: 150px;">{{employee_name}}</td> 
<td>{{hourly_wage}}</td> 
<td><a href='employee.php?clock_number={{clock_number}}'>Edit</a></td> 
</tr> 

Действительно хороший бесплатный курс, чтобы помочь вам идти:

https://tutsplus.com/course/30-days-to-learn-jquery/ 
+0

Я пытаюсь избежать статически кодирования для каждого возможного имени переменной, если это возможно. В идеальном мире мне нужно будет искать определенные переменные настройки (радио, список, ввод и т. Д.), А затем показывать соответствующий тип ввода формы на основе этого значения, но я не знаю, какие ключи будут из файла в файл. Чтобы сделать вещи более интересными, я не знаю, что ценности будут даже согласованными. – PHPBandJ

+0

Хмм сложно, наверное, все, что я бы предложил, о чем ты уже подумал. – tattooedgeek

Смежные вопросы