Как сохранить совместимость при адаптации js шаблона (плагина) к js движка

Зачастую при адаптации шаблонов/плагинов так и тянутся руки поправить js в движке, что чревато потерей совместимости с другими шаблонами и плагинами.

Чтобы разобраться с этим вопросом и с целью самообразования, решил написать этот топик — может кому-то пригодится.

Какие есть варианты:
  1. Редактировать js-файлы прямо в движке
  2. Переписать (переопределить) нужный метод

Читать дальше →

Несколько вопросов.

Здравствуйте все! Хоть и запоздало, но поздравляю всех читающих с новым годом и желаю веселых праздников.
У меня возникло пара вопросов, но чтобы не создавать кучу топиков, я задам их тут.
1. Как можно сравнить две даты не используя unix timestamp?
Мне нужно убедиться, что указанная дата не в будущем, а в прошлом, а timestamp не подходит потому что проверяемая дата может быть гораздо раньше, чем 1 января 1970г. Или это ничего?

2. Что будет, если абсолютно полностью удалить функционал хуков? Опирается ли какой-нибудь функционал чистого ЛС на них, или же чистый ЛС их не использует?

3. Хочу полностью сменить «people» на «users», не только в настройках роутера, но и само название, потому что «people» хочу использовать под другие цели. Как я понимаю, нужно полностью сменить названия экшенов и энтити во всех файлах. Помню, что какой-то редактор умел это делать автоматически, но не помню какой. Можете подсказать?

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

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

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

Как передать результат выполнения метода плагина в шаблон? (Решено)

Доброго времени суток.
Есть задача — исполнить метод плагина и передать результат в шапку сайта.
Подскажите, пожалуйста, какие механизмы предусмотрены в LiveStreet 1.0 для этой задачи?
Большое спасибо всем откликнувшимся :)

UPD: Нашел информацию: livestreet.ru/blog/8566.html Разбираюсь в механизмах хуков.

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

Добавляю хук (из 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));

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

В чем подвох?

Как мне вывести блок в сайтбар.

Здравствуйте.
Хочу написать плагин который будет выводить в сайтбар блок с определенным содержимым. Как мне это сделать? Возможно ли при помощи хука вывести блок в сайтбар?
Сейчас делаю так
class PluginFloat_HookFloat extends Hook
{

    public function RegisterHook()
    {
            $this->AddHook('template_sidebarfloat', 'float_view');
    }

    public function float_view()
    {
        return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__) . 'block.float.tpl');
    }

}

в файлах шаблона, где нужен этот блок пишу
{hook run='template_sidebarfloat'}

ничего не происходит.
Как такое правильно сделать?

Viewer_GetBlocks не работает

повесил функцию на хук module_viewer_getblocks_after, дабы изменить список блоков (в функции используется Viewer_GetBlocks()). При выполнении возникает ошибка:
Fatal error: Maximum function nesting level of '100' reached, aborting! in ***/engine/classes/Hook.class.php on line 100
Как её исправить, или на какой хук надо вешать эту функцию?

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

Как сделать чтобы выполнялась запись в БД?
Вот код 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`

wall_add_validate... где он?

Здравствуйте, извините за столь глупый вопрос, но никак не могу найти этот хук. В коде профиля пользователя, там где евент добавления на стену записи есть подключение хука
$this->Hook_Run('wall_add_validate_before', array('oWall'=>$oWall));

Хук по идее отвечает за проверку поля записи на стене. Но где сам файл хука, я не знаю и найти его так и не смог. Искал поиском по файлам, искал просто в /classes/hooks/ но не повезло найти его.