Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Не работает хук для кастомного шаблона

Featured Replies

Posted

Приветствую.

Решил изменить шапку сайта. Как рекомендуют на офф. сайте invision, сделал свой шаблон (header) в отдельном файле-шаблоне и заменил им оригинал. В globalTemplate заменил это:

<div id='ipsLayout_header' class='ipsClearfix'>
	<header>
		<div class='ipsLayout_container'>
			{template="logo" app="core" group="global" params=""}
			{{if !\in_array('ipsLayout_minimal', \IPS\Output::i()->bodyClasses )}}
				{template="userBar" app="core" group="global" params=""}
				{template="mobileNavigationIcon" app="core" group="global" params=""}
			{{endif}}
		</div>
	</header>
	{template="navBar" app="core" group="global" params=""}
	{{if !\in_array('ipsLayout_minimal', \IPS\Output::i()->bodyClasses )}}{template="mobileNavBar" app="core" group="global" params=""}{{endif}}
</div>

на это:

{template="header" app="core" location="front" group="_myheader" params=""}

У меня стоит плагин Clear Notifications, который добавляет кнопку очистки уведомлений в юзербар в шапке.

firefox_2023-06-21_20-58-53.jpg.a017072ebdc7ef671a585c5112b3e449.jpg

Это скрин из стандартной темы.

Хук у плагина простой:

/* !Hook Data - DO NOT REMOVE */
public static function hookData() {
 return array_merge_recursive( array (
  'userBar' => 
  array (
    0 => 
    array (
      'selector' => '#elFullNotifications_menu > div.ipsMenu_footerBar.ipsType_center',
      'type' => 'add_inside_end',
      'content' => '{template="clearNotificationsLink" app="core" group="plugins" location="global"}',
    ),
  ),
), parent::hookData() );
}
/* End Hook Data */

Но шаблон userBar у меня тоже свой, в отдельном файле (_userBar), т.к. я добавил туда одну кнопку, но див по селектору #elFullNotifications_menu > div.ipsMenu_footerBar.ipsType_center присутствует. И хук не добавляет кнопку.

Вопрос: можно ли добавить кнопку очистки в кастомный шаблон через хук , а не через правку шаблона _userBar, напрямую прописав туда код шаблона кнопки из плагина?

'_userBar' => 
  array (
    0 => 
    array (
      'selector' => '#elFullNotifications_menu > div.ipsMenu_footerBar.ipsType_center',
      'type' => 'add_inside_end',
      'content' => '{template="clearNotificationsLink" app="core" group="plugins" location="global"}',
    ),
  ),

так не работает.

Edited by edmsl

1 час назад, edmsl сказал:

так не работает.

И не будет, после установки плагина данные о хуке вносятся в бд core_hooks
1. Ты изменил шаблон, но не изменил класс который хукает плагин. Твой плагин скорее всего хукает класс \IPS\Theme\class_core_front_global но твой шаблон как минимум находится в другой группе шаблонов
2. После любых подобных правок не в dev режиме, нужно очистить системные кэши

В xml версии плагина есть данные о хуках, например:

<hook type="S" class="\IPS\Theme\class_core_front_global" filename="themehookUserBar">

 

  • Author

Exception Спасибо. Да, так и есть. class_core_front_global.

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

Как говорится, из двух зол выбираем меньшее. Придется править оригинальные шаблоны.

3 часа назад, edmsl сказал:

Придется править оригинальные шаблоны.

Правильнее будет сделать плагин и при помощи хуков изменять шаблоны темы.
Если напрямую изменять шаблоны, то при обновлении ips он их не обновит, что может привести к ошибкам и т.д.

  • Author
2 минуты назад, Exception сказал:

Если напрямую изменять шаблоны, то при обновлении ips он их не обновит,

Кто-то писал, что при обновлении ips будет предложено выбрать, какой код добавить в шаблон, текущий или новый. Или это не то?

6 минут назад, Exception сказал:

Правильнее будет сделать плагин и при помощи хуков изменять шаблоны темы.

Тогда придется для все плагины изменять, которые связаны с измененными шаблонами.

На самом деле мне больше нравится идея создания отдельных шаблонов для изменений, но вот эти вот проблемы с плагинами удручают.

12 минут назад, edmsl сказал:

Кто-то писал, что при обновлении ips будет предложено выбрать, какой код добавить в шаблон, текущий или новый. Или это не то?

нет. это вроде при обновлении стиля такое происходит. к примеру у вас левый стиль, не дефолт. и он у вас правленый своими кодами и т.д

и при обновлении стиля оно будет предлагать замену кода

  • Author
7 часов назад, Exception сказал:

Правильнее будет сделать плагин и при помощи хуков изменять шаблоны темы.

Если я правильно все понимаю, то имеется ввиду перенос в хуки какого-то нового, созданного мной, плагина всех тех изменений, что я сделал в теме путем создания новых файлов шаблонов? Т.е. я удаляю все те новые шаблоны, а их код реализую через плагин?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.