2

我想在我的 Phalcon 项目的视图文件 ( ) 中将json 编码结果 (of ManagementController.php, statisticAction) 放入 Highchart 语法中。stat.phtml最初,在stat.phtml我使用:

            ...
            ...
            series: [{
                type: 'pie',
                name: 'Browser share',
                data: []
            }]
        } 
       $.getJSON('data/user_type.php', function(json) {
       options.series[0].data = json;
       chart = new Highcharts.Chart(options);
    });
});

data/user_type.php放置在公用文件夹中。

user_type.php

<?php
$con = mysql_connect("localhost","root","");
if (!$con) {
   die('Could not connect: ' . mysql_error());
}
mysql_select_db("mockup_workspace", $con);
$result = mysql_query("SELECT name_type_user, total FROM v_ntype_user where id_admin=1");

$rows = array();
while($r = mysql_fetch_array($result)) {
$row[0] = $r[0];
$row[1] = $r[1];
array_push($rows,$row);
}
print json_encode($rows, JSON_NUMERIC_CHECK);

mysql_close($con);
?>

它在我加载时工作,尽管数据是静态的。但它仍然使用原生 PHP 语法,所以我想在 Managementcontroller 中使用该逻辑。然后我发现在使用 ManagementController (myController/actionController) 时$.getJSON仍然需要 URL json 文件(如)的问题。data/user_type.php那么,如果我想从 Controller 中获取它怎么办?

ManagementController.php

<?php

 namespace workspace_mockup_2\Controllers;
 use workspace_mockup_2\Models\VnTypeUser as nTypeUser;
 use Phalcon\Mvc\Controller;

 class ManagementController extends Controller {
  ...
  public function statisticAction() {
    $id_admin = $this->session->get('auth');

    // User Type
    $typeUser = nTypeUser::find('id_admin="' . $id_admin . '"');    
    $rows = array();
    foreach($typeUser as $t) {
        $row[0] = $t->name_type_user;
        $row[1] = $t->total;
        array_push($rows,$row);
    }
    echo json_encode($rows, JSON_NUMERIC_CHECK);
    $this->view->pick("/frontend/user_management_page/stat");
}

我一直在寻找一种方法,比如把它放在那个控制器中,

...
$printjson = json_encode($rows, JSON_NUMERIC_CHECK);
$this->view->printjs = $printjson;

并将$printjs要替换的变量$.getJSON('data/user_type.php', ...放入stat.phtml,但效果不佳。请帮忙 :(

谢谢..

4

1 回答 1

1

如果您使用的是 ajax 调用,那么您需要通过回显或打印从控制器返回结果。如果没有,那么您需要在视图中设置变量(包含数据)。

示例:控制器 - 在视图中设置变量

namespace workspace_mockup_2\Controllers;
use workspace_mockup_2\Models\VnTypeUser as nTypeUser;
use Phalcon\Mvc\Controller;

class ManagementController extends Controller
{

    public function statisticsAction()
    {
        // User Type
        $typeUser = nTypeUser::find('id_admin="' . $id_admin . '"');
        $rows = array();
        while ($r = mysql_fetch_array($typeUser)) {
            $row[0] = $r[0];
            $row[1] = $r[1];
            array_push($rows,$row);
        } 
        $this->view->pick("/frontend/user_management_page/stat");
        $this->view->setVar('data', json_encode($rows, JSON_NUMERIC_CHECK));
    }
}

看法

options.series[0].data = <?php echo data; ?>;
chart = new Highcharts.Chart(options);

控制器 - 以 AJAX 形式返回数据

namespace workspace_mockup_2\Controllers;
use workspace_mockup_2\Models\VnTypeUser as nTypeUser;
use Phalcon\Mvc\Controller;

class ManagementController extends Controller
{
    public function statisticsaction()
    {
        $this->view->setRenderLevel(PhView::LEVEL_ACTION_VIEW);
        $this->response->setContentType('text/json');

        // User Type
        $typeUser = nTypeUser::find('id_admin="' . $id_admin . '"');
        $rows = array();
        while ($r = mysql_fetch_array($typeUser)) {
            $row[0] = $r[0];
            $row[1] = $r[1];
            array_push($rows,$row);
        } 
        // This will return raw JSON suitable for AJAX calls
        echo json_encode($rows, JSON_NUMERIC_CHECK));
    }

}

看法

            ...
            ...
            series: [{
                type: 'pie',
                name: 'Browser share',
                data: []
            }]
        } 
       $.getJSON('management/statistics', function(json) {
       options.series[0].data = json;
       chart = new Highcharts.Chart(options);
    });
});

注意:请删除所有对 mysql_* 命令的引用,并将它们替换为 PDO 或 mysqli 甚至 Phalcon 的模型。mysql_* 已被弃用

于 2013-08-20T12:14:48.577 回答