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

Default Post Content (доработка)

Recommended Posts

Добрый вечер!

Имеется классный компонент по созданию шаблонов создаваемых тем/сообщений. Хук очень классный и удобный, но есть один минус - устанавливать эти самые шаблоны можно только на каждый форум по отдельности, т.е. на каждый ID форума выставлять приходится заново. Это долго и не удобно.

 

Как его доработать, чтобы можно было выбрать сразу несколько форумов и разделов, зажав клавишу CTRL? Сейчас в выпадающем списке эта кнопка не работает.

 

post-59150-0-03905800-1469476795_thumb.png

 

https://invisionpower.com/files/file/4547-default-post-content/

 

HSC32 Default Post Content 3.2.2.rar

Share this post


Link to post
Share on other sites

Не подскажете? Проблема кроется в файле, отвечающем за подгрузку ID форумов - admin\applications\forums\modules_admin\defaultpost\forums.php, и в файле - admin\applications\forums\skin_cp\cp_skin_defaultpost.php, где ключ forum_name отвечает за выбор нужного форума.

 

Как бы разблокировать там выбор сразу нескольких форумов?

Share this post


Link to post
Share on other sites

forum_id идет отдельным полем, чтобы была поддержка мултиселекта нужно переписать полностью как минимум методы _forumForm, _saveForum.

 

\admin\applications\forums\modules_admin\defaultpost\forums.php

 

Найти

 

$formData['forumId'] = $this->registry->output->formDropdown('forumId',$forumList,$row['forum_id'],'forumId');

Заменить на

 

$formData['forumId'] = $this->registry->output->formMultiDropdown( "forumId[]", $forumList, array( $row['forum_id'] ), 5, "forumId" );

Метод _saveForum заменить на:

 

   protected function _saveForum()
   {
	$forumId = array_filter( array_map( 'intval', (array) $this->request['forumId'] ) );

	if( empty( $forumId ) )
	{
		$this->registry->output->showError('No forum selected','10DPC02');
	}

	$data = array('new_template_id' => intval($this->request['newTemplateId']),
				  'reply_template_id' => intval($this->request['replyTemplateId']));

	foreach( $forumId as $id )
	{
		$data['forum_id'] = $id;
		$this->DB->replace( 'defaultpost_templates_forums', $data, 'forum_id='.$id );
	}

	$this->registry->output->silentRedirect($this->settings['base_url'] . $this->html->form_code);
   }

 

Как эти правки будут работать в приложение я не знаю, поэтому все изменения делаете под свою ответственость.

  • Upvote 1

Share this post


Link to post
Share on other sites

Метод работает, большое спасибо! Но осталась пара багов приложения: при выборе шаблона целой категории, этот шаблон не распространяется на вложенные в категорию форумы. Но это мелочь.

 

Основной баг (недочет) - при сохранении конфигурации, выбранные форумы и категории удаляются из мульти-списка выбора, и вернуть их туда можно, только вручную удалив каждый форум из менюшки управления форумами в приложении... :( Как это починить? Т.е. чтобы при сохранении конфигурации, форумы не исчезали из списка, а оставались просто подсвеченными сереньким в списке, как в хуках например?

 

А то получается, единожды массово выбрать шаблон можно, а массово удалить (и перенастроить) уже нельзя.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
при генерации списка делайте дополнительный запрос (джоин) для выбора всех форумов с одинаковыми настройками.

Это как? Хотелось бы автоматизировать процесс... А то несколько десятков форумов вручную не хотелось бы перенастраивать, при редактировании шаблона...

Share this post


Link to post
Share on other sites

Несколько десятков не так много, а больше уже плохо для производительности форума. Чтобы автоматизировать как вам хочется нужно переписывать логику приложения. Примерно как это сделать я уже подсказал выше.

Share this post


Link to post
Share on other sites

при генерации списка делайте дополнительный запрос (джоин) для выбора всех форумов с одинаковыми настройками

Найти

 

$row = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'defaultpost_templates_forums', 'where' => 'forum_id='.$forumId));

Заменить на

 

       $this->DB->build(array('select' => 'z.*',
						   'from'   => array( 'defaultpost_templates_forums' => 't' ),
						   'where'  => 't.forum_id=' . $forumId,
						   'add_join' => array(
								array( 'from'  => array( 'defaultpost_templates_forums' => 'z' ),
									   'where' => 'z.new_template_id=t.new_template_id AND z.reply_template_id=t.reply_template_id',
									   'type'  => 'inner',
								)
						   )
						));
	$this->DB->execute();
	$row = $rows = array();

	while( $r = $this->DB->fetch() )
	{
		$rows[] = $r['forum_id'];

		if( empty( $row ) )
		{
			$row = $r;
		}
	}

 

Найти

 

       $formData['forumId'] = $this->registry->output->formMultiDropdown( "forumId[]", $forumList, array( $row['forum_id'] ), 5, "forumId" );

Заменить на

 

       $formData['forumId'] = $this->registry->output->formMultiDropdown( "forumId[]", $forumList, $rows, 5, "forumId" );
       $formData['forumId'] .= '<input type="hidden" name="_forumsId" values="'.implode( ',', $rows ).'">'."\n";

 

Найти

 

       foreach( $forumId as $id )
       {
           $data['forum_id'] = $id;
           $this->DB->replace( 'defaultpost_templates_forums', $data, 'forum_id='.$id );
       }

Ниже добавить

 

	$_forumsId = array_filter( array_map( 'intval', explode( ',', $this->request['_forumsId'] ) ) );

	if( count( $diff = array_diff( $_forumsId, $forumId ) ) )
	{
		$this->DB->delete('defaultpost_templates_forums', 'forum_id IN (' . implode( ',', $diff ));
	}

  • Upvote 1

Share this post


Link to post
Share on other sites

Странно, у меня вообще ничего после правок не изменилось :unsure:

 

При настройке и сохранении конфигурации, выбранные в списке форумы так и исчезают из списка...

Share this post


Link to post
Share on other sites

Нет возможности проверить, но по идее должно работать.

Share this post


Link to post
Share on other sites

Не работает, к сожалению. Разницы не заметил после редактирования файла.

Share this post


Link to post
Share on other sites

Выше

$this->DB->build(array('select' => '*', 'from' => 'defaultpost_templates_forums'));

Добавить

return $this->forumArray;

  • Upvote 1

Share this post


Link to post
Share on other sites

Вот сейчас заработало, огромное Вам спасибо! Именно то, что нужно, теперь можно как угодно, и сколько угодно форумов сразу настроить 046.gif

А это не сильно на производительности сайта скажется (если сразу на 50 форумов будут установлены шаблоны)?

Edited by Strategius

Share this post


Link to post
Share on other sites

А это не сильно на производительности сайта скажется (если сразу на 50 форумов будут установлены шаблоны)?

Не скажется.

  • Upvote 1

Share this post


Link to post
Share on other sites

Обнаружил очень неприятный баг с этим хуком - при создании темы шаблон успешно подгружается, но при редактировании текста в шаблоне, а именно вставке текста (посредством мышки или CTRL+V), текст мигает и если мы были скажем внизу абзаца, курсор мыши перемещает наверх, как будто бы шаблон перезагрузился и вставился вновь. Это очень неприятно и приходится каждый раз скроллить заново, и особенно неудобно, если шаблон длинный и мы были в середине или в конце текста :(

 

Пожалуйста помогите исправить этот баг.

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...