[Решено] Очистка кеша после сохранения настроек

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

UPD. Никто не знает/поможет?
UPD2. Перед сохранением, надо было, передать в сущность текущего пользователя новые данные.
— есть текущий пользователь, полученный из бд (сущность)
— вы получаете сабмит формы и обновляете В ТАБЛИЦЕ данные настроек сущности пользователя
— но текущая сущность пользователя $this->User_GetUserCurrent() все также остается со старыми настройками, её никто не обновлял
Спасибо PSNet .

9 комментариев

avatar
Код в студию.
avatar
public function RegisterHook()
    {
        $this->AddHook('settings_tuning_save_before', 'SettingsTuningSaveBefore');
    }


public function SettingsTuningSaveBefore($aParam = array())
    {
        $oUserCurrent = $aParam['oUser'];
        if ($aMenu = getRequest('settings_tuning_menu')) {

            end($aMenu);
            $key = key($aMenu);
            $sSetting = '';
            for ($i = 0; $i <= $key; $i++) {
                if (isset($aMenu[$i])) {
                    $sSetting .= '1';
                } else {
                    $sSetting .= '0';
                }
            }

            $this->PluginPersonalmenu_Menu_UpdateUserPersonalMenu($oUserCurrent->getId(), $sSetting);
        }
    }
avatar
Так что скажете?
avatar
а вы ещё меньше кода опубликуйте.
где шаблон? кстати, битовую маску в строку прячете, странно.
avatar
точно, шаблон:
public function RegisterHook()
    {
        $this->AddHook('template_form_settings_tuning_end', 'InjectFormSettingsTuning');
    }


public function InjectFormSettingsTuning()
    {
        $aPersonalMenus = Config::Get('plugin.personalmenu.menu');
        $aPersonalMenuSetting = str_split($this->User_GetUserCurrent()->getPersonalMenu());
        $iIterator = 0;
        foreach ($aPersonalMenus as &$aItem) {
            if (is_array($aItem['url'])) { // todo: create the entity for a menu Item
                $aItem['url'] = Router::GetPath($aItem['url']['page']) . $aItem['url']['params'];
            }

            if (preg_match('/_\.__([\S|\.]+)__\._/Ui', $aItem['title'], $aMatch)) {
                $aItem['title'] = $this->Lang_Get($aMatch[1]);
            }

            if ($aPersonalMenuSetting[$iIterator]) {
                $aItem['active'] = true;
            } else {
                $aItem['active'] = false;
            }

            $iIterator++;
        }

        $this->Viewer_Assign('aMenu', $aPersonalMenus);

        return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__) . 'inject.form.settings.tuning.tpl');
    }


<h3>{$aLang.plugin.personalmenu.title}My Menu</h3>
{foreach from=$aMenu item="aItem" name='menu'}
    <label>
        <input {if $aItem['active']}checked{/if} type="checkbox" id="settings_tuning_menu" name="settings_tuning_menu[{$smarty.foreach.menu.index}]" value="1" class="input-checkbox" /> {$aItem['title']} ({$aItem['url']})
    </label>
{/foreach}


Про битовую маску согласен, делал спеша, для наглядности засунул в строку.
avatar
есть подозрения что вы как-то хитро для текущего пользователя сохраняете данные в сущности так, что они «тут же сразу в этой же сущности не доступны» т.е. нужно получить её снова.
avatar
public function UpdateUserPersonalMenu($iUserId, $sSetting = null)
    {
        $sql = "UPDATE " . Config::Get('db.table.user') .
            " SET `user_personal_menu` = ?s
            WHERE `user_id` = ?d";

        return $this->oDb->query($sql, $sSetting, $iUserId);
    }
avatar
получается так:

— есть текущий пользователь, полученный из бд (сущность)
— вы получаете сабмит формы и обновляете В ТАБЛИЦЕ данные настроек сущности пользователя
— но текущая сущность пользователя $this->User_GetUserCurrent() все также остается со старыми настройками, её никто не обновлял
avatar
Да, спасибо. Надо было передать данные в сущность.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.