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

  • 22 Ответов
  • 538 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Iamopk

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

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1780
  • 135
Код: php
$var = $params->get('param');
$doc = JFactory::getDocument();
$doc->addScriptDeclaration("var myModuleVar = '$var'; ");
$doc->addScript("/script.js");
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

fsv

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

Можете формировать весь текст скрипта в php, потом добавлять его через addScriptDeclaration. Но так инлайн-скрипт будет. Если сайт не оптимизировали от них, то без разницы, одним меньше/больше.
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1780
  • 135
_script вроде как после _scripts формируется

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

Код: php
JQuery(document).ready(function() {
    console.log(myModuleVar);
});
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
а мне больше нравится передача через data-*
тем более что сейчас модно стало инлайн блокировать через Content Security Policy...
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

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

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

  => мои публикации
    => мои работы
      => спектр моих услуг

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
А если длиннющий объект с вложенными массивами?
имхо из $params обычно не бывает длиннющего объекта с вложенными массивами, которые надо передать в javascript :)

По-моему, это глупо.
это не глупо. это здоровье сайта
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

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

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

  => мои публикации
    => мои работы
      => спектр моих услуг

*

Iamopk

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

*

fsv

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

Цитировать
а мне больше нравится передача через data-*
в данном случае, исходя из первичной информации, оптимально
В глобальную область видимости переменные пихать не хорошо.
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Филипп Сорокин

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

  => мои публикации
    => мои работы
      => спектр моих услуг

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
Какой смысл блокировать собственные скрипты?
блокируются скрипты, которые встроены (вирусами, рекламой и т.д.) на страницу в браузере конечного пользователя. ради этого и включают в Content Security Policy блокировку инлайн. но конечно это тянет за собой и переделку собственных скриптов, ибо Content Security Policy абсолютно все равно, кто инлайн добавил, и легальный он или нет :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
А как это через data-* ? Хотелось бы знать все возможные варианты!
http://htmlbook.ru/blog/atribut-data
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1780
  • 135
http://htmlbook.ru/blog/atribut-data
Ну хорошо, а конкретную реализацию можете написать, Дмитрий?
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
так по ссылке вроде есть
Спойлер
[свернуть]

или что имелось в виду под реализацией?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Iamopk

  • Захожу иногда
  • **
  • 10
  • 0

*

fsv

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

upd. А я написал не так. Автозамена работает.
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1780
  • 135
Это ***код. Именно потому, что он подведет.

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

Цитировать
Сделайте глобальный объект и наполняйте его чем хотите.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

fsv

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

*

Филипп Сорокин

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

  => мои публикации
    => мои работы
      => спектр моих услуг

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
это в смысле
Код
<script type="text/html">
?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1780
  • 135
Код: javascript
<script type="text/template-javascript">
    var str = "Hello World!";
</script>
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

dmitry_stas

  • Профи
  • ********
  • 9657
  • 929
а, ну да, смысл тот же. игнорируемый javascript
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций