aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 WaNted и всетаки '{expression="\IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params )"}'; в этой конструкции не работает. Хотелось бы передавать параметры в шаблон Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 9 декабря, 2019 Поделиться Опубликовано 9 декабря, 2019 'content' => \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params ) В самом шаблоне phtml: {expression="time()"} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 31 минуту назад, WaNted сказал: 'content' => \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params ) В самом шаблоне phtml: {expression="time()"} не помогает. Получается если expression не в хуке, то результат кешируется. Кешируется сам хук без expression. Вот такой вот замкнутый круг. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 9 декабря, 2019 Поделиться Опубликовано 9 декабря, 2019 Всё правильно. Шаблон это функция, expression лишь выполняет и выводит результат функции php внутри шаблона. До этого вы передавали результат time() напрямую в content, что в итоге кэшировалось. Что бы такого не было, в Вашем случае, нужно динамические данные получать в самом шаблоне. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 8 минут назад, WaNted сказал: Вашем случае, нужно динамические данные получать в самом шаблоне. не удобно. Надо будет строчек 200 перевести в шаблонный {{php}} Выше уже был спор на эту тему, не надо к нему возвращаться. Изначально мне бы хотелось получить динамические данные в хуке. А потом передать их в шаблон. И чтобы это не кешировалось. А можно как нибудь в хуке создать функцию и вызвать её в шаблоне? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 9 декабря, 2019 Поделиться Опубликовано 9 декабря, 2019 Можно создать хук класса \IPS\core\modules\front\system\plugins и там статическую функцию, после чего вызывать её в шаблоне \IPS\core\modules\front\plugins::functionName(). Либо подумать как вызвать функцию которая находиться в том же классе что и hookData. находится* aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 Оставлю здесь заметку для себя чтобы не забыть. создаем хук шаблона phtml шалон хук темы //<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if (!\defined('\IPS\SUITE_UNIQUE_KEY')) { exit; } class hook90 extends _HOOK_CLASS_ { /* !Hook Data - DO NOT REMOVE */ public static function hookData() { return array_merge_recursive( array ( 'globalTemplate' => array ( 0 => array ( 'selector' => '#ipsLayout_mainArea', 'type' => 'add_inside_start', 'content' => '{expression="\IPS\Theme::i()->getTemplate(\'plugins\',\'core\', \'global\')->test()"}', ), ), ), parent::hookData() ); } /* End Hook Data */ } В нем главное прописать '{expression="\IPS\Theme::i()->getTemplate(\'plugins\',\'core\', \'global\')->test()"}' и можно про этот хук забыть. Cоздаем хук кода с классом \IPS\core\modules\front\system\plugins В нем создаем функцию (_test()), которая и будет выполнять классический php //<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if (!\defined('\IPS\SUITE_UNIQUE_KEY')) { exit; } class hook91 extends _HOOK_CLASS_ { public function _test() { return time(); } } в шаблоне phtml пишем <ips:template parameters="" /> {{$plugins = new \IPS\core\modules\front\system\plugins; $time = $plugins->_test();}} {$time} По факту мы вызвали метод класса $plugins->_test(); который будет выполнен без кеширования. поправьте если что не так или укажите недостатки WaNted 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 9 декабря, 2019 Поделиться Опубликовано 9 декабря, 2019 Использование expression там бессмысленно. public static function _test() {{$time = \IPS\coore\modules\front\system\plugins::_test();}} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 3 минуты назад, WaNted сказал: Использование expression там бессмысленно. насколько я понял если его не прописать в хуке шаблона, то весь плагин закешируется. Вся соль как раз в нем. прямой вызов - \IPS\Theme::i()->getTemplate... кешируется '{expression="\IPS\Theme::i()->getTemplate... не кешируется а дальше финт ушами чтобы не писать большую часть php-кода на логике шаблона. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 Если до этого я хотел чтобы хук отображал шаблон передавая ему динамические данные, что было бы очень удобно. то сейчас шаблон вызывает хук. Тоже сгодится. Главное чтобы отсутствие кеширования при вызове с помощью expression не являлось недокументированной возможностью. Иначе пофиксят этот баг и все полетит... к чертям. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 9 декабря, 2019 Поделиться Опубликовано 9 декабря, 2019 Вот уберите и убедитесь что всё будет работать как надо. Кэшируется код шаблона, который парсится в обычный php, выполняются все функции и в итоге выводится чистым html. В Вашем случае всегда будет выполняться функция _test() в момент вывода. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 9 декабря, 2019 Автор Поделиться Опубликовано 9 декабря, 2019 Это проверим. Тогда возникает вопрос. А на сколько времени кешируется плагин? Я вчера вечером засек время и с утра он ещё в кеше. Часов 8. В настройках форума для гостей 30 секунд. Для каких-то блоков 5 минут. Крон работает. Есть у меня задумки сделать кешурующийся плагин, но чтобы не более суток. Но в данный момент я это время получается не контролирую. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 9 декабря, 2019 Поделиться Опубликовано 9 декабря, 2019 Кэшируется не плагин, а все шаблоны в IPS со всеми изменениями которые вносят хуки. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 10 декабря, 2019 Автор Поделиться Опубликовано 10 декабря, 2019 И все таки если в хуке шаблона \IPS\Theme::i()->getTemplate('plugins', 'core', 'global')->test() без expression, то результат кешируется. А вот то же самое в хуке кода не кешируется. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 10 декабря, 2019 Поделиться Опубликовано 10 декабря, 2019 В 07.12.2019 в 18:44, aplayer сказал: $content = '{template="phtml" group="plugins" location="global" app="core"}'; Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 10 декабря, 2019 Поделиться Опубликовано 10 декабря, 2019 \IPS\Theme::i()->getTemplate эта функция возвращает уже скомпилированный шаблона (html) сразу же в content и естественно кэшируется. {template="phtml" group="plugins" location="global" app="core"} шорткод той же самой функции, только тут уже шаблон компилируется в момент вывода, то что Вам нужно. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 10 декабря, 2019 Автор Поделиться Опубликовано 10 декабря, 2019 уже нет сил проверять. Этот код выдает ошибку "отсутсвует файл phtml" хотя файл есть. expression не дает кешироваться все остальные методы кешируются Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 10 декабря, 2019 Автор Поделиться Опубликовано 10 декабря, 2019 Все {template="phtml" group="plugins" location="global" app="core"} не кешируется но через нее нельзя передать параметры. Но эта проблема решается через хуки кода. А то что она вызывала ошибку, то это оказывается в данном форуме есть баг. Текст этого форума между буквами имеет null-байты и не может использоваться при копировании. Скопированный текст в редакторе может быть выглядеть без косяков и даже подсветка синтаксиса ничего не покажет, но при компиляции кода вызовет ошибку. Надеюсь у моего форума такой проблемы нет Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 11 декабря, 2019 Автор Поделиться Опубликовано 11 декабря, 2019 И еще вопрос на злобу дня. У меня есть блок php кода в приложении Pages. Там стоит настройка "Не кешировать блок" Но он иногда редко и рандомно кешируется. Из за этого некоторые пользователи получают недостоверную и чужую информацию. Я заметил что кеширование происходит если страница долго грузится. То есть некоторые пользователи иногда могут увидеть блок который отображался ранее другому пользователю. Сейчас в моем плагине какое либо кеширование категорически запрещено. Если у пользователя долго грузится страница, он не должен видеть кешированного чужого блока. Пусть он вообще ничего не увидит, пусть хоть 502 страницу получает, но никакого кэша быть не должно. С плагином не будет таких же ситуаций как с блоками Pages? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 23 февраля, 2020 Автор Поделиться Опубликовано 23 февраля, 2020 Столько годной информации пропало.... Новый вопрос. Хочу сделать отправку некоторых ЛС в свой телеграм. Как отправлять в телеграм я знаю, а вот как перехватывать ЛС пока не пойму. Например мне надо чтобы входящие администратору улетали ему на телефон. То-есть пользователю с определенным ID. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.