Прошу помочь с очисткой кэша определенной страницы

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

В шаблоне профиля вызываю редактирование фона сайта следущим способом:
[[!UpdateProfile?  &preHooks=`updatebg.image` &postHooks=`clearProfileCache`]]
<form class="form-horizontal well callme" action="[[~[[*id]]]]" method="post" enctype="multipart/form-data" id='register_form' >
 <div id="register">
[[+login.update_success:eq=`1`:then=`<div style="width: 617px;
    padding: 12px 12px 1px; background: #e9ffe9; color: #030; margin-left: 0;
    margin-bottom: 15px;"><p>[[%login.profile_updated? &namespace=`login` &topic=`updateprofile`]]</p>
    <script type="text/javascript">
      setTimeout('document.getElementById("timer_inp").innerHTML = "через <b>1</b> секунды"', 1000);
      setTimeout('document.getElementById("timer_inp").innerHTML = "<b>прямо сейчас</b>"', 2000);
      setTimeout('document.location.href="[[~2]]"', 2000);
    </script>
     
    <p>Вы будете перенаправлены в <a href="[[~2]]">личный кабинет</a> <span id="timer_inp">через <b>2</b> секунд</span></p>
</div>`:else=``]]

  [[+message]]<input type="hidden" style="width: 450px;" name="fullname" id="fullname" value="[[+fullname]]">
  <div style="overflow:hidden; width:670px;margin:auto;">
            <img src='[[!+bg_image]]'  id="preview" style="float:left;  padding-right: 20px;padding-bottom:20px;" />  
        <div class="reg_line" style="position: relative;  height: 90px;padding:0;">
                <p>Выбрать фоновое изображение</p>
                <div class="file_upload" style="left:0px;top:40px;">
                    <button type="button">выберите файл</button>
                    <div>Файл не выбран</div>
                    <input type="file" accept="image/*" onchange="handleFiles(this.files)" name="bg_image"  id="bg_image" value="[[!+bg_image]]"  maxlength="100000" />
                </div>
                
                <span class="help-block text-error">
                    [[!+error.bg_image]]
                </span>
            </div>
            <input type="submit" value="Сменить Фон" class="btn primary" style="width: 165px; height: 30px;" />
         </div>      
  </div>
  
      
      

</form>
Где сначала происходит загрузка фонового изображения и прикрепления к пользователю в extended поле. И уже по окончании загрузки в postHooks вызывается снипет очистки кэша страницы профиля пользователя (и личного кабинета).
Код сниппета clearProfileCache.
$resource=$modx->getObject('modResource',2);
    $resource->_contextKey = $resource->context_key;
    $cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
    $key = $resource->getCacheKey();
    $cache->delete($key, array('deleteTop' => true));
    $cache->delete($key);
Идентификатор профиля = 2. В нем отключено кэширование (галка «Кэшируемый» не стоит).
Не понимаю почему после выполнения данного сниппета кэш сбрасывается только после повторной перезагрузки. хоть двойной редирект вызывай…
Прошу подскажите советом, или объясните что не так. если надо ссылку на сайт приложу.
Пользовался поиском, пробовал разное, но эффекта так и не достиг.
Дмитрий Крахмалев
09 июня 2015, 15:24
modx.pro
2 656
0

Комментарии: 14

Дмитрий Крахмалев
09 июня 2015, 18:28
0
Так же хочу добавить, что структура хранения изображений пользователей определена как вложенность
uploads/[[#ID пользователя]]/bg.jpg. Меняются только ID пользователей, а для одного профиля новый фон так и остается с таким же именем файла. сделано это чтобы фоновые изображения не переполняли диск, да и нет смысла в названии файла подругому. Единственное что может быть изменно в имени это расширение файла.
Может эта информация будет важна. Имя файла остается неизменным.
Никаких phpthumbof не использую. программно произвожу обрезку изображение через php сценарий в момент орбаботки загружаемого файла.
    Василий Наумкин
    09 июня 2015, 18:29
    0
    С версии MODX 2.3 у ресурса есть метод clearCache().
      Дмитрий Крахмалев
      09 июня 2015, 18:37
      0
      Аналогичная ситуация. до ручной перезагрузки страницы не изменяется.
      <?php
      $resource=$modx->getObject('modResource',2);
      $resource->clearCache();
          $resource->_contextKey = $resource->context_key;
          $cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
          $key = $resource->getCacheKey();
          $cache->delete($key, array('deleteTop' => true));
          $cache->delete($key);
      Может ли это быть связано с редиректом используя Javascript или нет.
      setTimeout('document.location.href="[[~2]]"', 2000);
      Может стоит через makeurl и Redirect modx попробовать…
        Максим Кузнецов
        09 июня 2015, 19:50
        0
        метод clearCache()
        Подскажите, пожалуйста — старый метод обновления кэша через cacheManager больше не используется?

        $modx->cacheManager->refresh(array('system_settings' => array()));
          Василий Наумкин
          09 июня 2015, 20:35
          0
          Или стоит чистить кэш до его загрузки.
          Дмитрий Крахмалев
          11 июня 2015, 20:45
          0
          Вопрос по getTickets. Я передаю в параметры снипета допустимые TV поля, и они почему то в этом документе не обновляются. Они что кэшируются? Как их сбросить я что то вообще не понимаю. На всех страницах поле дополнительное выводится, а вот на странице, которая обрабатывалась через getTicket поле пустое, как до изменения…
          Или как сделать тикеты по умолчанию не кэшируемыми… хотя из за одного поля это глупо. Это поле определяет Статус, по умолчанию оно пустое, а позже когда нажимаю Выбрать исполнителя статус присваивается «В исполнении». На всех страницах он отображается а на странице заказа нет… спасает полная очистка кэша.
            Дмитрий Крахмалев
            11 июня 2015, 21:17
            0
            Кажется разобрался… дело было в том что сохранение и очистка кэша была после return. Поправил, все очистилось успешно!

            $ticket ->setTVValue('status', 'В исполнении');
                            $ticket->save();
                            $ticket->clearCache();
                            return "
                            <h2>Исполнитель успешно привязан к заданию!</h2>
          Дмитрий Крахмалев
          09 июня 2015, 18:29
          0
          А информация профилей юзеров не кэшируется в modx или ее тоже нужно очищать?.. а то может поле extended тоже берется из кэша…
            Василий Наумкин
            09 июня 2015, 18:34
            0
            Конечно кэшируется, в сессии.
              Дмитрий Крахмалев
              09 июня 2015, 18:39
              0
              Чистить ключ сессии… а как его обновить затем. или перетереть путем к изображению сразу же. Просто стал замечать что если другие пользователи тоже сменили свой фон и к ним зайти в профиль то тоже может не сразу показать, а это уже не в сессиях хранится.
                Дмитрий Крахмалев
                09 июня 2015, 18:42
                0
                Попробовал вывести все что в сессии хранится, кроме идентификатора пользователя, политик и групп ничего по профилю пользователя не встретил
              Дмитрий Крахмалев
              09 июня 2015, 18:44
              0
              а сброс кэша страницы сбрасывает только закэшированную структуру страницы, или еще и все кэши использованных на данной странице изображений удаляются? Может каким то образом нужно очишать кэш именно рисунка… но вообще не представляю как.
                Максим
                09 июня 2015, 18:58
                0
                Так рисунок может браузер кэширует? Тогда можно попробовать что-нибудь типа image.jpg?4654654
                  Дмитрий Крахмалев
                  09 июня 2015, 19:06
                  0
                  хм… впринципе я что то даже совсем не подумал об этом! вот только тогда кэш в браузере наплодится… а этого не хочется. если только попробовать делать при смене изображения еще и количество обновлений фона в профиль загонять. и выводить изображение с этой цифрой. тогда не будет постоянно картинка в кэше плодится. но дополнительную информацию хранить придется.
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    14