Чистые ссылки на сгенерированный PHP JavaScript и CSS - PullRequest
2 голосов
/ 12 июня 2009

Справочная информация: При создании HTML-содержимого с помощью PHP или любой другой вещи можно инкапсулировать ссылки на JavaScript и CSS внутри тегов, фактически не добавляя CSS и JavaScript «в строку» с остальное содержание. Все, что вам нужно сделать, это создать ссылку на файл.

Пример: {script type = "text / javascript" src = "./ js / fooscript.js"} {/ script}

Вопрос: Однако вышеприведенный подход не работает, если вашему PHP требуется динамически генерировать часть или весь код JavaScript. Есть ли способ получить чистую однострочную ссылку, как указано выше, но при этом использовать динамически генерируемый JavaScript?

Очевидно, что один из способов сделать это - заставить PHP автоматически сгенерировать JavaScript и записать его в файл; однако такой подход нежелателен по разным причинам. Мне интересно, есть ли альтернативный способ сделать это, о котором я еще не подумал.

Ответы [ 4 ]

7 голосов
/ 12 июня 2009

По моему опыту, вам редко (и очень редко) вам нужно динамически генерировать весь скрипт. Например, в javascript вам может понадобиться динамически получить часть данных (например, информацию о пользователе или настройки) в javascript, но остальная часть сценария (манипуляции с классами / функциями / DOM) статична для всех пользователей.

Как правило, в этом случае вы просто хотите поместить динамический материал «встроенный», динамически выводить из PHP, а затем включить js (95%, который не нужно динамически генерировать) в качестве внешнего скрипта. Наиболее очевидной причиной этого является кэширование js / css.

Рассмотрите, как reddit.com делает это, посмотрев их исходный код для получения пользовательских данных в javascript.

var reddit = {
    /* is the user logged in */ logged: 'username',
    /* the subreddit's name (for posts) */ post_site: "",
    /* are we in an iframe */ cnameframe: false,
    /* this page's referer" */ referer: "",
    /* the user's voting hash */ modhash: 'lzbcszj9nl521385b7e075e9750ee4339547befc6a47fa01e6',
    /* current domain */ cur_domain: "reddit.com", ...
}

Остальные их js находятся во внешних файлах.

7 голосов
/ 12 июня 2009

Поместите файл .htaccess в папку /js/ и добавьте расширение .js в PHP, например:

AddHandler application/x-httpd-php .js

Другими словами, PHP должен анализировать все .js файлы как файлы PHP. Таким образом, ваши сценарии действительно будут PHP-файлами на стороне сервера, которые выводят JavaScript. Сделайте то же самое для таблиц стилей, очевидно, используйте только расширение .css.

Примечание: Я никогда не пробовал делать это в отдельном .htaccess файле. Если это не работает, просто включите его в глобальную конфигурацию Apache.

1 голос
/ 12 июня 2009

Вы можете просто использовать mod_rewrite, чтобы определенные php-файлы отображались как CSS / JS

например. /css/screen-style.css указывает на css.php? friendly_id = стиль экрана

1 голос
/ 12 июня 2009

Вы можете использовать .php файлы в вызовах JavaScript и CSS. Это не красиво, и любой, кто смотрит на ваш источник, знает, что это скрипт, но он экономит на настройке сервера. Кроме того, если вы создаете динамический JavaScript, я бы предложил добавить метку времени в конце, чтобы браузер не кэшировал ее.

Пример.

<script src="myjavascript.php?a=20090611-021213"></script>
...