Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Strategius

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

Recommended Posts

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

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

 

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

 

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

 

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

 

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

  • Upvote 1

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

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

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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

Share this post


Link to post
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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...