php - 无法使用 canvaschart js 使用 php 从 php 数组中获取 x 轴和 y 轴数据或值
问题描述
第二页屏幕截图 无法使用 php 或 zendframework 和 mysql 在 canvaschart js 中显示数组中的 x 轴和 y 轴数据
<?php
namespace Dashboard\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Session\Container;
use Application\Entity\PyPayGroup;
use Application\Entity\PyPayPeriod;
use Zend\Session\SessionManager;
use Application\Entity\CommonCompanyHeader;
use Dashboard\Form\PayrollspendForm;
class PayrollspendController extends AbstractActionController
{
private $entityManager;
private $payrollspendManager;
private $sessionContainer;
private $pyPayPeriodClass;
private $pyPayGroupClass;
private $companyClass;
public function __construct($entityManager,$payrollspendManager)
{
$this->payrollspendManager = $payrollspendManager;
$this->entityManager = $entityManager;
$this->pyPayGroupClass = $this->entityManager->getRepository(PyPayGroup::class);
$this->pyPayPeriodClass = $this->entityManager->getRepository(PyPayPeriod::class);
$this->companyClass = $this->entityManager->getRepository(CommonCompanyHeader::class);
$sessionManager = new SessionManager();
$this->sessionContainer = new Container('ContainerNamespace', $sessionManager);
$arrLabel = ['payroll_calendar','label_payroll_group','emp_id','emp_name','label_total_earnings','label_payroll_period','company','label_process_id','session_id','label_employer_contribution','pay_item'];
}
public function addAction()
{
if ($this->sessionContainer->empId == "") {
return $this->redirect()->toRoute('admin_user_login');
}
if (!in_array('PY', $this->sessionContainer->arrRole)) {
if (!in_array('py_admin', $this->sessionContainer->arrRole)) {
return $this->redirect()->toRoute('dashboard_ess_index');
}
}
$reportForm = new PayrollspendForm();
$payGroup = $this->pyPayGroupClass->findBy([
'ouCode' => $this->sessionContainer->ouCode,
'langCode' => $this->sessionContainer->langCode,
'pgActive' => 1
]);
$reportForm->buildPayGroupData($payGroup);
$company = $this->companyClass->findBy([
'ouCode' => $this->sessionContainer->ouCode,
'langCode' => $this->sessionContainer->langCode
]);
$reportForm->buildCompanyData($company);
$payPeriodData = ['' => 'Select'];
$reportForm->get('payPeriod')->setValueOptions($payPeriodData);
$postData = $this->getRequest()->getPost()->toArray();
$postData['ouCode'] = $this->sessionContainer->ouCode;
$postData['langCode'] = $this->sessionContainer->langCode;
$compData = $this->payrollspendManager->buildCTCCompensationData($postData);
$groupByData = [
'' => 'Select',
'location' => 'Location',
'department' => 'Department',
'cost-center' => 'Cost center'
];
$reportForm->get('groupby')->setValueOptions($groupByData);
return new ViewModel([
'form' => $reportForm,
'ouCode' => $this->sessionContainer->ouCode,
'reportData' => $compData ,
'langCode' => $this->sessionContainer->langCode,
]);
}
This is model
public function getAllCTCCompensationData($postData)
{
$queryBuilder = $this->entityManager->createQueryBuilder();
$queryBuilder->select('ppp.payperiodSdesc , ppesa.grossPay, pptpp.pfEmployerContribution, pptpp.esiEmployerContribution, pplw.employercontribution')
->from(PyProcessEmpStatusApproved::class, 'ppesa')
->leftJoin(PyProcessTdsPfPt::class, 'pptpp', 'with', 'ppesa.ouCode = pptpp.ouCode')
->leftJoin(PyPayGroup::class, 'ppg', 'with', 'pptpp.pgCode = ppg.pgCode')
->leftJoin(PyProcessLabourWelfare::class, 'pplw', 'with', 'ppg.pgCode = pplw.pgCode')
->leftJoin(PyPayPeriod::class,'ppp','with','pplw.payperiodCode = ppp.payperiodCode')
->leftJoin(PyPayrollCalendar::class, 'ppc', 'with', 'ppp.paycalCode = ppc.paycalCode')
->where('ppesa.ouCode = ?1')
->andWhere('ppesa.langCode = ?2')
->setParameter('1', $postData['ouCode'])
->setParameter('2', $postData['langCode'])
->setMaxResults(60);
$compData = $queryBuilder->getQuery()->getResult();
$data = [];
if(!empty($compData))
{
$total = 0;
foreach($compData as $dataC)
{
$statData = $this->getStatuoryData($postData,$dataC['payperiodSdesc']);
if(isset($statData['payperiodSdesc']))
{
$data[$dataC['payperiodSdesc']]['PAYPERIOD'] = $this->payPERIODdata($postData,$dataC['payperiodSdesc']);
}
else
{
$data[$dataC['payperiodSdesc']]['PAYPERIOD'] = $this->payPERIODdata($postData,$dataC['payperiodSdesc']);
}
if(isset($statData['pfEmployerContribution']))
{
$data[$dataC['payperiodSdesc']]['PF'] = $this->getPFData($postData,$dataC['payperiodSdesc']);
}
else
{
$data[$dataC['payperiodSdesc']]['PF'] = $this->getPFData($postData,$dataC['payperiodSdesc']);
}
if(isset($statData['pfPensionFund']))
{
$data[$dataC['payperiodSdesc']]['PFF'] = $this->getPFData($postData,$dataC['payperiodSdesc']);
}
else
{
$data[$dataC['payperiodSdesc']]['PFF'] = $this->getPFData($postData,$dataC['payperiodSdesc']);
}
if(isset($statData['grossPay']))
{
$data[$dataC['payperiodSdesc']]['GROSS'] = $this->getGROSSPAYData($postData,$dataC['payperiodSdesc']);
}
else
{
$data[$dataC['payperiodSdesc']]['GROSS'] = $this->getGROSSPAYData($postData,$dataC['payperiodSdesc']);
}
if(isset($statData['employercontribution']))
{
$data[$dataC['payperiodSdesc']]['LABOURWELFARE'] = $this->getEMPLOYERCONTRIBUTIONData($postData,$dataC['payperiodSdesc']);
}
else
{
$data[$dataC['payperiodSdesc']]['LABOURWELFARE'] = $this->getEMPLOYERCONTRIBUTIONData($postData,$dataC['payperiodSdesc']);
}
if(isset($statData['esiEmployerContribution']))
{
$data[$dataC['payperiodSdesc']]['ESIC'] = $this->getESICData($postData,$dataC['payperiodSdesc']);
}
else
{
$data[$dataC['payperiodSdesc']]['ESIC'] = $this->getESICData($postData,$dataC['payperiodSdesc']);
}
$data[$dataC['payperiodSdesc']]['Total'] = $this->getCTCCompensationSum($postData,
isset($data[$dataC['payperiodSdesc']]['payperiodSdesc']),
isset($data[$dataC['payperiodSdesc']]['pfEmployerContribution']),
isset($data[$dataC['payperiodSdesc']]['pfPensionFund']),
isset($data[$dataC['payperiodSdesc']]['esiEmployerContribution']),
isset($data[$dataC['payperiodSdesc']]['grossPay']),
isset($data[$dataC['payperiodSdesc']]['employercontribution']));
$data = [$data[$dataC['payperiodSdesc']]['Total']];
}
}
return $data;
}
This is view file or canvaschartjs
<script>
window.onload = function () {
var chart1 = new CanvasJS.Chart("chartContainer1", {
animationEnabled: true,
title: {
text: ""
},
axisX: {
labelFontColor: "#000000",
labelFontStyle: "oblique",
},
axisY: {
title: "",
titleFontColor: "#4F81BC",
lineColor: "#4F81BC",
labelFontColor: "#4F81BC",
tickColor: "#4F81BC"
},
axisY2: {
title: "",
titleFontColor: "#C0504E",
lineColor: "#C0504E",
labelFontColor: "#C0504E",
tickColor: "#C0504E"
},
toolTip: {
shared: true
},
legend: {
cursor: "pointer",
itemclick: toggleDataSeries
},
data: [{
type: "column",
name: "Total",
legendText: "Total",
showInLegend: true,
dataPoints: [
<?php
echo '<pre>';
print_r($compData);
die;
if(!empty($compData))
{
?>
<?php
foreach($compData as $key => $value)
{
?>
{label: "<?php echo $key; ?>", y:<?php echo $value[$data[$dataC['payperiodSdesc']]['Total']]; ?>},
<?php } ?>
<?php } ?>
]
},
{
type: "column",
name: "Closed",
legendText: "Closed",
showInLegend: true,
dataPoints: [
<?php
if(!empty($compData))
{
?>
<?php
foreach($compData as $key => $value)
{
?>
{label: "<?php echo $key; ?>", y: <?php echo $value[$data[$dataC['payperiodSdesc']]['Total']]; ?>},
<?php } ?>
<?php } ?>
]
},
{
type: "column",
name: "Lapsed",
legendText: "Lapsed",
showInLegend: true,
dataPoints: [
<?php if(!empty($compData)) { ?>
<?php foreach($compData as $key => $value) { ?>
{label: "<?php echo $key; ?>", y: <?php echo $value[$data[$dataC['payperiodSdesc']]['Total']]; ?>},
<?php } ?>
<?php } ?>
]
}]
});
}
chart1.render();
}
</script>
<script>
window.onload = function () {
var chart1 = new CanvasJS.Chart("chartContainer1", {
animationEnabled: true,
title: {
text: ""
},
axisX: {
labelFontColor: "#000000",
labelFontStyle: "oblique",
},
axisY: {
title: "",
titleFontColor: "#4F81BC",
lineColor: "#4F81BC",
labelFontColor: "#4F81BC",
tickColor: "#4F81BC"
},
axisY2: {
title: "",
titleFontColor: "#C0504E",
lineColor: "#C0504E",
labelFontColor: "#C0504E",
tickColor: "#C0504E"
},
toolTip: {
shared: true
},
legend: {
cursor: "pointer",
itemclick: toggleDataSeries
},
data: [{
type: "column",
name: "Total",
legendText: "Total",
showInLegend: true,
dataPoints: [
<?php
echo '<pre>';
print_r($compData);
die;
if(!empty($compData))
{
?>
<?php
foreach($compData[0] as $key => $value)
{
?>
{label: "<?php echo $key; ?>", y:<?php echo $value[$data[$dataC['payperiodSdesc']]['Total']]; ?>},
<?php } ?>
<?php } ?>
]
},
{
type: "column",
name: "Closed",
legendText: "Closed",
showInLegend: true,
dataPoints: [
<?php
if(!empty($compData))
{
?>
<?php
foreach($compData[1] as $key => $value)
{
?>
{label: "<?php echo $key; ?>", y: <?php echo $value[$data[$dataC['payperiodSdesc']]['Total']]; ?>},
<?php } ?>
<?php } ?>
]
},
{
type: "column",
name: "Lapsed",
legendText: "Lapsed",
showInLegend: true,
dataPoints: [
<?php if(!empty($compData)) { ?>
<?php foreach($compData[2] as $key => $value) { ?>
{label: "<?php echo $key; ?>", y: <?php echo $value[$data[$dataC['payperiodSdesc']]['Total']]; ?>},
<?php } ?>
<?php } ?>
]
}]
});
function toggleDataSeries(e) {
if (typeof (e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
} else {
e.dataSeries.visible = true;
}
}
chart1.render();
}
</script>
我正在尝试在图表中绘制 x 轴月份的条形图和 y 轴上的总支出。在控制器类中,我发送到视图的数据是$compData = $this->payrollspendManager->buildCTCCompensationData($postData);
x 轴将显示月份$data[$dataC['payperiodSdesc']]['PAYPERIOD']
,即 y 轴将显示总支出即$data[$dataC['payperiodSdesc']]['Total']
。您将在模型中找到本月和总支出。这里我使用 zendframework 使用 canvasjs。现在我的数据,即 $compData 从控制器发送到查看文件。这个 compData 有 7 个元素,我想在 y 轴上显示零元素,在 x 轴上显示第六个元素。对于 canvasjs,请参阅使用 php 的https://canvasjs.com网站。如果有人需要更多代码......会帮助你
代码中有什么问题?该图应同时具有 x 轴和 y 轴。我以数组($compData)的形式接收控制器中的数据。我将这个数组发送给查看。然后数组进入 foreach 循环并在 x 轴上显示数组中的零元素和最后一个字段,即 y 轴上的第 6 个元素。我使用画布 js 图表动态显示 x 和 y 轴上的数据。如何使用 canvaschart js 显示图形?如果有人对问题不清楚,可以要求更多清楚,我试图在图表中绘制 x 轴月份的条形图和 y 轴上的总支出。在控制器类中,我发送到视图的数据是 $compData = $ this->payrollspendManager->buildCTCCompensationData($postData); x 轴将显示月份,即 $data[$dataC['payperiodSdesc']]['PAYPERIOD' ] 和 y 轴将显示总支出,即 $data[$dataC['payperiodSdesc']]['Total'] 。您将在模型中找到本月和总支出。这里我使用 zendframework 使用 canvasjs。现在我的数据,即 $compData 从控制器发送到查看文件。这个 compData 有 7 个元素,我想在 y 轴上显示零元素,在 x 轴上显示第六个元素。对于 canvasjs 参考https://canvasjs.com网站使用 php。
我想显示 PAYPERIOD,它是 details 数组中的第一个数组,以及 Details 中的 Total,它是最后一个数组
解决方案
推荐阅读
- .net - How can I show HTML formatted inline query
- javascript - 删除事件侦听器并在调整大小时重置 classList 切换
- google-apps-script - 云平台项目对话框
- java - 如何使用 Spring Boot 从自定义查询中返回包含少量字段的自定义列表?
- c# - 自动映射器中一种类型到另一种类型的泛型类
- php - Firebase 查询 PHP
- python - 为什么装饰器不能与内置函数一起使用?
- python - 如何加快 Keras 和 Tensorflow 中模型的加载速度?
- python - Chainer:自定义 sigmoid 激活函数
- excel - Go - 是否可以加密excel工作簿