9 декабря, 20195 yr Author comment_160607 WaNted и всетаки '{expression="\IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params )"}'; в этой конструкции не работает. Хотелось бы передавать параметры в шаблон
9 декабря, 20195 yr comment_160608 'content' => \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params ) В самом шаблоне phtml: {expression="time()"}
9 декабря, 20195 yr Author comment_160609 31 минуту назад, WaNted сказал: 'content' => \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params ) В самом шаблоне phtml: {expression="time()"} не помогает. Получается если expression не в хуке, то результат кешируется. Кешируется сам хук без expression. Вот такой вот замкнутый круг.
9 декабря, 20195 yr comment_160610 Всё правильно. Шаблон это функция, expression лишь выполняет и выводит результат функции php внутри шаблона. До этого вы передавали результат time() напрямую в content, что в итоге кэшировалось. Что бы такого не было, в Вашем случае, нужно динамические данные получать в самом шаблоне.
9 декабря, 20195 yr Author comment_160611 8 минут назад, WaNted сказал: Вашем случае, нужно динамические данные получать в самом шаблоне. не удобно. Надо будет строчек 200 перевести в шаблонный {{php}} Выше уже был спор на эту тему, не надо к нему возвращаться. Изначально мне бы хотелось получить динамические данные в хуке. А потом передать их в шаблон. И чтобы это не кешировалось. А можно как нибудь в хуке создать функцию и вызвать её в шаблоне?
9 декабря, 20195 yr comment_160612 Можно создать хук класса \IPS\core\modules\front\system\plugins и там статическую функцию, после чего вызывать её в шаблоне \IPS\core\modules\front\plugins::functionName(). Либо подумать как вызвать функцию которая находиться в том же классе что и hookData. находится*
9 декабря, 20195 yr Author comment_160613 Оставлю здесь заметку для себя чтобы не забыть. создаем хук шаблона 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(); который будет выполнен без кеширования. поправьте если что не так или укажите недостатки
9 декабря, 20195 yr comment_160614 Использование expression там бессмысленно. public static function _test() {{$time = \IPS\coore\modules\front\system\plugins::_test();}}
9 декабря, 20195 yr Author comment_160615 3 минуты назад, WaNted сказал: Использование expression там бессмысленно. насколько я понял если его не прописать в хуке шаблона, то весь плагин закешируется. Вся соль как раз в нем. прямой вызов - \IPS\Theme::i()->getTemplate... кешируется '{expression="\IPS\Theme::i()->getTemplate... не кешируется а дальше финт ушами чтобы не писать большую часть php-кода на логике шаблона.
9 декабря, 20195 yr Author comment_160616 Если до этого я хотел чтобы хук отображал шаблон передавая ему динамические данные, что было бы очень удобно. то сейчас шаблон вызывает хук. Тоже сгодится. Главное чтобы отсутствие кеширования при вызове с помощью expression не являлось недокументированной возможностью. Иначе пофиксят этот баг и все полетит... к чертям.
9 декабря, 20195 yr comment_160617 Вот уберите и убедитесь что всё будет работать как надо. Кэшируется код шаблона, который парсится в обычный php, выполняются все функции и в итоге выводится чистым html. В Вашем случае всегда будет выполняться функция _test() в момент вывода.
9 декабря, 20195 yr Author comment_160618 Это проверим. Тогда возникает вопрос. А на сколько времени кешируется плагин? Я вчера вечером засек время и с утра он ещё в кеше. Часов 8. В настройках форума для гостей 30 секунд. Для каких-то блоков 5 минут. Крон работает. Есть у меня задумки сделать кешурующийся плагин, но чтобы не более суток. Но в данный момент я это время получается не контролирую.
9 декабря, 20195 yr comment_160619 Кэшируется не плагин, а все шаблоны в IPS со всеми изменениями которые вносят хуки.
10 декабря, 20195 yr Author comment_160621 И все таки если в хуке шаблона \IPS\Theme::i()->getTemplate('plugins', 'core', 'global')->test() без expression, то результат кешируется. А вот то же самое в хуке кода не кешируется.
10 декабря, 20195 yr comment_160622 В 07.12.2019 в 18:44, aplayer сказал: $content = '{template="phtml" group="plugins" location="global" app="core"}';
10 декабря, 20195 yr comment_160626 \IPS\Theme::i()->getTemplate эта функция возвращает уже скомпилированный шаблона (html) сразу же в content и естественно кэшируется. {template="phtml" group="plugins" location="global" app="core"} шорткод той же самой функции, только тут уже шаблон компилируется в момент вывода, то что Вам нужно.
10 декабря, 20195 yr Author comment_160627 уже нет сил проверять. Этот код выдает ошибку "отсутсвует файл phtml" хотя файл есть. expression не дает кешироваться все остальные методы кешируются
10 декабря, 20195 yr Author comment_160628 Все {template="phtml" group="plugins" location="global" app="core"} не кешируется но через нее нельзя передать параметры. Но эта проблема решается через хуки кода. А то что она вызывала ошибку, то это оказывается в данном форуме есть баг. Текст этого форума между буквами имеет null-байты и не может использоваться при копировании. Скопированный текст в редакторе может быть выглядеть без косяков и даже подсветка синтаксиса ничего не покажет, но при компиляции кода вызовет ошибку. Надеюсь у моего форума такой проблемы нет
11 декабря, 20195 yr Author comment_160653 И еще вопрос на злобу дня. У меня есть блок php кода в приложении Pages. Там стоит настройка "Не кешировать блок" Но он иногда редко и рандомно кешируется. Из за этого некоторые пользователи получают недостоверную и чужую информацию. Я заметил что кеширование происходит если страница долго грузится. То есть некоторые пользователи иногда могут увидеть блок который отображался ранее другому пользователю. Сейчас в моем плагине какое либо кеширование категорически запрещено. Если у пользователя долго грузится страница, он не должен видеть кешированного чужого блока. Пусть он вообще ничего не увидит, пусть хоть 502 страницу получает, но никакого кэша быть не должно. С плагином не будет таких же ситуаций как с блоками Pages?
23 февраля, 20204 yr Author comment_160826 Столько годной информации пропало.... Новый вопрос. Хочу сделать отправку некоторых ЛС в свой телеграм. Как отправлять в телеграм я знаю, а вот как перехватывать ЛС пока не пойму. Например мне надо чтобы входящие администратору улетали ему на телефон. То-есть пользователю с определенным ID.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.