Skip to content

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

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

Имеется классный компонент по созданию шаблонов создаваемых тем/сообщений. Хук очень классный и удобный, но есть один минус - устанавливать эти самые шаблоны можно только на каждый форум по отдельности, т.е. на каждый 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

Featured Replies

  • Author

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

 

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

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

 

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

  • Author

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

 

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

 

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

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

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

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

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

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

Найти

 

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

  • Author

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

 

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

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

  • Author

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

Выше

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

Добавить

return $this->forumArray;

  • Author

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

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

Edited by Strategius

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

Не скажется.

  • 5 months later...
  • Author

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

 

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

Никаких прыжков не замечаю.

Пробуйте другой браузер, пусть юзеры проверят.

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.