Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.05.2015, 15:19
Новичок на форуме
Отправить личное сообщение для tabarigen Посмотреть профиль Найти все сообщения от tabarigen
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2015, 15:24
Новичок на форуме
Отправить личное сообщение для tabarigen Посмотреть профиль Найти все сообщения от tabarigen
 
Регистрация: 16.05.2015
Сообщений: 8

Конкретно нужно
["doxod"]=> float(23287488.7) подставить в "column-1": "78787878"
Ответить с цитированием
  #3 (permalink)  
Старый 17.05.2015, 01:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Судя по докам делать надо так:
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
Ответить с цитированием
  #4 (permalink)  
Старый 17.05.2015, 13:29
Аспирант
Отправить личное сообщение для igormog Посмотреть профиль Найти все сообщения от igormog
 
Регистрация: 08.04.2015
Сообщений: 39

Возьмите массив из JS, потом преобразуйте помощью json_decode, далее работаете как с обычными массивами в PHP, после замены, преобразуете опять в JSON для JS
Ответить с цитированием
  #5 (permalink)  
Старый 19.05.2015, 08:47
Новичок на форуме
Отправить личное сообщение для tabarigen Посмотреть профиль Найти все сообщения от tabarigen
 
Регистрация: 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()???
Ответить с цитированием
  #6 (permalink)  
Старый 19.05.2015, 09:31
Новичок на форуме
Отправить личное сообщение для tabarigen Посмотреть профиль Найти все сообщения от tabarigen
 
Регистрация: 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??
Ответить с цитированием
  #7 (permalink)  
Старый 19.05.2015, 09:59
Новичок на форуме
Отправить личное сообщение для tabarigen Посмотреть профиль Найти все сообщения от tabarigen
 
Регистрация: 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
Ответить с цитированием
  #8 (permalink)  
Старый 19.05.2015, 10:13
Новичок на форуме
Отправить личное сообщение для tabarigen Посмотреть профиль Найти все сообщения от tabarigen
 
Регистрация: 16.05.2015
Сообщений: 8

Упс... Ссори.
Надо было скрипт вынести за тег <?php ?>.

Всем спасибо большое. Теперь осталось решить следующее.
У меня в массив в значение color выводятся предопределенные значения которые я указал. Соответственно и диаграмма выводит три колонки одинакового цвета, что не совсем эстетично. Как я могу в color передавать различные предопределенные значения??
Ответить с цитированием
  #9 (permalink)  
Старый 28.05.2015, 06:51
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от tabarigen
"$key->doxod"
Не надо такого извращения. И еще несколько перверсий было бы неплохо выпрямить.

Еще раз глянул, в общем там бред голимый.

Цвет надо генерить в зависимости от номера колонки. У вас номеров нет, все валится сплошняком в один массив, причем в другой все валится еще раз и каждый раз еще больше к тому что уже было, а потом оно зачем-то вываливается в буфер... галиматья, короче.

Из бредокода вроде ясно что надо отгрузить $result и париться уже в браузере. Там же и цвет нагенерить, какая разница-то, если по нему нет данных в результе.

json_encode() и объекты захавает, не волнуйтесь.

ЗЫ Ну да, а потом просто obj.dataProvider = JSON.parse(this.responseText) или типа того.

Последний раз редактировалось kostyanet, 28.05.2015 в 07:03.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как c функцией .ajax() передать несколько значений в php? Faab jQuery 11 19.11.2013 12:03
Как достать данные из JSON массива? Dimaz jQuery 15 27.11.2012 21:58
Создание многомерного массива из PHP ivandelov Общие вопросы Javascript 6 13.06.2012 21:01
из массива json в (php) переменные Sadist_dead Работа 2 25.08.2011 17:23
из массива json в (php) переменные Sadist_dead AJAX и COMET 6 24.08.2011 22:58