[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу сгенерировать JS
maximka787
Ребят, вопрос лайтовый, но он есть и найти решение не смог.
Нужно, чтобы в html коде был скрипт .js, чтобы он собирался через php.

Идея с <script type="text/javascript" src="1.php"></script> мне почему-то не нравится. Можно ли как-то сделать иначе? Но только так, чтобы код самого файла JS был вынесен в отдельный файл?

вот так
<script type="text/javascript" src="1.js"></script>

Слышал, делают как-то через htacess, но я не нашел примеров. Может у вас есть простое решение?

_____________
..Работает - не трогай!
AllesKlar
а смысл через php?
Если ты хочешь ограничить прямой доступ к js файлу, так ты же его все равно в html вываливаешь, и он оттуда доступен.

Ну, а если у тебя динамически, в зависимости от контента, подключается разный js, то да, как ты и написала, это и выкидывай в html

echo '<script type="text/javascript" src="'. $js_file_path . '"></script>';


_____________
[продано копирайтерам]
sergeiss
Если тебе нужно передать из ПХП в JS какие-то данные, то только их и сформируй внутри скрипта ПХП, в тэгах <script>. И никогда не пытайся сформировать JS полностью средствами ПХП!!!
1. Вместо того, чтобы загрузить JS один раз, браузер его грузит целиком каждый раз (лишний трафик, лишнее время).
2. Очень сильно усложняется отладка. Это очень существенно!

Я, по-моему, упоминал как-то на форуме, что тут как раз после прежнего программиста разгребаю кучи дерьма, попросту авгиевы конюшни smile.gif В том числе, приходится выносить в отдельные скрипты код JS. Который ранее формировался внутри ПХП.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
sergeiss я бы добавил к вашим словам, то вообще не надо генерировать данные для js в тегах <script>, желатель данные получать(с помощью ajax) через специальное api. Ну и в идеале inline-js кода на html странице не должно быть, только подключение файлов. А подклячаемы js-файлы всегда должны быть статичными, то есть не генерироваться динамически.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
sergeiss
Цитата (chee @ 31.10.2014 - 00:21)
я бы добавил к вашим словам, то вообще не надо генерировать данные для js в тегах <script>, желатель данные получать(с помощью ajax) через специальное api. Ну и в идеале inline-js кода на html странице не должно быть, только подключение файлов.

Не соглашусь. Где-то это нормально, а где-то ненормально. Допустим, мне надо передать в JS всего несколько переменных. Общим объемом, например, в 130 байт. И величины этих переменных заведомо известны уже на этапе формирования страницы. Если я их буду передавать аяксом, то это займет какое-то время, плюс будет передано больше данных (например, всякие заголовки, куки и т.д.).

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
maximka787
Не, парни, извиняюсь, наверное не так подал мысль.

Есть один сервис. В нем, каждая функция обработки вынесена в отдельный файл JS. В итоге в html код в head добавляется 28 скриптов JS.
вот так
<script type="text/javascript" src="mail.js"></script>
<script type="text/javascript" src="order.js"></script>
<script type="text/javascript" src="users.js"></script>
Вся система сделана на AJAX. Никаких генерирований массивов или переменных нет. Скрипты статичны. Надо их просто собрать в один файл, чтобы он содержал в себе контент этих 28.

Иными словами было бы круто сделать так:

echo '
<script type="text/javascript">
$(document).ready(function() {
'
;

echo file_get_contents('mail.js');

echo file_get_contents('order.js');

echo file_get_contents('users.js');

echo '
});
</script>
'
;


Этот код можно разместить в html контенте, но мне нужно, чтобы он был отдельным файлом, ибо там около 2000 строк кода.

_____________
..Работает - не трогай!
sergeiss
Цитата (maximka787 @ 31.10.2014 - 12:32)
Есть один сервис. В нем, каждая функция обработки вынесена в отдельный файл JS. В итоге в html код в head добавляется 28 скриптов JS.

А кто мешает собрать это вручную один раз?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
Цитата (sergeiss @ 31.10.2014 - 01:38)
Не соглашусь. Где-то это нормально, а где-то ненормально. Допустим, мне надо передать в JS всего несколько переменных. Общим объемом, например, в 130 байт. И величины этих переменных заведомо известны уже на этапе формирования страницы. Если я их буду передавать аяксом, то это займет какое-то время, плюс будет передано больше данных (например, всякие заголовки, куки и т.д.).

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

maximka787, посмотрите в сторону require.js и AMD архитектуры, ознокомясь с этими инструментами вы научитесь не только правильно организовывать инфраструктуру для работы с js кодом, но и получите информацию о сборщиках(оптимизаторах) js файлов.

Можно еще использовать всякие приблуды типа js сборщиков, вот пример http://habrahabr.ru/post/148274/



_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
maximka787
Цитата (sergeiss @ 31.10.2014 - 09:00)
А кто мешает собрать это вручную один раз?

Эти файлы иногда меняют другие программисты и постоянно собирать неудобно.


Цитата
require.js и AMD архитектуры

Посмотрел. Интересная мысль, но это доп модули. А я ищу самый просой способ.
Вообще так тоже работает
<script type="text/javascript" src="users.php"></script>
Но стоит ли так оставлять?

_____________
..Работает - не трогай!
chee
Цитата (maximka787 @ 31.10.2014 - 16:59)
Эти файлы иногда меняют другие программисты и постоянно собирать неудобно.

если у вас командная разработка с использованием системы контроля версий и вы ничего впринципе не хотите менять, то сделайте следущее:

1. Создайте папку, где будут исходники, например jssource
2. Найдите сборщик, групировщик, оптимизатор который будет работать с файлами из папки jssource и выдавать результат по каким то правилам в определенные файлы.
3. Файлы сгенерированые сборщиками, можно подключить на страницах.
4. Исключите сгенерированые сборщиком файлы из репозитория системы контроля версий, иначе у вас будут при каждом изменении исходников, изменяться сгрупированные файлы.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата (maximka787 @ 31.10.2014 - 16:59)
Вообще так тоже работает
<script type="text/javascript" src="users.php"></script>
Но стоит ли так оставлять?

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

$js = '
<script type="text/javascript">
$(document).ready(function() {
'
;
$js .= file_get_contents('mail.js');

$js .=file_get_contents('order.js');

$js .= file_get_contents('users.js');

$js .= '
});
</script>
'
;
file_put_contents('1.js', $js);

после ее выполнения можно подключать файл js
<script type="text/javascript" src="1.js"></script>


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
sergeiss
Я тут еще добавлю "2 копейки".
Если ты будешь периодически изменять файл JS, то надо еще гарантированно обеспечить, чтобы он сразу же загружался браузером. Для этого к его имени надо добавить хрень типа ГЕТ-параметров:
<script type="text/javascript" src="1.js?20141031"></script>

Этот довесок никак не скажется на работе самого скрипта, но при его изменении файл 1.js будет гарантированно обновлен браузером. Этот довесок может быть, например, датой (как я написал) либо любым абстрактным числом или строкой. Его можно прописать где-нибудь в конфиге, а при формировании страницы в ПХП брать это число из конфига и впечатывать в нужное место. Этот параметр может меняться вручную либо автоматически, когда происходит пересборка файла JS.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
sergeiss, кстати, да, но лучше этот параметр лучше автоматически инкрементировать при каждой сборке js-файлов, в итоге после каждой сборки у клиентов будет обновляться кэш браузера.


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.