16.05.2015, 15:19
|
Новичок на форуме
|
|
Регистрация: 16.05.2015
Сообщений: 8
|
|
Подмена значений в JSON массиве из PHP-массива.
Ребят чувствую только тут мне смогут помочь.
Предыстория тут.
А если кратко, тянем данные из 1с, и визуализируем с помощью amcharts.com.
Данные вытянул, теперь осталось их подсунуть в отчет.
Есть массив на PHP со значениями которые я хочу передать в отчет.
object(stdClass)#52 (1) { ["return"]=> object(stdClass)#62 (1) { ["strokaOtcheta"]=> array(4) { [0]=> object(stdClass)#88 (3) { ["doxod"]=> float(28184501.42) ["razxod"]=> float(26703754.53) ["podrazdelenie"]=> string(22) "Первое значение" } [1]=> object(stdClass)#89 (3) { ["doxod"]=> float(0) ["razxod"]=> float(6331.71) ["podrazdelenie"]=> string(10) "Второе значение" } [2]=> object(stdClass)#90 (3) { ["doxod"]=> float(28633237.75) ["razxod"]=> float(27051062.18) ["podrazdelenie"]=> string(22) "Третье значение" } [3]=> object(stdClass)#91 (3) { ["doxod"]=> float(23287488.7) ["razxod"]=> float(21948158.41) ["podrazdelenie"]=> string(16) "Четвертое значение" } } } } // Подключаем js-скрипты для отчетов
И есть сам отчет который оформлен в js.
<!-- amCharts javascript code -->
<script type="text/javascript">
AmCharts.makeChart("chartdiv",
{
"type": "serial",
"path": "http://www.amcharts.com/lib/3/",
"categoryField": "category",
"maxSelectedTime": -2,
"startDuration": 1,
"decimalSeparator": ",",
"categoryAxis": {
"gridPosition": "start",
"position": "top",
"title": "Аналитический отчет",
"titleColor": "#000000",
"titleFontSize": 15
},
"trendLines": [],
"graphs": [
{
"colorField": "color",
"fillAlphas": 1,
"id": "AmGraph-1",
"lineColorField": "color",
"title": "graph 1",
"type": "column",
"valueField": "column-1"
}
],
"guides": [],
"valueAxes": [
{
"id": "ValueAxis-1",
"maximum": 30000000,
"minimum": 1,
"axisThickness": 0,
"color": "#4B0082",
"fontSize": 13,
"gridThickness": 0,
"labelRotation": -3.6,
"minHorizontalGap": 73,
"showFirstLabel": false,
"showLastLabel": false,
"tickLength": 3,
"title": "Руб. ",
"titleBold": false,
"titleFontSize": 1
}
],
"allLabels": [],
"balloon": {},
"titles": [],
"dataProvider": [
{
"category": "Первое значение",
"column-1": "78787878",
"color": "#DCD36A"
},
{
"category": "Второе значение",
"column-1": "78787878",
"color": "#EE204D"
},
{
"category": "Третье значение",
"color": "#77DD77",
"column-1": "78787878"
}
]
}
);
</script>
Так как вся соль в автоматическом обновлении данных в отчете.
Как бысделать так чтоб в скрипт отчета подставлялись данные из PHP массива с необходимыми значениями.
Правильно ли я понимаю, что нужно исходные данные в JSON преобразовать?
Последний раз редактировалось tabarigen, 16.05.2015 в 15:23.
|
|
16.05.2015, 15:24
|
Новичок на форуме
|
|
Регистрация: 16.05.2015
Сообщений: 8
|
|
Конкретно нужно
["doxod"]=> float(23287488.7) подставить в "column-1": "78787878"
|
|
17.05.2015, 01:52
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Судя по докам делать надо так:
var data = [
{
"category": "Первое значение",
"column-1": "78787878",
"color": "#DCD36A"
},
{
"category": "Второе значение",
"column-1": "78787878",
"color": "#EE204D"
},
{
"category": "Третье значение",
"color": "#77DD77",
"column-1": "78787878"
}
];
var chart = AmCharts.makeChart("chartdiv",
{
"type": "serial",
"path": "http://www.amcharts.com/lib/3/",
"categoryField": "category",
"maxSelectedTime": -2,
"startDuration": 1,
"decimalSeparator": ",",
"categoryAxis": {
"gridPosition": "start",
"position": "top",
"title": "Аналитический отчет",
"titleColor": "#000000",
"titleFontSize": 15
},
"trendLines": [],
"graphs": [
{
"colorField": "color",
"fillAlphas": 1,
"id": "AmGraph-1",
"lineColorField": "color",
"title": "graph 1",
"type": "column",
"valueField": "column-1"
}
],
"guides": [],
"valueAxes": [
{
"id": "ValueAxis-1",
"maximum": 30000000,
"minimum": 1,
"axisThickness": 0,
"color": "#4B0082",
"fontSize": 13,
"gridThickness": 0,
"labelRotation": -3.6,
"minHorizontalGap": 73,
"showFirstLabel": false,
"showLastLabel": false,
"tickLength": 3,
"title": "Руб. ",
"titleBold": false,
"titleFontSize": 1
}
],
"allLabels": [],
"balloon": {},
"titles": [],
"dataProvider": data
}
);
//после получения новых жанных из php делать следующее:
data[0]['column-1'] = новые_цифры;
chart.validateData();
__________________
29375, 35
|
|
17.05.2015, 13:29
|
Аспирант
|
|
Регистрация: 08.04.2015
Сообщений: 39
|
|
Возьмите массив из JS, потом преобразуйте помощью json_decode, далее работаете как с обычными массивами в PHP, после замены, преобразуете опять в JSON для JS
|
|
19.05.2015, 08:47
|
Новичок на форуме
|
|
Регистрация: 16.05.2015
Сообщений: 8
|
|
Сообщение от Aetae
|
Судя по докам делать надо так:
var data = [
{
"category": "Первое значение",
"column-1": "78787878",
"color": "#DCD36A"
},
{
"category": "Второе значение",
"column-1": "78787878",
"color": "#EE204D"
},
{
"category": "Третье значение",
"color": "#77DD77",
"column-1": "78787878"
}
];
|
Чтоб такой массив получить понадобится JSON_ENCODE()???
|
|
19.05.2015, 09:31
|
Новичок на форуме
|
|
Регистрация: 16.05.2015
Сообщений: 8
|
|
Массив значений я получаю,
$result = $client->PoschitatDoxod($params)->return->strokaOtcheta;
foreach ( $result as $key)
$json_data[] = array("column-1"=>"$key->doxod","color"=>"#DCD36A","category"=>"$key->podrazdelenie");
$table_json['data'] = $json_data;
//echo json_encode($table_json, JSON_UNESCAPED_UNICODE);
Как теперь сделать так чтоб он был доступен в var data??
|
|
19.05.2015, 09:59
|
Новичок на форуме
|
|
Регистрация: 16.05.2015
Сообщений: 8
|
|
Пробую так, но выскакивает ошибка
$result = $client->PoschitatDoxod($params)->return->strokaOtcheta;
foreach ( $result as $key)
$json_data[] = array("column-1"=>"$key->doxod","color"=>"#DCD36A","category"=>"$key->podrazdelenie");
$table_json['data'] = $json_data;
echo json_encode($json_data, JSON_UNESCAPED_UNICODE);
<script language="javascript">
var data=<?php echo json_encode($json_data, JSON_UNESCAPED_UNICODE); ?>;
</script>
?>
Цитата:
|
Parse error: syntax error, unexpected '<' in C:\xampp\htdocs\charts\wsclient.php on line 24
|
|
|
19.05.2015, 10:13
|
Новичок на форуме
|
|
Регистрация: 16.05.2015
Сообщений: 8
|
|
Упс... Ссори.
Надо было скрипт вынести за тег <?php ?>.
Всем спасибо большое. Теперь осталось решить следующее.
У меня в массив в значение color выводятся предопределенные значения которые я указал. Соответственно и диаграмма выводит три колонки одинакового цвета, что не совсем эстетично. Как я могу в color передавать различные предопределенные значения??
|
|
28.05.2015, 06:51
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от tabarigen
|
"$key->doxod"
|
Не надо такого извращения. И еще несколько перверсий было бы неплохо выпрямить.
Еще раз глянул, в общем там бред голимый.
Цвет надо генерить в зависимости от номера колонки. У вас номеров нет, все валится сплошняком в один массив, причем в другой все валится еще раз и каждый раз еще больше к тому что уже было, а потом оно зачем-то вываливается в буфер... галиматья, короче.
Из бредокода вроде ясно что надо отгрузить $result и париться уже в браузере. Там же и цвет нагенерить, какая разница-то, если по нему нет данных в результе.
json_encode() и объекты захавает, не волнуйтесь.
ЗЫ Ну да, а потом просто obj.dataProvider = JSON.parse(this.responseText) или типа того.
Последний раз редактировалось kostyanet, 28.05.2015 в 07:03.
|
|
|
|