Skip to content

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

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

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

 

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

 

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

 

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

 

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

Featured Replies

Это строчка отвечает за возврат ошибки из 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
			});

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

  • Author

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

 

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

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

  • Author

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

 

Upd. Пофиксил:

 

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

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

Edited by Strategius

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

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

  • Author

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

 

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
               });

Edited by Strategius

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

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

  • Author

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

 

Код такой:

 

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
               });

Edited by Strategius

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

  • Author

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

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

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

 

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

 

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

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

  • Author

Вроде работает с этим аттачем, но ошибка с повторным открытием осталась... Увидел Ваше решение отсюда: 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'],) вообще ни в какую... Как пофиксить, не подскажете?

Edited by 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();
			}
		});
	});

  • Author

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

Create an account or sign in to comment

Account

Navigation

Search

Search

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.