Log in

View Full Version : Formatting in user-defined template


thalamus
07-26-2008, 07:48 AM
I've come across a problem when trying to output a formatted series of fields into a post, in that a 'newline' (or a <br /> doesn't appear to be recognized when the string is submitted.

Briefly; I've created a plugin that allows for a new thread post to have its own template - let's say its for a review. The new template is being called by the relevant hook (newthread_post_start), and the template has several fields in addition to the main comment box (i.e. name of book, author, date of publication, date reviewed, rating). These field values are being picked up correctly, and what I want to do is to collate them all, and place them into the $vbulletin->GPC['message'] store. In order to do that, I pick up the field values after the form is submitted and assign them to variables that are concatenated, but each with a newline for spacing. For example:

$newline = chr(13) . chr(10);
$new_message = '' . $rev_title . '' . $newline;
$new_message .= '' . $rev_author . '' . $newline;
$new_message .= '' . $rev_date . '' . $newline . $newline;
$new_message .= '' . $rev_initpara . '' . $newline . $newline;
$new_message .= $rev_message . $newline . $newline;
$new_message .= 'Full Review Here (' . $rev_link . ')' . $newline;
// and set it as the main message text from the editor as an all-in-one for processing by vBulletin core
$vbulletin->GPC['message'] = $new_message;

Obviously, $rev_message contains $vbulletin->GPC['message'] which is brought across from the hook, and is the main wysiwyg/editor text content.

As you can see, the above assigns $newline with the character values of a lf and cr, but this does not output. I've also tried to substitute "<br />" and "\r\n" into $newline, all to no avail (in fact the saved post simply displays the <br /> or \r\n as characters).

Does anyone know what the lf/cr values are that are interpreted properly by the core function in order for this to output correctly into a post?

Sorry if some of this doesn't make sense; it's quite a frustrating problem :(

TIA for your assistance

Opserty
07-26-2008, 07:52 AM
$newline = PHP_EOL;

(No need really for that line, just use PHP_EOL in place of the variable).

thalamus
07-26-2008, 08:05 AM
Thanks for the response, Opserty... unfortunately all that does is outputs the text PHP_EOL instead of the line breaks :(

Opserty
07-26-2008, 08:08 AM
What is the exact code you are using? (That you've changed it too now)

thalamus
07-26-2008, 08:14 AM
I've tried both:

$newline = PHP_EOL;
retaining the variable in the code, and also replacing the variable at each instruction:

$new_message = '' . $rev_title . '' . PHP_EOL;
$new_message .= '' . $rev_author . '' . PHP_EOL;
$new_message .= '' . $rev_date . '' . PHP_EOL . PHP_EOL;
$new_message .= '' . $rev_initpara . '' . PHP_EOL . PHP_EOL;
$new_message .= $rev_message . PHP_EOL . PHP_EOL;
$new_message .= 'Full Review Here (' . $rev_link . ')' . PHP_EOL;
// and set it as the main message text from the editor as an all-in-one for processing by vBulletin core
$vbulletin->GPC['message'] = $new_message;
Both display the text PHP_EOL after the field values.

Opserty
07-26-2008, 08:36 AM
Ok undo those changes you made and try:

if($vbulletin->GPC['wysiwyg'])
{
$newline = '<br>';
}
else
{
$newline = "\n";
}
// Rest of your code here...

thalamus
07-26-2008, 08:58 AM
:up:

This seems to have done the trick; I'll now wait for the users to make posts and check, but from the looks of it, it's now working :)

Many thanks for your assistance on this one, opserty; much appreciated :)

Opserty
07-26-2008, 09:44 AM
No problem, you could shorten it to a single line like:

$newline = ($vbulletin->GPC['wysiwyg']) ? '<br>' : "\n";

thalamus
07-26-2008, 04:20 PM
indeed... already coded the conditional shortcut :) thanks again :)