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

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

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

В чем отличие хука от зоны для вывода блока

Объясните, пожалуйста, чем отличается хук от зоны для вывода блоков?

С блоками мне все понятно: в нужном месте задаю новую зону

{include file='blocks.tpl' group='topic-bottom'}

и вывожу туда любые блоки, причем в конфиге могу гибко настроить их вывод. А в чем преимущества хуков?

Вернуть массив из хука в шаблон (РЕШЕНО)

Добрый день. Имеется хук, возвращающий в качестве результата массив.

class PluginLive_HookLive extends Hook
{
    public function RegisterHook()
    {
        $this->AddHook('template_header_banner_begin', 'GoGoGo');
    }

    public function GoGoGo()
    {
        return array('foo'=>'bar');
    }
}
 


Вызываю в шаблоне:
{hook run='header_banner_begin' assign='aResult'}


Ожидаю, что в $aResult окажется «ассоциативный» массив, т.е. {$aResult.foo} вернет «bar». Но в результате возвращается массив вида array(0=>'A', 1=>'r', 1=>'r', 1=>'a', 1=>'y', 1=>'(' и так далее.

Помогите, пожалуйста, как корректно передать массив из хука в шаблон?

UPD: По-быстрому сделал костыльный вариант для одноуровневого массива. Буду рад предложениям как это сделать «академически верно» :)

class PluginLive_HookLive extends Hook
{
    public function RegisterHook()
    {
        $this->AddHook('template_header_banner_begin', 'Countdown');
    }

    public function Countdown()
    {
        r = array('foo'=>'bar', 'foo2'=>'bar2');
        ksort($r);
        return implode(',',$r);
    }
}


В шаблоне:
    {assign var="aLive" value=","|explode:$aLive}
    {assign var="sVar1" value=$aLive[0]}
    {assign var="sVar2" value=$aLive[1]}

Wmessage — обновился до 1.0.5


Внимание: Новая версия на модерации в каталоге. Как только пройдет проверку, изменится версия на 1.0.5

Описание плагина в предыдущем посте.

Что нового в версии 1.0.5:

— Изменения стиля. Теперь блок выглядит как на официальном сайте LiveStreet.
— Возможность скрытия сообщения и обратный показ (куки).
— Изменения в условиях использования плагина (за донейт в 5$ можно снять ссылку автора)

Временная демка: al.alushta.us/
Скрины:
Читать дальше →

Не работают ссылки в хуке

Добавляю хук (из ActionIndex) в плагине:
$this->AddHook("topics_list_show", "Prepend");

Добавляю метод:
function Prepend($aTopics) {
    $a = $aTopics["aTopics"];
    $a[] = array_shift(array_values($a)); // типа первый элемент добавляем в конец
    $aTopics["aTopics"] = $a;
}

Никаких изменений. Может так:
function Prepend(&$aTopics) {
    $a = $aTopics["aTopics"];
    $a[] = array_shift(array_values($a)); // типа первый элемент добавляем в конец
    $aTopics["aTopics"] = $a;
}

нет, тоже самое. И даже так:
function Prepend($aTopics) {
    $aTopics["aTopics"] = "";
}

ничего не меняется. Но если в ActionIndex.class.php изменить:
$this->Hook_Run('topics_list_show',array('aTopics'=>$aTopics));

на:
$this->Hook_Run('topics_list_show',array('aTopics'=>&$aTopics));

то все работает (копия первого топика добавляется в конец)!

В чем подвох?

Хук на выводе результата поиска

Коллеги, а есть ли хук (наподобие «topics_list_show») на выводе списка топиков в поиске, т.е. по пути /search/topics/…? Искал по исходникам, пока не смог найти, буду благодарен за подсказку.

И то же самое интересует для вывода комментариев в поиске (/search/comments/…).

Порядок пунктов меню (Решено)

В главном меню пункты располагаются в определенном порядке (Топики, Блоги, Люди, Активность).
То, что добавлено хуками (плагины) располагается в конце. Для них, как я понял, можно задать приоритет примерно так:
$this->AddHook('template_main_menu_item', 'ShowMenuItem',__CLASS__, цифра приоритета);
Но этот приоритет работает только для добавленных хуками пунктов в конце меню
Вопрос в следующем:
Читать дальше →

Добавления приватности.

Как сделать чтобы выполнялась запись в БД?
Вот код private.tpl:
{assign var="sidebarPosition" value='left'}
{include file='header.tpl'}


{include file='actions/ActionProfile/profile_top.tpl'}
{include file='menu.settings.tpl'}


{hook run='settings_private_begin'}

<form action="{router page='settings'}private/" method="POST" enctype="multipart/form-data">
	{hook run='form_settings_private_begin'}

	<input type="hidden" name="security_ls_key" value="{$LIVESTREET_SECURITY_KEY}" />
	
	<h3 class="header-sep">{$aLang.settings_private_about}</h3>

		<label><input {if $oUserCurrent->getSettingsPrivateStatus()}checked{/if} type="checkbox" id="settings_private_status" name="settings_private_status" value="1" class="input-checkbox" /> {$aLang.settings_private_status} | [{$aLang.settings_private_info}:100] </label>
		<label><input {if $oUserCurrent->getSettingsPrivateFreand()}checked{/if} type="checkbox" id="settings_private_freand" name="settings_private_freand" value="1" class="input-checkbox" /> {$aLang.settings_private_freand} | [{$aLang.settings_private_info}:500] </label>
		<label><input {if $oUserCurrent->getSettingsPrivatePhoto()}checked{/if} type="checkbox" id="settings_private_photo" name="settings_private_photo" value="1" class="input-checkbox" /> {$aLang.settings_private_photo} | [{$aLang.settings_private_info}:1000] </label>
		<label><input {if $oUserCurrent->getSettingsPrivateProfile()}checked{/if} type="checkbox" id="settings_private_profile" name="settings_private_profile" value="1" class="input-checkbox" /> {$aLang.settings_private_profile} | [{$aLang.settings_private_info}:10000] </label>

	{hook run='form_settings_private_end'}
	
	<br />
	<br />
	<button type="submit" name="submit_settings_private" class="button button-primary">{$aLang.settings_profile_submit}</button>
</form>

{hook run='settings_private_end'}

{include file='footer.tpl'}


И вот код из ActionSettings.class.php:
	protected function EventPrivate() {
		$this->sMenuItemSelect='settings';
		$this->sMenuSubItemSelect='private';

		$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_private'));

		/**
		 * Если отправили форму с настройками - сохраняем
		 */
        	isPost('submit_settings_private');
			$this->Security_ValidateSendForm();

			$this->oUserCurrent->setSettingsPrivateStatus( getRequest('settings_private_status') ? 1 : 0 );
			$this->oUserCurrent->setSettingsPrivateFreand( getRequest('settings_private_freand') ? 1 : 0 );
			$this->oUserCurrent->setSettingsPrivatePhoto( getRequest('settings_private_photo') ? 1 : 0 );
			$this->oUserCurrent->setSettingsPrivateProfile( getRequest('settings_private_profile') ? 1 : 0 );
			/**
			 * Запускаем выполнение хуков
			 */
			$this->Hook_Run('settings_private_save_before', array('oUser'=>$this->oUserCurrent));
			if ($this->User_Update($this->oUserCurrent)) {
				$this->Message_AddNoticeSingle($this->Lang_Get('settings_private_submit_ok'));
				$this->Hook_Run('settings_private_save_after', array('oUser'=>$this->oUserCurrent));
			} else {
				$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
			}

	}

Думаю почему то не выполняется это: ($this->User_Update($this->oUserCurrent))
Выдает ошибку: `system_error`

Контроль порядка выполнения хуков в шаблоне

Есть планин А, есть плагин Б. Оба плагина с помощью хука Hook_1 делают инъекцию кода в шаблон.
Как упорядочить очередность инъекции через один хук?

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