View Single Post
  #1  
Old 05-31-2005, 12:19 AM
futureal futureal is offline
 
Join Date: Feb 2002
Location: Del Mar, CA, USA
Posts: 556
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Creating a working [PRE] tag in vB3

I post a lot of plain text results on my forums that use courier fonts, and it's much easier to have them use preformatted text rather than a code/php box.

Adding the [PRE] tag itself is a very simple mini-hack. You just fire up \includes\functions_bbcodeparse.php and make two additions. Here is what I did.

In the function fetch_bbcode_definitions, add the following in whichever bracketed section you deem appropriate (I used ALLOW_BBCODE_BASIC):

Code:
    // [PRE]
    $bbcodes['custom']['find']['[pre]'] = '#\[pre\](<br>|<br />|\r\n|\n|\r)??(.*)(<br>|<br />|\r\n|\n|\r)??\[/pre\]#esiU';
    $bbcodes['custom']['replace']['[pre]'] = "handle_bbcode_pre('\\2')";
    $bbcodes['custom']['recurse']['pre'][0] = array('handler' => 'handle_bbcode_pre');
Somewhere else in the file, add the function handle_bbcode_pre as so:

Code:
// ###################### Start bbcodehandler_pre #######################
function handle_bbcode_pre($text)
{

  $textfind = array(
    '<br>',   // <br> to nothing
    '<br />'  // <br /> to nothing
  );

  $textreplace = array(
    '',
    ''
  );
  
  $newtext = "<pre style=\"margin: 0;\">" . trim(str_replace($textfind,$textreplace,$text)) . "</pre>";
  
  return $newtext;

}
Okay, so far so good. Works like a charm with the standard text editor. However, when you EDIT an existing post that contains a PRE tag using the WYSIWYG editor, the formatting is lost when the editor loads.

Does anybody know why this is, or how it may be fixed? Or have any other feedback towards doing this?

For what it's worth, the reason you cannot simply make a custom PRE tag via the Admin CP is that nl2br() gets called on the text and a BR tag gets inserted at every newline. I also know that you could just use some CSS to force the BR tags in a PRE block to display: none, but I am wanting to find a solution to the above problem for my own curiosity, I guess.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01249 seconds
  • Memory Usage 1,765KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_code
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete