Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация 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.

Global New Topic Button (Доработка)

Опубликовано:

Здравствуйте.

Есть хук, добавляющий кнопку открытия новой темы на главную страницу. У него есть функция - при нажатии на эту кнопку гостем, всплывает браузерное окно с подсказкой.

 

Вопрос такой: можно ли это всплывающее окно заменить на нормальное форумное модальное или popup-сверстанное окно?

 

За всплывающую подсказку, насколько понял, отвечает строка:

 

$this->returnJsonArray( array( 'error' => $this->lang->words['hookNewTopic_no_forums'] ) );

 

Вот сам хук: globalNewTopicButton.xml

Рекомендованные сообщения

Опубликовано:

Это строчка отвечает за возврат ошибки из ajax запроса. За "браузерное окно", или скорее меню ипб, отвечает js код:

 

$('global_new_topic').addClassName('ipbmenu');
$('ipboard_body').insert( t.responseJSON['html'] );

var _newMenu = new ipb.Menu( $('global_new_topic'), $('global_new_topic_menucontent') );
_newMenu.doOpen();

В виде popup окна это будет выглядеть примерно так

 

new ipb.Popup( 'new_topic_popup', {
				type: 'pane',
				initial: t.responseJSON['html'],
				hideAtStart: false,
				w: '600px',
				h: 250
			});

Дальше окно дорабатывайте сами.

Опубликовано:
  • Автор

Спасибо! Но после замены кода, когда гость нажимает на вкладку "Создать тему", все равно вылазит браузерное окно... Его можно как-нибудь тоже на popup-заменить?

 

Вот такое вылазит: post-59150-0-88953200-1471772873_thumb.png

Опубликовано:

alert( t.responseJSON['error'] ) заменить на модальное окно, где контент t.responseJSON['error'].

Опубликовано:
  • Автор

Попробую... Аналогично вышеприведенному коду? Кстати, заметил баг: при закрытии popup-окна оно повторно не открывается, только после перезагрузки страницы. Можно ли пофиксить?

 

Upd. Пофиксил:

 

new ipb.Popup( 'new_topic_popup', {
                   type: 'modal',
                   modal: true,
                   initial: t.responseJSON['error'],
                   hideAtStart: false,
                   w: '600px',
                   h: 250
               });

Не подскажете, возможно ли заменить это окно на type: 'balloon'?

Изменено пользователем Strategius

Опубликовано:

Не подскажете, возможно ли заменить это окно на type: 'balloon'?

Да, можно задать любой тип.

Опубликовано:
  • Автор

А как, не подскажете? Использую такой код, но не работает...

 

new ipb.Popup( 'new_topic_popup', {
                   type: 'balloon',
                   stem: true,
                   attach: { target: $('new_topic_popup'), position: 'auto' },
                   initial: t.responseJSON['error'],
                   hideAtStart: false,
                   w: '600px',
                   h: 250
               });

Изменено пользователем Strategius

Опубликовано:

Аттач не тот , это элемент к которому прикрепляется окно

attach: { target: $('global_new_topic'), position: 'auto' },

Опубликовано:
  • Автор

Не пашет... Всплывает обычное модальное окно и не открывается при повторном открытии...

 

Код такой:

 

new ipb.Popup( 'new_topic_popup', {
                   type: 'balloon',
                   stem: true,
                   attach: { target: $('global_new_topic'), position: 'auto' },
                   initial: t.responseJSON['error'],
                   hideAtStart: false,
                   w: '600px',
                   h: 250
               });

Изменено пользователем Strategius

Опубликовано:

Хм, должно работать. С повторным открытием есть такая проблема.

Опубликовано:
  • Автор

Почему-то не работает... А не знаете, можно ли добавить свой стиль конкретному всплывающему окну? Т.е. прописать class="" и style="" в скрипт? Нужно поменять расположение кнопки закрытия в одном окне.

Опубликовано:

Почему-то не работает.

balloon не хочет работать если аттач находится на том же элементе на котором висит клик евент. Как вариант повесить на родительский элемент

 

attach: { target: $('global_new_topic').parentNode, position: 'auto' },

 

можно ли добавить свой стиль конкретному всплывающему окну?

Можно. первый аргумент это ид окна с добавлением в конце '_popup', либо можно в объекте опции указать класс через classname.

Опубликовано:
  • Автор

Вроде работает с этим аттачем, но ошибка с повторным открытием осталась... Увидел Ваше решение отсюда: http://ipbskins.ru/forum/topic14228.html/page__view__findpost__p__95303

 

Сделал по образцу:

 

var popup;
$('popupP').observe('mouseover', function(event) {
   var row = event.findElement('a.blclass');
   if(row){
       popup = new ipb.Popup('popup', {
                   type: 'balloon',
                   stem: true,
                   attach: { target: $('global_new_topic').parentNode, position: 'auto' },
                   hideAtStart: false,
                   initial: t.responseJSON['html'],
                   w: '600px',
                   h: 750
       });
   }
});
$('popupP').observe('mouseout', function(event) {
   var row = event.findElement('a.blclass');
   if(row){
       if(popup){
           popup.kill();
           popup = false;
       }
   }
});

 

Но окно почему-то вообще не открывается - ни впервые, ни повторно... в чем тут проблема, я понять не могу? Для гостей окно повторно открывается (initial: t.responseJSON['error'],), а для пользователей (initial: t.responseJSON['html'],) вообще ни в какую... Как пофиксить, не подскажете?

Изменено пользователем Strategius

Опубликовано:

Его надо адаптировать под конкретный случай учитывая все ид элементов. В коде выше я этого не вижу, он просто тупо скопирован. Кроме того он для несколько элементов с срабатыванием при наведение.

Опубликовано:
	document.observe("dom:loaded", function()
	{
		$('global_new_topic').observe('click', function(e)
		{
			Event.stop(e);
			if ( !$('new_topic_popup') )
			{
				var url = ipb.vars['base_url'] + 'app=forums&module=ajax&section=forums&do=fetchNewTopicForums';

				new Ajax.Request
				(
					url,
					{
						method: 'post',
						evalJSON: 'force',
						parameters: {
							secure_key: ipb.vars['secure_hash']
						},
						onSuccess: function(t)
						{
							var popup = new ipb.Popup( 'new_topic',
							{
								type: 'balloon',
								stem: true,
								attach: {target: $('global_new_topic').parentNode, position: 'auto'},
								initial: t.responseJSON['error'] ? t.responseJSON['error'] : t.responseJSON['html'],
								hideAtStart: false,
								w: '600px',
								h: 250
							});
							popup.wrapper.style.left = parseInt(popup.wrapper.style.left)-35+'px';
						}
					}
				);
			}
			else
			{
				$('new_topic_popup').show();
			}
		});
	});

Опубликовано:
  • Автор

Спасибо Вам огромное, наконец работает! Правда там маленький косяк остался - при первом открытии окно закрывается тапом по экрану и при нажатии на кнопку закрытия, а при повторном открытии - по тапу по экрану не закрывается...

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

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.