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

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

Recommended Posts

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

 

 

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>

 

 

Share this post


Link to post
Share on other sites

а) 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" в диалоге создания/изменения поля.

  • Upvote 1

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

/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'] );

 

 

  • Upvote 1

Share this post


Link to post
Share on other sites

siv1987,

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

 

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

Edited by Hecc

Share this post


Link to post
Share on other sites
Добавил, но выдает вот эту ошибку.

 

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

Но это

$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'] ) ) );

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

 

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

 

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

 

 

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

 

 

223.jpg

 

 

 

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

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

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

 

 

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

 

 

2234.jpg

 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Edited by Hecc

Share this post


Link to post
Share on other sites
Возможно ли вообще настроить коды которые будут работать в доп. полях ?

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

 

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

 

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

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

 

123.png

 

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

$parser->parse_nl2br = 0;

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

Share this post


Link to post
Share on other sites
Ritsuka, а смысл вешать на каждое по отдельности, если там на сколько я понял во всех доп полях есть ббкоды.

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

 

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

 

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

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

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