Форум русской поддержки Joomla!® CMS
08.12.2016, 12:00:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

создание модуля. как передать в подключаемый JS файл php переменную

 (Прочитано 377 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Iamopk
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« : 17.02.2016, 00:15:21 »

Всем доброго времени суток.
Пишу небольшой модуль и столкнулся с проблемой как передать php переменную из объекта $params в подгружаемый JS файл(jFactory::getDocument()->addScript) чтобы потом в этом JS файле продолжить нужные мне манипуляции..
Заранее всем низкий поклон!
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #1 : 17.02.2016, 00:22:09 »

Код
$var = $params->get('param');
$doc = JFactory::getDocument();
$doc->addScriptDeclaration("var myModuleVar = '$var'; ");
$doc->addScript("/script.js");
 
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #2 : 17.02.2016, 00:37:23 »

_script вроде как после _scripts формируется. Возможно, скрипт не увидит эту переменную, т.к. она будет после него. Не уверен, посмотреть надо…

Можете формировать весь текст скрипта в php, потом добавлять его через addScriptDeclaration. Но так инлайн-скрипт будет. Если сайт не оптимизировали от них, то без разницы, одним меньше/больше.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #3 : 17.02.2016, 00:39:36 »

_script вроде как после _scripts формируется

Ну так для этого есть DOMContentLoaded:

Код
JQuery(document).ready(function() {
   console.log(myModuleVar);
});
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #4 : 17.02.2016, 00:43:48 »

а мне больше нравится передача через data-*
тем более что сейчас модно стало инлайн блокировать через Content Security Policy...
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #5 : 17.02.2016, 00:46:09 »

Цитировать
а мне больше нравится передача через data-*
Ежели это простая переменная - да. А если длиннющий объект с вложенными массивами?

Цитировать
тем более что сейчас модно стало инлайн блокировать через Content Security Policy...
Ни разу не встречал. По-моему, это глупо.
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #6 : 17.02.2016, 00:52:10 »

А если длиннющий объект с вложенными массивами?
имхо из $params обычно не бывает длиннющего объекта с вложенными массивами, которые надо передать в javascript Azn

По-моему, это глупо.
это не глупо. это здоровье сайта
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #7 : 17.02.2016, 00:57:07 »

Цитировать
имхо из $params обычно не бывает длиннющего объекта с вложенными массивами, которые надо передать в javascript Azn
Смотря что за расширение.

Цитировать
это не глупо. это здоровье сайта
Какой смысл блокировать собственные скрипты? Настройте эту политику так, чтобы она не занималась всякой дребеденью!
Записан
Iamopk
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #8 : 17.02.2016, 01:00:52 »

Всем большое спасибо!
а мне больше нравится передача через data-*
тем более что сейчас модно стало инлайн блокировать через Content Security Policy...
А как это через data-* ? Хотелось бы знать все возможные варианты!
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #9 : 17.02.2016, 01:04:44 »

Какой смысл блокировать собственные скрипты? Настройте эту политику так, чтобы она не занималась всякой дребеденью!
Кто сказал, что собственные блокирует? Их либо не создают, избавляясь от инлайн-скриптов, либо nonce генерируют. Можно еще все инлайн разрешить, но тогда смысла в CSP мало. Сами сказали, что не сталкивались, но сразу в спор...

Цитировать
а мне больше нравится передача через data-*
в данном случае, исходя из первичной информации, оптимально
В глобальную область видимости переменные пихать не хорошо.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #10 : 17.02.2016, 01:07:15 »

В споре рождается истина. Я писал, что не сталкивался с тем, что кто-то блокирует собственные скрипты. Пихать переменные, как вы выразились, в глобальную область видимости - это классический способ, который никогда не подведёт. Сделайте глобальный объект и наполняйте его чем хотите.
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #11 : 17.02.2016, 01:08:18 »

Какой смысл блокировать собственные скрипты?
блокируются скрипты, которые встроены (вирусами, рекламой и т.д.) на страницу в браузере конечного пользователя. ради этого и включают в Content Security Policy блокировку инлайн. но конечно это тянет за собой и переделку собственных скриптов, ибо Content Security Policy абсолютно все равно, кто инлайн добавил, и легальный он или нет Azn
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #12 : 17.02.2016, 01:12:20 »

А как это через data-* ? Хотелось бы знать все возможные варианты!
http://htmlbook.ru/blog/atribut-data
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #13 : 17.02.2016, 01:13:57 »

Ну хорошо, а конкретную реализацию можете написать, Дмитрий?
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #14 : 17.02.2016, 01:19:55 »

так по ссылке вроде есть
Показать текстовый блок

или что имелось в виду под реализацией?
Записан
Iamopk
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #15 : 17.02.2016, 01:23:19 »

Спасибо за ответ!
Догнал))
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #16 : 17.02.2016, 01:29:02 »

Пихать переменные, как вы выразились, в глобальную область видимости - это классический способ, который никогда не подведёт.
Это ***код. Именно потому, что он подведет.
Не хотел так сразу писать, вынудили.
Не воспринимайте все так болезненно и лично. Вы правильно заметили, обсуждение способствует личному росту. В том числе и моему.) Я и у вас кое-чему учусь, это нормально.)

upd. А я написал не так. Автозамена работает.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #17 : 17.02.2016, 01:31:39 »

Это ***код. Именно потому, что он подведет.

Спасибо на добром слове, однако вы выдернули мою фразу из контекста, а полный смысл был таков:

Цитировать
Сделайте глобальный объект и наполняйте его чем хотите.
Записан
fsv
Практически профи
*******

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2244


« Ответ #18 : 17.02.2016, 01:41:01 »

однако вы выдернули мою фразу из контекста
Вернулся, перечитал. Вы правы, извиняюсь. Пропустил сразу мимо "ушей". Сам так делаю: 1 "свой" объект, и играюсь с ним как хочу. Это при условии, что нельзя ограничить область видимости немедленно вызываемой функцией. Такое редко бывает. Так что даже и 1 объект в глобальную стараюсь не "пихать".
Просто вы не первый раз очень постепенно приходите к "идеалу", подавая это так, как будто сразу именно это и написали. А я мыслями все как-то на первоначальных вариантах. Постараюсь быть внимательнее.)
« Последнее редактирование: 17.02.2016, 01:51:53 от fsv » Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #19 : 17.02.2016, 01:51:38 »

Кстати, по поводу микрошаблонизации, я лично предпочитаю работать с text/template, хотя этот способ также устарел, как и data-* шаблонизация. Сегодня уже придумали массу других библиотек.
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #20 : 17.02.2016, 02:03:46 »

это в смысле
Код:
<script type="text/html">
?
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #21 : 17.02.2016, 02:08:25 »

Код
<script type="text/template-javascript">
   var str = "Hello World!";
</script>
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Online Online

Сообщений: 7774



« Ответ #22 : 17.02.2016, 02:17:27 »

а, ну да, смысл тот же. игнорируемый javascript
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet