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