Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > использование Js внутри Php


Автор: Su_ 15.10.2009, 03:26
Доброе утро.

Вопрос, простой, скорее для обозрения взаимодействия js и php/

Как сделать что бы js работал из-под Php?

Сделал так:
Код


<?php


#Test Java Script
echo " \n" ;
$str= "<"."script language= \"JavaScript1.2\"".">" . "\n"."document.write( \" JavaScript in php work \" );". "\n"."<"."/script" .">";
echo "$str";
?>




работает, но это надо весь JS конвертить под hmtl тег, это довольно затруднительно.. Есть ли альтернативные варианты.. и делают ли вообще так?


p.s.


Идея:Динамическое меню,с использованием эффектов
:1) добавление в бд нового пункта меню(через CSM) 
2)php его обрабатывает
3)генерит js скрипт на красивую обработку меню


Автор: FortMax 15.10.2009, 04:14
просто вставляем в код пхп контейнер джаваскрипта, мухи отдельно компот отдельно smile 
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
</head>

<body>
 <?php echo "начало" ?>
 <script type="text/javascript">
 alert("Hello =)");
 </script>
 </br>
  <?php echo "конец" ?>
</body>
</html>

Автор: Su_ 15.10.2009, 04:28
Знакомые люди)

Логично, но если мне нужно сделать чтобы php генерил js скрипт? хотя можно отдельно выполнить все в php, вывести нужные данные, и потом запустить js уже в html коде)

Спасибо) smile 

Автор: SoWa 15.10.2009, 06:14
Мб так?
Код

<?php echo "начало" ?>
 <script type="text/javascript"> 
alert(<?php echo "123" ?>); 
</script> 
</br>  
<?php echo "конец" ?>


Добавлено через 2 минуты и 2 секунды
Ну это не совсем то, что ты хочешь... Это опять же вставка в готовый ЖС кусков ПХП...
Есть какая-то функция для экранирования всех кавычек и вообще для приведения текста к форматированному для ПХП виду, но какая- не помню  smile 

Автор: solenko 15.10.2009, 08:33
Честно говоря, так и не понял в чем проблемма топикстартера. В том, что нуно дописывать тег script и это муторно? Ну так вынесите это в отдельную функцию. 

А вообще-то есть более правльный подход к созданию таких меню -- менюшка выводится в html как обычный список ссылок. Далее js, который обычно лежит вообще в отдельном файле, на событии DOMContentLoaded обрабатывает эту менюшку и навешивает необходимые события. Красотой и сокртыием неактивных пунктов занимается CSS.

Зачем так? Потому что:
1. Поисковик найдет ваше меню в html коде, где ему и положенно быть. Да, говорят, поисковики научились анализировать js, но я бы не надеялся на это
2. Пользователь, у которого отключен js сможет воспользоваться сайтом.(скажете такие пользователи  давно вымерли? А хрен там -- самому иногда с сервака из links приходится серфить)
3. Вы получаете логично разделенные части, которые можно отлаживать отдельно и они могут быть отлажены разными людьми
4. Это повышает возможность повторного использования. 

Автор: skyboy 15.10.2009, 09:10
не смотря на то, что solenko указал на архитектурно правильное решение, для полноты картины видения мира замечу, что js можно формировать и без HTML тегов. вот, например, HTML-страница содержит в себе:
Код

<script type="text/javascript" src="menu.php"></script>

а в menu.php
Код

<?php
header('Content-Type: text/javascript');
echo<<<TXT
 {javascript code}
TXT;
?>

точно так же, как можно указать адрес PHP-скрипта в качестве атрибута src для CSS(<link ... href='css.php') или картинки(<img src="image.php" ...) или другого указания URL. только очень-очень желательно отдавать соответствующие заголовки Content-Type и те, что влияют на кеширование(ETag, Last-Modified, Expires, Cache-Control).
вот только стоит понимать, что статический элемент(выдача происходит непосредственно, без предварительной генерации) сервер отдает намного быстрее, чем происходит запуск PHP, генерация контента и выдача его. Поэтому динамической генерацией того, что может быть отдано статически - увлекаться не стоит. И если уж увлекаешься - предусмотреть сохранение сгенерированных данных в файл. Так, чтоб каждый раз не гонять PHP.
И второе замечание: если мы говорим не о бинарных данных(картинка, файл-документ, архив), а о текстовом содержимом, то лучше разделять данные на изменчивую и неизменную часть. И генерировать только ту часть, что меняется. В случае с javascript это означает написать javascript-функцию и сохранить её в статичном js-файле, а генерировать только вызов этой функции в странице и список аргументов.

Автор: Su_ 15.10.2009, 15:10
спасибо всем , попробую накидать примерчик, с учётом замечаний. Про архитектуру очень полезная информация, может кто посоветует книжечку или статейки хорошие?

Автор: capitan 15.10.2009, 15:22
Что-то я так и не понял о чем идет речь. PHP - исполняется на стороне сервера, JS - на стороне клиента. Отсюда вывод: в JS можно встроить php, а вот в PHP встроить JS нельзя.  Но есть проект http://kevin.vanzonneveld.net/techblog/category/php2js/   там многие PHP функции переписаны на JS. 

Автор: Su_ 15.10.2009, 15:27
хм, почему? как я понял можно, но не нужно. Клиент получает конечный Html код,который интерпретирует броузер..   Первый пост показывает это. или я не прав?. Спасибо за ссылку!)

Автор: bars80080 15.10.2009, 16:01
capitan, говорит, что вы не корректно пользуетесь терминологией

использовать js внутри php или наоборот невозможно, так как они работают в разные моменты времени на разных машинах. один на клиенте, другой на сервере
но вы можете сгенерировать javascript-код на стороне сервера с помощью php

правильное слово - генерировать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)