Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Работа BB-кодов в дополнительных полях (2.3.6)

Через дополнительные поля, сделал отображение поля в профиле через небольшое всплывающее окно.

 

 

123213.png

 

 

Теперь возникла потребность подключить к этому всплывающему окну ВВ-коды.

Сколько я уже пытался делать, нужного результата я так и не достиг. Подключал и родные ВВ-коды и внешние, а они все равно не хотят отображаться.

 

Собственно, как включить работу BB кодов в этих полях ? Хотя бы тех, которые отвечают за форматирование текста -

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

 

Сам код дополнительного поля:

 

 

<style type="text/css">

.tp {

background:#2a2a2a;

overflow:hidden;

border: solid 0px;

text-align: center;

}

.tp b{

border:black 2px;

font-weight:normal;

text-align: left;

}

.tp b span {display:none;

text-align: left;}

 

.tp b:hover {

border: solid 0px red;

text-align: left;

position:inherit;

}

.tp b:hover span {

margin-top:-30px;

background:#2a2a2a;

color:#FFF;

display:block;

padding:5px;

width:300px;

margin-left:169px;

position:absolute;

text-decoration: none;

text-align: left;

z-index:1;

border: solid 1px black;

}

<!--[if IE 6]>

<style type="text/css">

.tp b {behavior:url(hover.htc);}

.tp .hover {

border-bottom:red 1px dotted;

color:red;

}

.tp .hover span

background:#212f3a;

color:#7b7b7b;

display:block;

padding:7px;

margin-left:20px;

position:absolute;

text-decoration: none;

text-align: center;

z-index:5;

border: solid 1px black;

}

</style>

<![endif]-->

 

</style>

<div id="123"><span class="tp" style="z-index:0;">

<b><img src="http://roleplay.mandalorians.net.ua/images/skills.png" alt=""><span>{content}

</span></b> </span></div>

 

 

Рекомендованные сообщения

а) CSS уберите оттуда. Вы дублируете этот код на странцие 100500 раз возле каждого вывода поля. Переместите его в глобальный css каждого скина.

 

б) Встроенной такой возможности нет, и через шаблоны такого тоже не сделать, увы. Могу подсказать, где и что на месте подправить, чтобы получить желаемое. Если интересно - го под кат.

 

Открываете на правку файл /admin/sources/classes/customfields/profileRields.php, находите строки:

				if( $current_value || $current_value == '0' )
			{
				/* Get the format */

 

Заменяете на:

				if( $current_value || $current_value == '0' )
			{
				if($field->raw_data['pf_key'] == 'название_нужного_вам_ключа_поля') {
				    IPSText::getTextClass('bbcode')->parse_html 				= 0;
				    IPSText::getTextClass('bbcode')->parse_nl2br				= 1;
				    IPSText::getTextClass('bbcode')->parse_bbcode				= 1;
				    IPSText::getTextClass('bbcode')->parse_smilies			= 1;
				    IPSText::getTextClass('bbcode')->parsing_section		= 'forums';					
				    $current_value	= IPSText::getTextClass('bbcode')->preDisplayParse( $current_value );			              
				}
				/* Get the format */

 

Название нужного вам ключа поля - это "Field Key" в диалоге создания/изменения поля.

Открываете на правку файл /admin/sources/classes/customfields/profileRields.php, находите строки:

Увы. Вопрос про вторую версию форума.

Увы. Вопрос про вторую версию форума.

Тьфу. Вечно попадаю на это :)

 

Ну, как вариант, обновиться и сделать) Ну или, если кто в двойке разбирается, пусть портирует вниз)

  • Автор

Спасибо за помощь, я задумаюсь над переходом на более новую версию форума.

Просто я с 2.3.6 уже 2.5 года работаю, она как родная уже, по этому если это возможно было бы неплохо реализовать это именно на ней.

/sources/ipsclass.php

 

 

 

Найти:

		if ( $this->custom_fields )
		{

 

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

			require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
			$parser                      =  new parse_bbcode();
			$parser->ipsclass            =& $this;
			$parser->allow_update_caches =  0;
			$parser->parse_bbcode		 = 1;
			$parser->parse_smilies		 = 0;
			$parser->parse_html		 	 = 0;

 

Найти:

						$member['custom_fields'] .= "\n".$this->custom_fields->method_format_field_for_topic_view( $i );
					}
				}

 

После добавить:

				$member['custom_fields'] = $parser->pre_display_parse( $member['custom_fields'] );

 

 

  • Автор

siv1987,

Fatal error: Call to a member function pre_display_parse() on a non-object in /***/****/*****/******/******/*******/sources/ipsclass.php on line 6092

 

Добавил, но выдает вот эту ошибку.

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

Добавил, но выдает вот эту ошибку.

 

Ошибки никакой не должно быть, код вполне рабочий.

Но это

$member['custom_fields'] = $parser->pre_display_parse( $member['custom_fields'] );

 

замените на это

$member['custom_fields'] = $parser->pre_display_parse( $parser->pre_db_parse( trim( $member['custom_fields'] ) ) );

  • Автор

Вроде бы ошибка пропала, но ББ коды так и не работают.

 

 

Вот участок редактируемого кода :

 

		
	//-----------------------------------------
	// Profile fields stuff
	//-----------------------------------------

	$member['custom_fields'] = "";

	if ( $this->vars['custom_profile_topic'] == 1 AND $custom_fields == 1 )
	{
		if( !is_object( $this->custom_fields ) )
		{
			require_once( ROOT_PATH.'sources/classes/class_custom_fields.php' );
			$this->custom_fields = new custom_fields( $this->DB );

			$this->custom_fields->member_id  = $this->member['id'];
			$this->custom_fields->cache_data = $this->cache['profilefields'];
			$this->custom_fields->admin      = intval($this->member['g_access_cp']);
			$this->custom_fields->supmod     = intval($this->member['g_is_supmod']);
		}

		if ( $this->custom_fields )
		{   require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
                $parser                      =  new parse_bbcode();
                $parser->ipsclass            =& $this;
                $parser->allow_update_caches = 0;
                $parser->parse_bbcode        = 1;
                $parser->parse_smilies       = 0;
                $parser->parse_html          = 0;


			$this->custom_fields->member_data = $member;
	    	$this->custom_fields->admin        = intval($this->member['g_access_cp']);
	    	$this->custom_fields->supmod       = intval($this->member['g_is_supmod']);
	    	$this->custom_fields->member_id	   = $this->member['id'];
			$this->custom_fields->init_data();
			$this->custom_fields->parse_to_view( 1 );

			if ( count( $this->custom_fields->out_fields ) )
			{
				foreach( $this->custom_fields->out_fields as $i => $data )
				{
					if ( $data )
					{
						$member['custom_fields'] .= "\n".$this->custom_fields->method_format_field_for_topic_view( $i );
					}
				}
			    $member['custom_fields'] = $parser->pre_display_parse( $member['custom_fields'] );
			}    
		}
	}

 

 

А вот результат :

 

 

Untitled-1_copy22.jpg

 

 

  • Автор

Заменил мой код на :

$member['custom_fields'] = $parser->pre_display_parse( $parser->pre_db_parse( trim( $member['custom_fields'] ) ) );

 

Коды начали отображаться, это конечно не может не радовать.

Но, отображаются они не совсем так как хотелось бы (скрин под спойлером)

 

 

 

223.jpg

 

 

 

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

Где бы их можно было настроить что бы они выглядели должным образом ?

Возможно ли вообще настроить коды которые будут работать в доп. полях ? Потому что многие из кодов, например, спойлер или цитата, там вообще не уместны.

 

 

Еще появились странные "пропуски" между дополнительными полями.

 

 

2234.jpg

 

 

@siv1987, зря вы на все коды вообще вешаете парсер. Неужели в двойке нельзя избирательно распарсить какое-то одно поле? Оттуда и все вышеописанные баги...

  • Автор

Ritsuka, Возможно у вас есть какие-то предположения, как можно эти баги убрать ?

Или движок 2.*.* настолько сильно отличается от 3.*.* ?

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

Возможно ли вообще настроить коды которые будут работать в доп. полях ?

Если только вы напишете свой парсер который будет разбирать нужные вам бб-коды. Встроенный такой возможностью не обладает.

 

siv1987, зря вы на все коды вообще вешаете парсер. Неужели в двойке нельзя избирательно распарсить какое-то одно поле? Оттуда и все вышеописанные баги...

 

Ritsuka, а смысл вешать на каждое по отдельности, если там на сколько я понял во всех доп полях есть ббкоды. Но можно и избирательно, поля идентифицируются по ид. Багов таких особых я здесь не вижу. Лишние бр-ы это от того что из текстареа заносятся переводы строки которые подключенным парсером заменяются на бр. Лечится оно довольно просто - $parser->parse_nl2br = 0; А то что у ТС не отображается какой-то тег (хотя нам еще неизвестно, что он подразумевает под его отображением), или span цвета плывет за пределами его верстки, не считаю за багами парсера.

  • Автор

Всем спасибо за помощь.

Уже все настроил, все работает.

 

123.png

 

Правда, теперь осталось настроить что бы юзерам не приходилось указывать переносы вручную ибо после того как я добавил :

$parser->parse_nl2br = 0;

пропали не только переносы которые появились из-за подключенных парсеров, но и те которые были в контенте дополнительных полей.

Ritsuka, а смысл вешать на каждое по отдельности, если там на сколько я понял во всех доп полях есть ббкоды.

Первое, что пришло бы мне на ум, увидев такое решение - поставить в самом первом поле открывающий spolier, а в последнем - закрывающий, и таким образом здорово испортить админу форума настроение :)

 

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

 

Или движок 2.*.* настолько сильно отличается от 3.*.* ?

Тройка переписана почти целиком. И я никогда не работал с двойкой всерьез, увы, поэтому не могу помочь иначе кроме как общими советами)

  • 1 год спустя...

а) CSS уберите оттуда. Вы дублируете этот код на странцие 100500 раз возле каждого вывода поля. Переместите его в глобальный css каждого скина.

 

б) Встроенной такой возможности нет, и через шаблоны такого тоже не сделать, увы. Могу подсказать, где и что на месте подправить, чтобы получить желаемое. Если интересно - го под кат.

 

 

Открываете на правку файл /admin/sources/classes/customfields/profileRields.php, находите строки:

				if( $current_value || $current_value == '0' )
			{
				/* Get the format */

 

Заменяете на:

				if( $current_value || $current_value == '0' )
			{
				if($field->raw_data['pf_key'] == 'название_нужного_вам_ключа_поля') {
				    IPSText::getTextClass('bbcode')->parse_html 				= 0;
				    IPSText::getTextClass('bbcode')->parse_nl2br				= 1;
				    IPSText::getTextClass('bbcode')->parse_bbcode				= 1;
				    IPSText::getTextClass('bbcode')->parse_smilies			= 1;
				    IPSText::getTextClass('bbcode')->parsing_section		= 'forums';					
				    $current_value	= IPSText::getTextClass('bbcode')->preDisplayParse( $current_value );			              
				}
				/* Get the format */

 

Название нужного вам ключа поля - это "Field Key" в диалоге создания/изменения поля.

 

мне помог ваш совет, сори что будоражу старую тему, тем более не для тройки, но как сделать так, чтобы bb-коды работали не только на форуме, но и в профиле?

 

4b74cf14d3df.png

 

а тут не катит:

ef4ae1a15630.png

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.