-
Постов
407 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Тип контента
Профили
Загрузки
База знаний IPS Community Suite 4
База знаний IP.Board 3.x
Форумы
События
Магазин
Совместные покупки
Сообщения, опубликованные aplayer
-
-
И еще вопрос на злобу дня. У меня есть блок php кода в приложении Pages. Там стоит настройка "Не кешировать блок"
Но он иногда редко и рандомно кешируется. Из за этого некоторые пользователи получают недостоверную и чужую информацию. Я заметил что кеширование происходит если страница долго грузится. То есть некоторые пользователи иногда могут увидеть блок который отображался ранее другому пользователю.
Сейчас в моем плагине какое либо кеширование категорически запрещено. Если у пользователя долго грузится страница, он не должен видеть кешированного чужого блока. Пусть он вообще ничего не увидит, пусть хоть 502 страницу получает, но никакого кэша быть не должно.
С плагином не будет таких же ситуаций как с блоками Pages?
-
нет. Просто перекидывает на последнюю страницу форума. На стандартной теме то же самое.
-
Все
{template="phtml" group="plugins" location="global" app="core"} не кешируется
но через нее нельзя передать параметры. Но эта проблема решается через хуки кода.
А то что она вызывала ошибку, то это оказывается в данном форуме есть баг. Текст этого форума между буквами имеет null-байты и не может использоваться при копировании. Скопированный текст в редакторе может быть выглядеть без косяков и даже подсветка синтаксиса ничего не покажет, но при компиляции кода вызовет ошибку.
Надеюсь у моего форума такой проблемы нет
-
уже нет сил проверять. Этот код выдает ошибку "отсутсвует файл phtml" хотя файл есть.
expression не дает кешироваться все остальные методы кешируются
-
Иногда надо глянуть, что было в удаленных постах. В панели модератора в разделе удаленного контента при клике по ссылкам просто открывает форум на последней странице, а удаленный пост не отображается. В конец адреса страницы добавляется параметр ?tab=comments&showDeleted=1#comment-12345
Но даже с правами админа не могу увидеть удаленный пост.
Чтобы поглядеть пост, надо сначала сделать его скрытым, а потом смотреть на форуме и потом снова удалять. Не очень удобно.
Есть возможность поглядеть удаленное без включения скрытия?
-
И все таки если в хуке шаблона
\IPS\Theme::i()->getTemplate('plugins', 'core', 'global')->test()
без expression, то результат кешируется.
А вот то же самое в хуке кода не кешируется.
-
-
Это проверим.
Тогда возникает вопрос. А на сколько времени кешируется плагин? Я вчера вечером засек время и с утра он ещё в кеше. Часов 8.
В настройках форума для гостей 30 секунд. Для каких-то блоков 5 минут. Крон работает.
Есть у меня задумки сделать кешурующийся плагин, но чтобы не более суток. Но в данный момент я это время получается не контролирую.
-
Если до этого я хотел чтобы хук отображал шаблон передавая ему динамические данные, что было бы очень удобно.
то сейчас шаблон вызывает хук. Тоже сгодится.
Главное чтобы отсутствие кеширования при вызове с помощью expression не являлось недокументированной возможностью. Иначе пофиксят этот баг и все полетит... к чертям.
-
3 минуты назад, WaNted сказал:
Использование expression там бессмысленно.
насколько я понял если его не прописать в хуке шаблона, то весь плагин закешируется. Вся соль как раз в нем.
прямой вызов - \IPS\Theme::i()->getTemplate... кешируется
'{expression="\IPS\Theme::i()->getTemplate... не кешируется
а дальше финт ушами чтобы не писать большую часть php-кода на логике шаблона.
-
Оставлю здесь заметку для себя чтобы не забыть.
создаем хук шаблона 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(); который будет выполнен без кеширования.
поправьте если что не так или укажите недостатки
-
8 минут назад, WaNted сказал:
Вашем случае, нужно динамические данные получать в самом шаблоне.
не удобно. Надо будет строчек 200 перевести в шаблонный {{php}}
Выше уже был спор на эту тему, не надо к нему возвращаться.
Изначально мне бы хотелось получить динамические данные в хуке. А потом передать их в шаблон. И чтобы это не кешировалось.
А можно как нибудь в хуке создать функцию и вызвать её в шаблоне?
-
31 минуту назад, WaNted сказал:
'content' => \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params )
В самом шаблоне phtml:
{expression="time()"}
не помогает. Получается если expression не в хуке, то результат кешируется. Кешируется сам хук без expression.
Вот такой вот замкнутый круг.
-
и всетаки
'{expression="\IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params )"}';
в этой конструкции не работает.
Хотелось бы передавать параметры в шаблон
-
12 минут назад, WaNted сказал:
Попробуйте так:
'content' => '{expression="time()"}'
Вроде заработало.
Надеюсь
\IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params );
в этой конструкции будет работать без кеширования
-
Вопрос стоит очень остро.
версия форума 4.4.9
прилагаю тестовый плагин с исходниками.
Тестировал на разных сайтах. Итог один. Если выключить режим разработчика PHP выполняется 1 раз и результат выполнения замораживается для всех пользователей навсегда.
Тестовый плагин при каждом обновлении страницы, между навигатором и контентом должен выводить результат функции time() - постоянно увеличивающееся число. Но но выводит только постоянное число.
-
Если выключить режим разработчика, то вот такой хук зависает. Кешируется и обновляется раз в пол часа
//<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { exit; } class hook73 extends _HOOK_CLASS_ { /* !Hook Data - DO NOT REMOVE */ public static function hookData() { $content = time(); return array_merge_recursive( array ( 'globalTemplate' => array ( 0 => array ( 'selector' => '#ipsLayout_mainArea', 'type' => 'add_inside_start', 'content' => $content, ), ), ), parent::hookData() ); } /* End Hook Data */ }
Он должен при обновлении страницы выводить результат функции time()
Если сменить пользователя, то он тоже видит цифру, которая была сгенерирована у предыдущего пользователя.
-
установил плагин на тестовую копию боевого сайта. На нем блок начал кешироваться. Причем так, что одни пользователи видят кешированный блок предназначенный другим пользователям.
У меня цель создать плагин который будет выдавать динамическую информацию, уникальную для каждого пользователя. Поэтому блок не должен кешироваться и отображаться одно и тоже разным пользователям
На сайте на котором разрабатывался плагин, все хорошо. Наверно из за режима разработчика.
-
1 час назад, WaNted сказал:
Режим разработчика включен?
да включен.
Предположительно это похоже не сессию. В течении определенного времени после активности изменения принимаются, а после как будто где-то кешируются и больше исходники не читаются.
-
И еще такой вопрос.
Когда я правлю файлы хуков и шаблоны phtml, то какое-то время сайт реагирует на изменения. Но через некоторое время перестает.
То-есть я вношу правки в файлы, а сайт продолжает работать как будто ничего не изменилось.
Чтобы изменения вступили в силу надо плагин скачать и заново установить.
А можно ли что нибудь сделать так чтобы не пришлось переустанавливать плагин? Ведь какое-то время изменения применяются без переустановки.
-
вот такой код завершается ошибкой
Whoops \ Exception \ ErrorException (E_NOTICE)Undefined variable: secret_key<ips:template parameters="$secret_key" /> <div>{$secret_key}</div>
-
В документации много где сказано, что в шаблон можно передать параметры чрез эту строку. И больше ни слова ка именно их передавать.
<ips:template parameters="$param1" />
Как я не пытаюсь эти параметры передать мне все пишет ошибку типа $param1 не определена или об отсутствии аргументов у функции.
Как мне из хука перекинуть несколько параметров в шаблон phtml?
вот пример хука
//<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if (!\defined('\IPS\SUITE_UNIQUE_KEY')) { exit; } class hook49 extends _HOOK_CLASS_ { /* !Hook Data - DO NOT REMOVE */ public static function hookData() { $secret_key = "secret_key"; $content = '{template="phtml" group="plugins" location="global" app="core"}'; return array_merge_recursive(array( 'globalTemplate' => array( 0 => array( 'selector' => '#ipsLayout_mainArea', 'type' => 'add_before', 'content' => $content, ), ), ), parent::hookData()); } /* End Hook Data */ }
Как отправить переменную $secret_key в шаблон PHTML чтобы ее можно было отобразить на странице?
-
функцию вызвал в хуке
-
при разработке плагина использовал в хуке функцию in_array
мне выдает такую ошибку
ЦитатаYou have used a function (in_array) that should be called from the root namespace for performance reasons
Не могу понять что это такое и как с этим бороться. Я так понимаю движок не дает мне использовать эту функцию в открытом виде. Что делать?
Прикольная штука для форума.
в Флейм
Опубликовано
капчу чтоли взломали? Второй уже за сегодня.