Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Работа 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

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

Сейчас на странице 0

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

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.