Я знаю, что это будет поздний ответ, и я использовал решение @chelmertz, но в настоящее время у меня возникли некоторые проблемы с этим. Я работаю в сложном приложении пользовательского интерфейса, и мне нужно было множество массивов php и других объектов json во внешних файлах javascript. И включение моих js-скриптов не было единообразным, поэтому каждый раз, когда мне нужно что-то от php до javascript, я должен проверять целые вещи вроде ....
1) Я помещаю appendScript () в правильное положение, чтобы скрипт some.js нашел мои переменные, определенные
2) сгенерированная строка, которая будет передана в appendScript (), является допустимым синтаксисом js.
и многое другое ...
Есть еще один способ, который я специально разработал для Zend Framework.
Я написал подробное руководство здесь
http://rupeshpatel.wordpress.com/2012/09/21/add-json-objects-arrays-and-variables-from-php-to-javascript/
Резюме:
1) создать общий файл представления, заключенный в тег, который проверяет свойство (массив), скажем $ this-> jsVars объекта представления, и определяет переменные js
код этого вида файла
<script>
<?php if(!empty($this->jsVars)){ ?>
<?php
foreach($this->jsVars as $var) {
if($var['type'] == 'json'){
?>
var <?php echo $var['name']?> = JSON.parse('<?php echo $var['value'];?>');
<?php } elseif($var['type'] == 'text'){ ?>
var <?php echo $var['name']?> = "<?php echo $var['value'];?>";
<?php }else{?>
var <?php echo $var['name']?> = <?php echo $var['value'];?>;
<?php
}}?>
<?php }?>
</script>
2) визуализируйте это представление в файле макета до echo $this->headScript()
, чтобы все внешние сценарии имели эти переменные js
<?php
echo $this->render('index/include_js_vars.phtml'); // rendering view
$this->headScript()->prependFile(JS_BASE_URL.'/jquery-1.7.2.min.js');
$this->headScript()->appendFile(JS_BASE_URL.'/jquery.blockUI.js');
$this->headScript()->appendFile(JS_BASE_URL.'/commonJS.js');
$this->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js');
echo $this->headScript();
?>
3) добавить массивы php или объекты json в $ this-> view-> jsVars, например
// в вашем методе действия
$test = array('mango','orange','banana');
$this->view->jsVars[] = array('name'=>'test','type'=>'json','value'=>json_encode($test));
теперь test
будет определяться в любом из ваших файлов сценариев как массив, независимо от того, в каком экземпляре вы включили файл js.