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

Andrey_by

  • Новичок
  • 8
  • 0 / 0
  • Исчадие добра
Передаю из плагина переменную в шаблон, но шаблон её "видит" только после второй перезагрузки.
Нужно было перенести скрипты из шапки в футер, вот как я это реализовал:

1)Написал плагин /plugins/system/htmlmin/htmlmin.php , где примерно следующее:
Код
public function onBeforeCompileHead()
{
$app = JFactory::getApplication();
if($app instanceof JApplicationSite & $app->isSite())
{
#Тут из $app удаляем нужные скрипты и заносим их в $Array
#Далее передаём $Array в шаблон
JFactory::getApplication()->setUserState(
'htmlmin.onbeforecompilehead.scripts',
$Array
);
}
}

2)В футере шаблона сайта /templates/xxx/index.php подключил php файл:
Код
<?php include 'footer_script.php';?>

3)В файле footer_script.php ловлю переменную из плагина:
Код
$Array = JFactory::getApplication()->getUserStateFromRequest( 'htmlmin.onbeforecompilehead.scripts', '' );

Подскажите где ошибка?
Если нужно скину ссылку на сайт.
Спасибо)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменная из плагина в шаблон
« Ответ #1 : 18.08.2015, 20:34:40 »
Код: php-brief
public function getUserStateFromRequest($key, $request, $default = null, $type = 'none'){}
Посмотрите в /libraries/cms/application/cms.php. getUserStateFromRequest() используется, когда вы еще что-то передаете в $_REQUEST (2-я переменная, которой у вас нет).
В вашем случае используйте getUserState(), ее можно посмотреть в том же файле.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Andrey_by

  • Новичок
  • 8
  • 0 / 0
  • Исчадие добра
Re: Переменная из плагина в шаблон
« Ответ #2 : 18.08.2015, 21:36:23 »
Сделал как Вы сказали, результат тотже, передаётся только после перезагрузки страницы...
Код
$Array= JFactory::getApplication()->getUserState( 'htmlmin.onbeforecompilehead.scripts', '' );
Может переменная в плагине передаётся уже после генерации страницы?
Код
onBeforeCompileHead()
Посмотрите пожалуйста сами, в режиме браузера "инкогнито" http://stock-travel.com/strany/frantsuzskaya-polineziya/romantika-ili-realnost-romanticheskaya-realnost-dlya-dvoikh-vlyublennykh-skazochnyy-ostrov-bora-bora.html
При первой загрузке нет скриптов после </footer>, после перезагрузки появляются... мистика
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменная из плагина в шаблон
« Ответ #3 : 18.08.2015, 21:56:39 »
Приведите полный код плагина.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Andrey_by

  • Новичок
  • 8
  • 0 / 0
  • Исчадие добра
Re: Переменная из плагина в шаблон
« Ответ #4 : 18.08.2015, 22:23:15 »
Сразу оговорюсь что я не программист)
Вот код:
Спойлер
[свернуть]

Где же я ошибку допустил?..
« Последнее редактирование: 18.08.2015, 22:28:52 от Andrey_by »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменная из плагина в шаблон
« Ответ #5 : 18.08.2015, 23:30:07 »
Похоже на то, что UserState недоступно в первый раз, потому что cookie сессии еще не установлено.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Andrey_by

  • Новичок
  • 8
  • 0 / 0
  • Исчадие добра
Re: Переменная из плагина в шаблон
« Ответ #6 : 19.08.2015, 09:10:31 »
Подскажите пожалуйста, как выйти из этой ситуации? Как передать переменную уже при первом обращении к странице?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Переменная из плагина в шаблон
« Ответ #7 : 19.08.2015, 09:22:03 »
Мое имхо - никак. Все это делается в рамках одного запроса (выполнения приложения) и внутри него Вы не сможете использовать сессию для передачи данных.

Но можно попробовать в head документа добавить Вашу переменную. Вот пример.

Типа
Код: php
$document = JFactory::getDocument();
$headData = $document->getHeadData();
$headData['myArray'] = $array;
$document->setHeadData($headData);
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменная из плагина в шаблон
« Ответ #8 : 19.08.2015, 09:28:54 »
Попробуйте на onAfterRender использовать getBody(), регуляркой вставить нужное в нужном месте и потом setBody().
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Re: Переменная из плагина в шаблон
« Ответ #9 : 19.08.2015, 15:31:26 »
Вот, как один из вариантов. Без плагина, с подключением файла. Не вникал/проверял, но по описанию что-то похожее (недавно на форуме ссылка на это была где-то). Только под себя подгоните (стили не переносите, массив исключений ваш добавьте).
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

Andrey_by

  • Новичок
  • 8
  • 0 / 0
  • Исчадие добра
Re: Переменная из плагина в шаблон
« Ответ #10 : 19.08.2015, 17:25:18 »
Мое имхо - никак. Все это делается в рамках одного запроса (выполнения приложения) и внутри него Вы не сможете использовать сессию для передачи данных.

Но можно попробовать в head документа добавить Вашу переменную. Вот пример.

Типа
Код: php
$document = JFactory::getDocument();
$headData = $document->getHeadData();
$headData['myArray'] = $array;
$document->setHeadData($headData);
Такой способ не подходит, с setHeadData() нельзя добавить индекс массива ['myArray'].
Пробовал setBuffer в плагине, но оттуда не доходит до шаблона...
Регуляркой делать не хочется, так как плагин в принципе рабочий, только передать из него массив в шаблон както нужно...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменная из плагина в шаблон
« Ответ #11 : 19.08.2015, 20:38:56 »
Ну, во первых, плагин не совсем рабочий и передать переменную вам не удастся.
Во вторых, что не так с регуляркой? Вы ведь используете Joomla, а в ней регулярка сплошь и рядом, но вас это не беспокоит.
В конце концов, можно и без регулярки
Код: php-brief
$buffer=str_replace('</footer>','</footer>'.$blahblahblah,$buffer);
$app->setBody($buffer);
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Andrey_by

  • Новичок
  • 8
  • 0 / 0
  • Исчадие добра
Re: Переменная из плагина в шаблон
« Ответ #12 : 25.08.2015, 17:28:38 »
Спасибо robert, так и сделал. В onBeforeCompileHead передал все скрипты в _custom, а в onAfterRender вырезал их регуляркой и переставил в низ.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Шаблон заготовка masterbootstrap

Автор zxvorobey

Ответов: 1
Просмотров: 2354
Последний ответ 20.02.2018, 07:23:49
от effrit
Шаблон не видит переменные локализации кроме глобальных (Joomla 3.8)

Автор s.elena133

Ответов: 10
Просмотров: 3073
Последний ответ 09.12.2017, 18:27:18
от Ilhom666
Шаблон Shaper Xeon. Не переходит к созданным материалам

Автор wowcheg

Ответов: 1
Просмотров: 2640
Последний ответ 28.06.2017, 13:23:27
от sakhalin4242
Шаблон панели администратора ISIS 3 изменный

Автор beliyadm

Ответов: 11
Просмотров: 6721
Последний ответ 11.09.2016, 22:16:39
от beliyadm
Шаблон - как принято?

Автор Мурзик

Ответов: 5
Просмотров: 2995
Последний ответ 25.08.2016, 14:00:35
от beliyadm