Перейти к содержанию

aplayer

Актив
  • Постов

    407
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Сообщения, опубликованные aplayer

  1. И еще вопрос на злобу дня. У меня есть блок php кода в приложении Pages. Там стоит настройка "Не кешировать блок"

    Но он иногда редко и рандомно кешируется. Из за этого некоторые пользователи получают недостоверную и чужую информацию. Я заметил что кеширование происходит если страница долго грузится. То есть некоторые пользователи иногда могут увидеть блок который отображался ранее другому пользователю.

    Сейчас в моем плагине какое либо кеширование категорически запрещено. Если у пользователя долго грузится страница, он не должен видеть кешированного чужого блока. Пусть он вообще ничего не увидит, пусть хоть 502 страницу получает, но никакого кэша быть не должно.

    С плагином не будет таких же ситуаций как с блоками Pages?

  2. Все

    {template="phtml" group="plugins" location="global" app="core"}  не кешируется

    но через нее нельзя передать параметры. Но эта проблема решается через хуки кода.

    А то что она вызывала ошибку, то это оказывается в данном форуме есть баг. Текст этого форума между буквами имеет null-байты и не может использоваться при копировании. Скопированный текст в редакторе может быть выглядеть без косяков и даже подсветка синтаксиса ничего не покажет, но при компиляции кода вызовет ошибку.

    Надеюсь у моего форума такой проблемы нет

  3. Иногда надо глянуть, что было в удаленных постах. В панели модератора в разделе удаленного контента  при клике по ссылкам просто открывает форум на последней странице, а удаленный пост не отображается. В конец адреса страницы добавляется параметр ?tab=comments&showDeleted=1#comment-12345

    Но даже с правами админа не могу увидеть удаленный пост.

    Чтобы поглядеть пост, надо сначала сделать его скрытым, а потом смотреть на форуме и потом снова удалять. Не очень удобно.

    Есть возможность поглядеть удаленное без включения скрытия?

     

  4. Это проверим. 

    Тогда возникает вопрос. А на сколько времени кешируется плагин? Я вчера вечером засек время и с утра он ещё в кеше. Часов 8. 

    В настройках форума для гостей 30 секунд. Для каких-то блоков 5 минут. Крон работает. 

    Есть у меня задумки сделать кешурующийся плагин, но чтобы не более суток. Но в данный момент я это время получается не контролирую. 

     

  5. Если до этого я хотел чтобы хук отображал шаблон передавая ему динамические данные, что было бы очень удобно.

    то сейчас шаблон вызывает хук. Тоже сгодится.

    Главное чтобы отсутствие кеширования при вызове с помощью expression  не являлось недокументированной возможностью. Иначе пофиксят этот баг и все полетит... к чертям.

     

     

  6. 3 минуты назад, WaNted сказал:

    Использование expression там бессмысленно.

    насколько я понял если его не прописать в хуке шаблона, то весь плагин закешируется. Вся соль как раз в нем.

    прямой вызов - \IPS\Theme::i()->getTemplate... кешируется

    '{expression="\IPS\Theme::i()->getTemplate... не кешируется

    а дальше финт ушами чтобы не писать большую часть php-кода на логике шаблона.

  7. Оставлю здесь заметку для себя чтобы не забыть.

    создаем хук шаблона 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. 8 минут назад, WaNted сказал:

    Вашем случае, нужно динамические данные получать в самом шаблоне.

    не удобно. Надо будет строчек 200 перевести в шаблонный {{php}}

    Выше уже был спор на эту тему, не надо к нему возвращаться.

    Изначально мне бы хотелось получить динамические данные в хуке. А потом передать их в шаблон. И чтобы это не кешировалось.

    А можно как нибудь в хуке создать функцию и вызвать её в шаблоне?

  9. 31 минуту назад, WaNted сказал:
    
    'content' => \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params )

    В самом шаблоне phtml: 

    
    {expression="time()"}

     

    не помогает. Получается если expression не в хуке, то результат кешируется. Кешируется сам хук без expression.

    Вот такой вот замкнутый круг.

     

  10. Вопрос стоит очень остро.

    версия форума 4.4.9

    прилагаю тестовый плагин с исходниками.

    Тестировал на разных сайтах. Итог один. Если выключить режим разработчика PHP выполняется 1 раз и результат выполнения замораживается для всех пользователей навсегда.

    Тестовый плагин  при каждом обновлении страницы, между навигатором и контентом должен выводить результат функции time() - постоянно увеличивающееся число. Но но выводит только постоянное число.

     

    plugins.7z

  11. Если выключить режим разработчика, то вот такой хук зависает. Кешируется и обновляется раз в пол часа

    //<?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()

    Если сменить пользователя, то он тоже видит цифру, которая была сгенерирована у предыдущего пользователя.

  12. установил плагин на тестовую копию боевого сайта. На нем блок начал кешироваться. Причем так, что одни пользователи видят кешированный блок предназначенный другим пользователям.

    У меня цель создать плагин который будет выдавать динамическую информацию, уникальную для каждого пользователя. Поэтому блок не должен кешироваться и отображаться одно и тоже разным пользователям

    На сайте на котором разрабатывался плагин, все хорошо. Наверно из за режима разработчика.

  13. 1 час назад, WaNted сказал:

    Режим разработчика включен?

    да включен.

    Предположительно это похоже не сессию. В течении определенного времени после активности изменения принимаются, а после как будто где-то кешируются и больше исходники не читаются.

  14. И еще такой вопрос.

    Когда я правлю файлы хуков и шаблоны phtml, то какое-то время сайт реагирует на изменения. Но через некоторое время перестает.

    То-есть я вношу правки в файлы, а сайт продолжает работать как будто ничего не изменилось.

    Чтобы изменения вступили в силу надо плагин скачать и заново установить.

    А можно ли что нибудь сделать так чтобы не пришлось переустанавливать плагин? Ведь какое-то время изменения применяются без переустановки.

  15. В документации много где сказано, что в шаблон можно передать параметры чрез эту строку. И больше ни слова ка именно их передавать.

    <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 чтобы ее можно было отобразить на странице?

  16. при разработке плагина использовал в хуке функцию in_array

    мне выдает такую ошибку

    Цитата

    You have used a function (in_array) that should be called from the root namespace for performance reasons

    Не могу понять что это такое и как с этим бороться. Я так понимаю движок не дает мне использовать эту функцию в открытом виде. Что делать?

×
×
  • Создать...