Чистые ссылки на PHP-сгенерированный JavaScript и CSS

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

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

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

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

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

 AddHandler application/x-httpd-php .js 

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

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

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

Обычно в этом случае вы просто хотите поместить динамический материал «inline», динамически выводить из 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 находятся во внешних файлах.

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

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

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

Пример.

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