Ошибка: неопределенный строковый литерал - PullRequest
0 голосов
/ 09 июня 2011

У меня есть некоторые данные HTML, сгенерированные из Zend_Form.

Я хочу добавить его к элементу div#wrapper, но моя попытка вызывает ошибку: Unterminated string literal.

Что мне сделать, чтобы это исправить?

ПРИМЕЧАНИЕ: хорошо, все выглядят так, как будто я забыл добавить тег php в мой код, но это не так. Вот мой «настоящий» код

<?php

class Admin_Elements_Dialog {
private $_name;
private $_title;
private $_action;
private $_button = null;
private $_content;
private $_options = array();

public function __construct($options) {
    $this->_options = $options;        
}

public function setName($name) {
    $this->_name = $name;

    return $this;    
}

public function setTitle($title) {
    $this->_title = $title;

    return $this;    
}

public function setAction($action) {
    $this->_action = $action;

    return $this;    
}

public function setOpener($button) {
    if ($button instanceof Admin_Elements_Buttons)
        $this->_button = $button;

    return $this;    
}

public function setContent($content) {
    $this->_content = $content;

    return $this;
}

public function renderScript() {
    $html = array();

    $html[] = '$(document).ready(function() {
                    $("body").append(\'<div id="' . $this->_name . '" title="' . $this->_title . '" class="ui-helper-hidden">' . $this->_content . '</div>\');

                    var dialog = $("#' . $this->_name . '").dialog(' . Zend_Json::encode($this->_options, false, array('enableJsonExprFinder' => true)) . '); 

                    $("#' . $this->_button->getId() . '").click(function() {
                        $("#' . $this->_name . '").dialog("open");

                        return false;
                    });
                });';

    $html[] = '';

    return join($html, PHP_EOL);    
}
}
?>

Ответы [ 6 ]

1 голос
/ 10 июня 2011

Хорошо, я решил свою проблему, удалив все новые строки и разрывы страниц с помощью функции preg_replace

preg_replace('/[\r\n]+/', null, $this->_content)
1 голос
/ 09 июня 2011

Вы смешиваете код PHP и JavaScript. Вы всегда должны помнить, что PHP работает на сервере, а Javascript на клиенте.

Что вы хотите, вероятно, это:

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render(); ?></div>');
});

Очевидно, вам необходимо убедиться, что все разрывы строк и одинарные кавычки в этой строке экранированы (\n и \')

1 голос
/ 09 июня 2011

Вы используете оператор конкатенации PHP . в Javascript.

Оператор объединения Javascript - +:

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog">' + <?php echo $this->form->render() ?> + '</div>');
});

Далее, PHP-код вставлен дословно в вашу страницу. Если $this->form->render() не производит буквально заключенную в кавычки строку, то полученный Javascript будет недействительным.

Вы можете иметь в виду:

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render() ?></div>');
});

Но есть определенно лучшие подходы. Таким образом, вам придется остерегаться экранируемых символов и новых строк.

Кроме того, я не смог устоять: это «спасибо заранее»; без трейлинга "d".

0 голосов
/ 09 июня 2011

По сути, когда ваш PHP-код отображается на сервере, он анализирует все, что находится между <?php ?>.Поэтому, когда ваш код рендерится, он получит что-то вроде

$(document).ready(function() {
    $("div#wrapper").append('<div id="dialog" title="Add new blog">' + <form></form> + '</div>');
});

Обратите внимание, что полученный код JS имеет элемент <form></form>, который не заключен в кавычки.Это приводит к ошибке «неопределенный строковый литерал».

Чтобы исправить это, вам просто нужно заключить эту вещь в кавычки, например

$("div#wrapper").append(
    '<div id="dialog" title="Add new blog">' + '<?php $this->form->render(); ?>' + '</div>'
)

В качестве альтернативы, вы можете поместить PHP в вашСтрока JS:

$("div#wrapper").append(
    '<div id="dialog" title="Add new blog"><?php $this->form->render(); ?></div>'
)
0 голосов
/ 09 июня 2011

PHP анализируется на стороне сервера до запуска Javascript на стороне клиента. Таким образом, PHP будет введен непосредственно в строку Javascript. Затем JQuery добавит его туда, где вы укажете.

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render() ?></div>');
});
0 голосов
/ 09 июня 2011

Вы смешиваете JavaScript и PHP-код.

Я думаю, это может быть лучше, если ваш js генерируется PHP-скриптом:

  <?php /** I'm in PHP */ ?>
  $(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php $this->form->render()?></div>');
   });
...