javascript - GetOrgChart 中的动态数据源

标签 javascript

我是编程新手,我正在使用 GetOrgChart 处理动态组织层次结构图。我想删除java脚本函数中的硬代码值并将我的mysql查询结果数据传递给javascript函数我通过查询从数据库获取数据并将其转换为json格式以在javascript函数中显示。

这是我的代码:

<?php
        require ('db.php');
        $selectSql = "SELECT 
                emp.id, emp.employee_parent_id, emp.emp_name, 
                emp.email,hd.desg_name   
          FROM
                hr_employees emp 
          LEFT JOIN 
                hr_employees_designations empd ON  emp.id = empd.id 
          LEFT JOIN 
                hr_designations hd ON empd.id = hd.id";

       $result = mysqli_query($conn, $selectSql);
       $arrAssociate = [];
      while ($value = mysqli_fetch_assoc($result))
      {
       $json_array = json_encode($value);
       echo $json_array;
      //echo '<pre>', print_r($value, 1) , '</pre>';
     }

  ?>
  <!DOCTYPE html>
  <html>
   <head>
    <title>OrgChart | Create Your Own Theme 3</title>

    <style type="text/css">
        html, body {
            margin: 0px;
            padding: 0px;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }

        #people {
            width: 100%;
            height: 100%;
        }

        .get-org-chart rect.get-box {
            fill: #ffffff;
            stroke: #D9D9D9;
        }

        .get-org-chart .get-text.get-text-0 {
            fill: #262626;
        }

        .get-org-chart .get-text.get-text-1 {
            fill: #262626;
        }

        .get-org-chart .get-text.get-text-2 {
            fill: #788687;
        }

        .get-green.get-org-chart {
            background-color: #f2f2f2;
        }
        .more-info {
            fill: #18879B;
        }

        .btn path {
            fill: #F8F8F8;
            stroke: #D9D9D9;
        }

        .btn {
            cursor: pointer;
        }

        .btn circle {
            fill: #555555;
        }

        .btn line {                
            stroke-width: 3px;
            stroke: #ffffff;
        }         
   </style>
    </head>
    <body>
        <div id="people"></div>
      <script type="text/javascript">
      getOrgChart.themes.myTheme =
       {
        size: [330, 260],
        toolbarHeight: 46,
        textPoints: [
            { x: 20, y: 45, width: 300 },
            { x: 120, y: 100, width: 200 },
            { x: 120, y: 125, width: 200 }
        ],

        // textPointsNoImage: [] NOT IMPLEMENTED,

        box: '<rect x="0" y="0" height="260" width="330" rx="10" ry="10" 
        class="get-box"></rect>'
            + '
           <g transform="matrix(0.25,0,0,0.25,123,142)"><path 
            d="M48.014,42.889l-9.553-
            4.776C37.56,37.662,37,36.756,37,35.748v-3.381c0.229-0.28,0.47-
            0.599,0.719-0.951  c1.239-1.75,2.232-3.698,2.954-
            5.799C42.084,24.97,43,23.575,43,22v-4c0-0.963-0.36-1.896-1-
            2.625v-5.319  c0.056-0.55,0.276-3.824-2.092-
            6.525C37.854,1.188,34.521,0,30,0s-7.854,1.188-
            9.908,3.53C17.724,6.231,17.944,9.506,18,10.056  v5.319c-
            0.64,0.729-1,1.662-

    };

    var orgChart = new getOrgChart(document.getElementById("people"), {
        theme: "myTheme",
        enableEdit: false,
        enableDetailsView: false,
        primaryFields: ["Title", "Name", "Email", "Image"],
        color: "green",
        updatedEvent: function () {
            init();
        },
        dataSource: [
         // Want Dynamic data here instead of this hard code values
            { id                :                      1, 
              parentId          :                     null, 
              Name              :                      "Jasper Lepardo", 
              Title             :                     "CEO", 
              Email             :                     "jasper@example.com", 
              Image             :                     
           "http://www.getorgchart.com/GetOrgChart/getorgchart-
            demos/images/f-11.jpg" 
            },
            {  id               :                       2, 
               parentId         :                       1, 
               Name             :                      "John Smith", 
               Title            :                      "Front-endDeveloper", 
               Email            :                       "john@example.com", 
               Image    : 
                       "http://www.getorgchart.com/GetOrgChart/getorgchart 
                       demos/images/f-12.jpg" 
           },
            { id                 :                       3,  
              parentId           :                       1, 
              Name               :                       "Avaa Field", 
              Title              :                      "Project Manager", 
              Email              :                       "ava@example.com", 
              Image              :                       

    "http://www.getorgchart.com/GetOrgChart/getorgchart-demos/images/f-
     14.jpg" 
          },
            {  id                :                         4, 
                parentId         :                         1, 
                Name             :                        "Ava Field", 
                Title            :                        "Project Manager", 
                Email            :                        "ava@example.com", 
                Image            :                         
      "http://www.getorgchart.com/GetOrgChart/getorgchart-demos/images/f-
       14.jpg" }]

    });

    function getNodeByClickedBtn(el) {
        while (el.parentNode) {
            el = el.parentNode;
            if (el.getAttribute("data-node-id"))
                return el;
        }
        return null;
    }


    var init = function () {
        var btns = document.getElementsByClassName("btn");
        for (var i = 0; i < btns.length; i++) {

            btns[i].addEventListener("click", function () {
                var nodeElement = getNodeByClickedBtn(this);
                var action = this.getAttribute("data-action");
                var id = nodeElement.getAttribute("data-node-id");
                var node = orgChart.nodes[id];

                switch (action) {
                    case "add":
                        orgChart.insertNode(id);
                        break;
                    case "edit":
                        orgChart.showEditView(id);
                       break;
                    case "preview":
                        orgChart.showDetailsView(id);
                        break;
                }
            });
        }
    }
    init();
   </script>
   </body>
   </html>

最佳答案

看看这个。

使用 Laravel( Blade ):

let json = JSON.parse('@json($your_array_here)');

没有框架(您的情况):

let json = JSON.parse('<?=json_encode($your_array_here)?>');

当你在PHP中有一个Array并且需要在JS中使用它时,你有两种实现方式:

  1. Ajax(获取、axios、xhr2);
  2. 像您一样进行硬编码。

但是请注意您的浏览器控制台(Chrome、Firefox),如果您的 JSON 格式错误,您将会收到警告。

看看 JSON.parse 和 JSON.stringify,理解这些函数也很重要。

并且不要忘记声明开头和结尾的 ',就像我在下面的示例中所做的那样。

希望对您有帮助。
祝你有美好的一天。

关于javascript - GetOrgChart 中的动态数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49273066/

相关文章:

javascript - 反转状态栏cordova的图标颜色

javascript - puppeteer:如何等待 SPA 中的页面?

javascript - 如何在sequelize(SQLite)中编写不区分大小写的顺序查询?

javascript - 如何播放POST响应中的音频?

javascript - 无法使用 Promise 通过 bind() 获取正确的上下文

javascript - AJAX表单提交,仅用于防止页面刷新,仅此而已

javascript - 如何更改 Lodash 函数在 Typescript 中的使用方式?

Javascript - Dojo - 对象对自身的引用

javascript - 检查全局变量是否存在的正确方法是什么?

javascript - jquery 循环在谷歌地图上显示多个标记