June 2, 201114 yr Через дополнительные поля, сделал отображение поля в профиле через небольшое всплывающее окно. Теперь возникла потребность подключить к этому всплывающему окну ВВ-коды. Сколько я уже пытался делать, нужного результата я так и не достиг. Подключал и родные ВВ-коды и внешние, а они все равно не хотят отображаться. Собственно, как включить работу 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>
June 3, 201114 yr а) 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" в диалоге создания/изменения поля.
June 3, 201114 yr Открываете на правку файл /admin/sources/classes/customfields/profileRields.php, находите строки:Увы. Вопрос про вторую версию форума.
June 3, 201114 yr Увы. Вопрос про вторую версию форума. Тьфу. Вечно попадаю на это :) Ну, как вариант, обновиться и сделать) Ну или, если кто в двойке разбирается, пусть портирует вниз)
June 3, 201114 yr Author Спасибо за помощь, я задумаюсь над переходом на более новую версию форума.Просто я с 2.3.6 уже 2.5 года работаю, она как родная уже, по этому если это возможно было бы неплохо реализовать это именно на ней.
June 4, 201114 yr /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'] );
June 4, 201114 yr Author siv1987, Fatal error: Call to a member function pre_display_parse() on a non-object in /***/****/*****/******/******/*******/sources/ipsclass.php on line 6092 Добавил, но выдает вот эту ошибку. Edited June 4, 201114 yr by Hecc
June 4, 201114 yr Добавил, но выдает вот эту ошибку. Ошибки никакой не должно быть, код вполне рабочий. Но это$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'] ) ) );
June 4, 201114 yr Author Вроде бы ошибка пропала, но ББ коды так и не работают. Вот участок редактируемого кода : //----------------------------------------- // 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'] ); } } } А вот результат :
June 4, 201114 yr Author Заменил мой код на :$member['custom_fields'] = $parser->pre_display_parse( $parser->pre_db_parse( trim( $member['custom_fields'] ) ) ); Коды начали отображаться, это конечно не может не радовать.Но, отображаются они не совсем так как хотелось бы (скрин под спойлером) Например тег не отображается вовсе, а тег вылазит за пределы дива.Где бы их можно было настроить что бы они выглядели должным образом ?Возможно ли вообще настроить коды которые будут работать в доп. полях ? Потому что многие из кодов, например, спойлер или цитата, там вообще не уместны. Еще появились странные "пропуски" между дополнительными полями.
June 5, 201114 yr @siv1987, зря вы на все коды вообще вешаете парсер. Неужели в двойке нельзя избирательно распарсить какое-то одно поле? Оттуда и все вышеописанные баги...
June 5, 201114 yr Author Ritsuka, Возможно у вас есть какие-то предположения, как можно эти баги убрать ?Или движок 2.*.* настолько сильно отличается от 3.*.* ? Edited June 5, 201114 yr by Hecc
June 6, 201114 yr Возможно ли вообще настроить коды которые будут работать в доп. полях ?Если только вы напишете свой парсер который будет разбирать нужные вам бб-коды. Встроенный такой возможностью не обладает. siv1987, зря вы на все коды вообще вешаете парсер. Неужели в двойке нельзя избирательно распарсить какое-то одно поле? Оттуда и все вышеописанные баги... Ritsuka, а смысл вешать на каждое по отдельности, если там на сколько я понял во всех доп полях есть ббкоды. Но можно и избирательно, поля идентифицируются по ид. Багов таких особых я здесь не вижу. Лишние бр-ы это от того что из текстареа заносятся переводы строки которые подключенным парсером заменяются на бр. Лечится оно довольно просто - $parser->parse_nl2br = 0; А то что у ТС не отображается какой-то тег (хотя нам еще неизвестно, что он подразумевает под его отображением), или span цвета плывет за пределами его верстки, не считаю за багами парсера.
June 6, 201114 yr Author Всем спасибо за помощь.Уже все настроил, все работает. Правда, теперь осталось настроить что бы юзерам не приходилось указывать переносы вручную ибо после того как я добавил :$parser->parse_nl2br = 0;пропали не только переносы которые появились из-за подключенных парсеров, но и те которые были в контенте дополнительных полей.
June 6, 201114 yr Ritsuka, а смысл вешать на каждое по отдельности, если там на сколько я понял во всех доп полях есть ббкоды. Первое, что пришло бы мне на ум, увидев такое решение - поставить в самом первом поле открывающий spolier, а в последнем - закрывающий, и таким образом здорово испортить админу форума настроение :) Т.е. я веду мысль не к избирательности применения (что, кстати, тоже полезно), а к отдельной обработке полей. Или движок 2.*.* настолько сильно отличается от 3.*.* ? Тройка переписана почти целиком. И я никогда не работал с двойкой всерьез, увы, поэтому не могу помочь иначе кроме как общими советами)
August 13, 201213 yr а) 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-коды работали не только на форуме, но и в профиле? а тут не катит:
Через дополнительные поля, сделал отображение поля в профиле через небольшое всплывающее окно.
Теперь возникла потребность подключить к этому всплывающему окну ВВ-коды.
Сколько я уже пытался делать, нужного результата я так и не достиг. Подключал и родные ВВ-коды и внешние, а они все равно не хотят отображаться.
Собственно, как включить работу 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>