Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Strategius

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

Поделиться сообщением


Ссылка на сообщение

Не подскажете? Проблема кроется в файле, отвечающем за подгрузку 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);
   }

 

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Найти

 

$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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Выше

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

Добавить

return $this->forumArray;

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
07/29/16 16:19 (изменено)

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

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

Изменено пользователем Strategius

Поделиться сообщением


Ссылка на сообщение

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

Не скажется.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...