1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Перестроить кэш пользователей автоматически

Тема в разделе "Основные вопросы по XenForo", создана пользователем evolution, 17.09.2011.

Загрузка
  1. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    Изменяю группы пользователей извне с помощью PHP скрипта который залезает в базу и меняет в базе группу пользователя на необходимый ID, группа меняется, но лишь внешне (статус, цвет ника, запись в админке), все права остаются старыми. После перстроения кеша пользователей все нормализуется. Впринципе я понимаю что перестроение прав пользователя - это процесс сложный и простым изменением в базе его не решить, но я обрадовался когда после перестроки кеша пользователей группа таки сменилась окончательно. Вопрос: есть возможность запускать перестройку ежечасно?

    P.S. Также принимаются другие идеи по обновлению прав пользователей после столь нетрадиционного изменения группы пользователя.
     
    Бboris нравится это.
  2. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Изучить как это делается из админки (посмотреть код класса и моделей, которые для этого используются) и создать новую задачу для планировщика.
     
  3. Бboris

    Бboris Тролль

    Регистрация:
    20.08.11
    Сообщения:
    205
    Симпатии:
    33
    Для того что бы админу создать в планировщике задание, нужно знать что и чем запускается.
    А вот этого "что и чем" и нету ... :)
     
  4. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Исходя из того, что человек использует свой скрипт и в обход движка форума изменяет напрямую в таблицах информацию, я делаю вывод, что данный человек вполне способен изучить как сам форум перестраивает кэш пользователей и написать соответствующий класс для последующего использования этого класса в задаче планировщика.

    Вашего "что и чем" нету потому, что это нестандартное использование скрипта.
     
  5. Бboris

    Бboris Тролль

    Регистрация:
    20.08.11
    Сообщения:
    205
    Симпатии:
    33
    Вот что спросил Evolution
    Вот что ответил Pepelac
    Вы сознательно отвечаете таким образом, что бы из ваших ответов нельзя было извлечь ни крупинки пользы? :p
     
  6. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Вот что спросил Evolution
    Вот что ответил Pepelac
    Вы сознательно выдираете фразы таким образом, чтобы пофлудить?:p
     
  7. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    Пеп, просто после того, как ты несколько раз помог, а один раз отказался разжевывать, теперь вопроскин и тобой недоволен :)
     
  8. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    спасибо за совет (хотя он был очевиден). А есть где почитать про планировщик, создание класса и т.д?

    P.S. Вы переоценили мои способности, залезть в базу прямым запросом - одна строчка php кода. А вот механику создания класса обработчика я могу и не осилить, потому и прошу помощи.
     
  9. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Кстати, а ежечасное перестроение кеша, которое по дефолту стоит в заданиях планировщика, не помогает?
     
  10. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    нет там такого задания.
     
  11. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    "Обновление всех счетчиков" - это и есть перестройка кеша пользователей, насколько я понимаю.
     
  12. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    вы неверно понимаете. тривиальные решения были перепробованы.
     
  13. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Тогда нужно спрашивать решение на офе. Более, чем уверен, что из находящихся на этом форуме не копался в нужном Вам коде.
    Ну и в крайнем случае можно попробовать "подсмотреть", что отправляется на сервер при нажатии нужных кнопок в админке. Это можно через FireBug осуществить. Дальше по аналогии пробуем сделать то же самое с помощью того же wget или что-то в этом духе.
    В общем готового решения нет и навряд ли оно появится без Вашего сильнейшего желания :)
     
    evolution нравится это.
  14. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    спасибо за советы. пойду гуглить FireBug и wget
     
  15. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    не очень получилось, а скажите где можно посмотреть класс и метода для перестроения кеша?
     
  16. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    По цепочке:
    1. XenForo_ControllerAdmin_Tools::actionCacheRebuild()
    2. XenForo_ControllerHelper_CacheRebuild::rebuildCache()
    3. XenForo_CacheRebuilder_User::rebuild()
     
    evolution нравится это.
  17. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    Поставил три события по очереди в 19:00, 19:01, 19:02 например. сработали все три, но толку ноль.

    P.S. с меня 666-ая симпатия вам)))
     
  18. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    В принципе, вам можно создать свой класс-обработчик задачи крона, в котором просто вызывть в цикле метод XenForo_CacheRebuilder_User::rebuild();

    Но тут два момента:
    1. Это создаст нагрузку на сервер, если у вас много пользователей
    2. Цикл придется делать do-while и проверять возвращаемое значение. Главное с этим циклом не уйти в бесконечный цикл.
    То есть у вас будет что-то типа этого
    PHP:
    $options = array(
        
    'batch' => 50 // кол-во обрабатываемых пользователей за один проход
    );
    $position 0;

    $rebuilder XenForo_CacheRebuilder_Abstract::getCacheRebuilder('User');

    do {
        
    $position $rebulder->rebuild($position$options'');

        if (
    $position === true)
        {
            break;
        }
    } while (
    $position);
     
    TAIFUN нравится это.
  19. evolution

    evolution Пользователь

    Регистрация:
    05.09.11
    Сообщения:
    14
    Симпатии:
    2
    в общем мои экспериманты по созданию нового класса закончилисб падением движка. Сейчас все восстновлено, но я снова в начале. Как этот класс создать? понтно что в libriary создаю папку AutoRebild, там файл Rebild.php, внутри:
    PHP:
     <?php
    class AutoRebild_Rebild
        
    {

            public function 
    go()
            {
                
    $options = array(  'batch' => 100 );
                
    $position 0;
                
    $rebuilder XenForo_CacheRebuilder_Abstract::getCacheRebuilder('User');
                do
                {
                    
    $position $rebulder->rebuild($position$options'');
                    if (
    $position === true)
                    {
                        break;
                    }
                } while (
    $position);
            }
        }
    Далее, создаю задание в планировщике AutoRebild_Rebild::go
    вроде все запускается, но результата нет, как узнать, выолняется вообще или нет код?

    Думала что нужно созадть обработчик событий, но вот дальше при попытке создать его ничего хорошго никак не выходит. Разработка >
    Обработчики событий > Редактор обработчиков событий - я на верном пути? Какое событие нужно обрабатывать?
     
  20. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Обработчик события не надо создавать. Надо именно задачу планировщика.
    Функция должна быть статическая.
    PHP:
    <?php
    class AutoRebild_UserCache
    {
        public static function 
    rebuild()
        {
            
    $options = array(
                
    'batch' => 50 // кол-во обрабатываемых пользователей за один проход
            
    );
            
    $position 0;

            
    $rebuilder XenForo_CacheRebuilder_Abstract::getCacheRebuilder('User');

            do {
                
    $position $rebulder->rebuild($position$options'');

                if (
    $position === true)
                {
                    break;
                }
            } while (
    $position);
        }
    }
     

Поделиться этой страницей