Jump to content

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


Strategius
 Share

Recommended Posts

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

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

 

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

 

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

 

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

 

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

Link to comment
Share on other sites

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

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

  • Upvote 1
Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

Попробую... Аналогично вышеприведенному коду? Кстати, заметил баг: при закрытии 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
Link to comment
Share on other sites

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

 

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
Link to comment
Share on other sites

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

 

Код такой:

 

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

 

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

 

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

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

Link to comment
Share on other sites

Вроде работает с этим аттачем, но ошибка с повторным открытием осталась... Увидел Ваше решение отсюда: 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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

  • Upvote 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...