PHP массив в JSON, имеющий параметр с функцией обратного вызова - PullRequest
1 голос
/ 26 апреля 2019

В моем PHP-скрипте у меня есть массив, подобный этому:

$panorama = array(
    "default" => array(
        "firstScene" => 2,
        "author" => 'Felipe'
    ), 
    "scenes" => array(
        "circle" => array(
            "title" => "Title 1", 
            "hotSpots" => array(
                "pitch" => "-2.1",
                "createTooltipFunc" => "hotspot"
            )
        )
    )
);

Этот массив будет передан в функцию Javascript в виде объекта json, например:

pannellum.viewer('panorama', <?php echo json_encode($panorama); ?>);

Параметр createTooltipFunc должен получить функцию обратного вызова с именем hotspot. Итак, в последнем json, когда я передаю этот массив PHP в функцию Javascript, этот параметр должен выглядеть следующим образом: "createTooltipFunc": hotspot без двойных кавычек. Как мне это сделать?

Просто, чтобы дать больше информации, я пытаюсь создать тур с помощью плагина pannellum.js , и я получаю всю информацию о json, которая мне нужна, из моей базы данных mysql.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Храните переменную Javascript, которая сохраняет объект и обновляет свойство перед использованием с pannellum (Предполагается, что hotspot - это переменная).

//  create Javascript object
var obj = <?php echo json_encode($panorama); ?>;

// update createTooltipFunc proeprty with the variable
// where variable name can be extract from $panorama
obj.scenes.circle.hotSpots.createTooltipFunc = <?php echo $panorama['scenes']['circle']['hotSpots']['createTooltipFunc']; ?>;

pannellum.viewer('panorama', obj);
0 голосов
/ 26 апреля 2019

Следуя предложению Pranav, мне пришлось поместить массив PHP в объект javascript и пройти через него, чтобы найти правильный узел, а затем заменить старое значение на новое, что-то вроде этого:

var objTour = <?php echo json_encode($panorama); ?>;
            for (var [key, value] of Object.entries(objTour.scenes)) {
                var objdadosScene = value;
                for (var [key, value] of Object.entries(objdadosScene)) {
                    if(key == 'hotSpots'){
                        var objHotspot = objdadosScene.hotSpots;
                        for (var [key, value] of Object.entries(objHotspot)) {
                            var objDadosHotspot = value;
                            for (var [key, value] of Object.entries(objDadosHotspot)) {                             
                                objDadosHotspot['createTooltipFunc'] = hotspot;
                            }
                        }
                    }
                }
            }

Я не знаю, был ли это лучший способ достичь результата, но он работает.Спасибо!

...