vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 2.x Beta Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=5)
-   -   Preview the first post in a thread first (beta defunct). (https://vborg.vbsupport.ru/showthread.php?t=33423)

Parker Clack 12-08-2001 10:00 PM

One of the things that will happen when you put your mouse pointer on to a hyperlink is put text in a popup box if you put this information into a title line.

For example:

< a href="http://www.yourplace.com" title="your text here">Here ya go< /a >

(the above is just an example to play with without the spaces in the brakets to see how this works)

At any rate. In your forumdisplay.php file right above:

Code:

eval("\$forumdisplaybits .= \"".gettemplate('forumdisplaybit')."\";");
put

Code:

$post=$DB_site->query_first("SELECT pagetext FROM post WHERE threadid=$thread[threadid] ORDER BY postid");
    $page=iif(strlen($post[pagetext])>500,substr($post[pagetext],0,500)."...",$post[pagetext]);
    $page=bbcodeparse2($page,1,1,1,1);
    $page=strip_tags($page);

Then in your forumdisplaybit template

look for

Code:

<a href="showthread.php?s=$session[sessionhash]&threadid=$thread[threadid]">$thread[title]</a>
and replace this with:

Code:

<a href="showthread.php?s=$session[sessionhash]&threadid=$thread[threadid]" title="$page">$thread[title]</a>
The next time you get on your board and open the forumdisplay.php file and list the thread titles in your forums if you put your mouse pointer on the hyperlink to the post you will get a brief display of the first post in the thread to use as a preview.

You can play around with the order size of the pagetext from 500 to whatever you want to have displayed.

If anyone can think of anything to add to this please do. I guarantee I am a very limited coder.

Many thanks go to Chen and Bira for helping me with the coding.

Parker

Parker Clack 12-09-2001 12:20 PM

Note:

I have found that if the post has quotes in it that it will affect the display of the hyperlink on the forumdisplay. You have to change this to single quotes instead of double quotes.

Any work around for that?

Parker

Wayne Luke 12-09-2001 01:11 PM

Doesn't this add one query for every thread shown in forumdisplay. At the default that is 15 new queries shown for every forumdisplay page which can add up a to a lot of resources.

A better solution would be to:

1) Add a new "preview" field to the thread table.
2) Move the code that generates the snippet to the newthread.php file.
PHP Code:

    $page=iif(strlen($message>500,substr($message,0,500)."...",$message); 

Place that above the line that begins:
PHP Code:

      $DB_site->query("INSERT INTO thread 

Alter that same INSERT query to insert the preview as well.

4) Alter the statement that begins with:
PHP Code:

$threads=$DB_site->query(

so that is pulls the preview from the database as well.

5) Finally in forumdisplay.php you add the other two lines where you had them to begin with:
PHP Code:

    $page=bbcodeparse2($page,1,1,1,1); 
    
$page=strip_tags($page); 

This will give you now new queries while pulling the thread information.

If you have dot folders turned on you can edit the $dotuserid string to pull the message information and get by with less coding and still not have any new queries at display time.

Symbian.info 12-09-2001 07:17 PM

??? What is the good en complete hack? I am lost now..

TheComputerGuy 12-09-2001 08:00 PM

well I think the orginal hack is a great thing, and I think wLuke is saying that for larger boards this would be a good thing to modify...I have it on my test board, and Its going to be included on the new new board for the new year at hand

Wayne Luke 12-09-2001 08:02 PM

That is correct. The original as posted will work fine but if you start running into resource limitations, it can be improved for larger boards. That was my original intent.

Parker Clack 12-09-2001 10:24 PM

wluke:

Great suggestion. I am a poor coder so could you post examples of what you are talking about. The ones you suggested I am afraid I would screw up.

Parker

Parker Clack 12-09-2001 10:43 PM

wluke:

I created a table preview with setting of mediumtext not null in
the database

Then I used:

$page=iif(strlen($message>500,substr($message,0,50 0)."...",$message);

$DB_site->query("INSERT INTO thread (.....,preview) VALUES (..................,'".addslashes(htmlspecialchars ($page))."')");

in the newthread.php file

and

$threads=$DB_site->query("SELECT .....,preview FROM thread..

from forumdisplay.php

and took out the

$post=$DB_site->query_first("SELECT pagetext FROM post WHERE threadid=$thread[threadid] ORDER BY postid");
$page=iif(strlen($post[pagetext])>500,substr($post[pagetext],0,500)."...",$post[pagetext]);
$page=bbcodeparse2($page,1,1,1,1);
$page=strip_tags($page);

and replaced it with:

$page=bbcodeparse2($page,1,1,1,1);
$page=strip_tags($page);

Should that do it?

Parker

Wayne Luke 12-10-2001 02:43 AM

It looks like it. Can't tell until I try it.

I will be finally getting the chance to upgrade SPF to 2.2.1 in the next couple of days. My changelog of modifications I have made is 50K for the user front end alone. I haven't even started applying my changes to the moderators control panel yet.

Once I finish that project, I will probably implement this as well and have the code I write for you to compare with.

Parker Clack 12-10-2001 03:40 AM

wluke:

I look forward to this. One thing though. When I put

$page=iif(strlen($message>500,substr($message,0,50 0)."...",$message);

into the newthread.php I get a parse error at the line it is on.

I will wait and see what you come up with.

While you are at it see if you can get it to pass quotes in the information that is passed because if they are used in the message of the first post it the text for the hyperlink is not displayed.

Parker

Freddie Bingham 12-10-2001 03:52 AM

PHP Code:

$page iifstrlen($message>500),substr($message,0,500).'...',$message); 


Parker Clack 12-10-2001 05:01 AM

freddie:

Thanks. But I still get the parse error at the line it is on.

BTW, will this way show old text messages that have already been written or only new posts that have been written since putting this in?

Parker

freakyshiat 12-10-2001 06:10 AM

so is there a more efficeint way of doing this?

Parker Clack 12-10-2001 11:17 PM

Well:

As stated this was too much of a demand on my server so if you have a large board I would not use this.

Anyone have a way to doing this more efficiently?

Parker

bira 12-17-2001 03:21 AM

Parker a couple more comments:

1) "$page = $thread[preview];" is redundent. place title="$thread[preview]" in your template.


2) you didn't strip out the bbcodes first, before doing strip_tags.

this:

Code:

$page = iif(strlen($message)>500,substr($message,0,500).'...',$message);
$page=strip_tags($page);

Should be:

Code:

$page = iif(strlen($message)>500,substr($message,0,500).'...',$message);
[high]$page=bbcodepase($page);[/high]
$page=strip_tags($page);


bira 12-17-2001 03:35 AM

Ah. Small problem that needs to be looked at.

1) If, for example, the first 500 characters of the opening post include something that you as an admin edit out - they will continue to appear in the preview.

2) If, for example, you split a thread then
---> a) the newly created thread will not have a preview; and
---> b) if you, for example, split the thread so as to remove the first post (say, to your trashcan forum), the that post will continue to exist in the 'preview'.


What needs to be done, is adding an additional hack code to the editpost script and the splitting action script. In both cases, when a thread is updated, the 'preview' must be updated as well.

I'm off to sleep now. I'll see if I can help you when I wake up, if that will be needed :)

bira 12-17-2001 04:44 AM

OK, the necessary add-ons :)

1) Open root/editpost.php, find:

Code:

  if ($isfirst and $title!="" and $postinfo[dateline]+$editthreadtitlelimit*60>time()) {
    $DB_site->query("UPDATE thread SET title='".addslashes(htmlspecialchars($title))."' WHERE threadid=$threadinfo[threadid]");
    //$title="";
  }

AFTER it ADD:

Code:

  if ($isfirst) {
        $page = iif(strlen($message)>500,substr($message,0,500).'...',$message);
        $page = bbcodeparse($page);
        $page = strip_tags($page);
    $DB_site->query("UPDATE thread SET preview='".addslashes(htmlspecialchars($page))."' WHERE threadid=$threadinfo[threadid]");
  }

Save and upload. This will ensure the 'preview' is also updated when the first post is edited.


2) open root/postings.php.

a) find:

Code:

  $DB_site->query("UPDATE thread SET title='".addslashes(htmlspecialchars($title))."',notes='".addslashes($threadinfo[notes])."'$pollcode WHERE threadid='$threadid'");
Replace is with (changes marked in high):

Code:

[high]  $getfirstpost=$DB_site->query_first("SELECT pagetext FROM post WHERE threadid=$threadid ORDER BY dateline LIMIT 1");
  $page = iif(strlen($getfirstpost[pagetext])>500,substr($getfirstpost[pagetext],0,500).'...',$getfirstpost[pagetext]);
  $page = bbcodeparse($page);
  $page = strip_tags($page);[/high]
  $DB_site->query("UPDATE thread SET title='".addslashes(htmlspecialchars($title))."',notes='".addslashes($threadinfo[notes])."'[high],preview='".addslashes(htmlspecialchars($page))."'[/high]$pollcode WHERE threadid='$threadid'");

This will ensure the 'preview' is updated when a thread is merged, to correctly reflect the new 1st post.

b) find:

Code:

  // Update first post in each thread as title information in relation to the sames words being in the first post may have changed now.
  $getfirstpost=$DB_site->query_first("SELECT postid FROM post WHERE threadid=$threadid ORDER BY dateline LIMIT 1");
  $DB_site->query("DELETE FROM searchindex WHERE postid=$getfirstpost[postid]");
  indexpost($getfirstpost[postid]);

  $getfirstpost=$DB_site->query_first("SELECT postid FROM post WHERE threadid=$newthreadid ORDER BY dateline LIMIT 1");
  $DB_site->query("DELETE FROM searchindex WHERE postid=$getfirstpost[postid]");
  indexpost($getfirstpost[postid]);

Replace it with (changes marked in high):

Code:

  // Update first post in each thread as title information in relation to the sames words being in the first post may have changed now.
  $getfirstpost=$DB_site->query_first("SELECT postid,[high]pagetext[/high] FROM post WHERE threadid=$threadid ORDER BY dateline LIMIT 1");
  $DB_site->query("DELETE FROM searchindex WHERE postid=$getfirstpost[postid]");
  indexpost($getfirstpost[postid]);
[high]  $page = iif(strlen($getfirstpost[pagetext])>500,substr($getfirstpost[pagetext],0,500).'...',$getfirstpost[pagetext]);
  $page = bbcodeparse($page);
  $page = strip_tags($page);
  $DB_site->query("UPDATE thread SET preview='".addslashes(htmlspecialchars($page))."' WHERE threadid='$threadid'");
  unset($page);[/high]

  $getfirstpost=$DB_site->query_first("SELECT postid,[high]pagetext[/high] FROM post WHERE threadid=$newthreadid ORDER BY dateline LIMIT 1");
  $DB_site->query("DELETE FROM searchindex WHERE postid=$getfirstpost[postid]");
  indexpost($getfirstpost[postid]);
[high]  $page = iif(strlen($getfirstpost[pagetext])>500,substr($getfirstpost[pagetext],0,500).'...',$getfirstpost[pagetext]);
  $page = bbcodeparse($page);
  $page = strip_tags($page);
  $DB_site->query("UPDATE thread SET preview='".addslashes(htmlspecialchars($page))."' WHERE threadid='$newthreadid'");
  unset($page);[/high]

This will ensure the 'preview' is updated for both threads, old and new, after splitting a thread in two.

Very nice hack Parker - I personally will use it a lot!!!

Thanks,

Bira

bira 12-22-2001 03:17 PM

This hack was released in full and can be found here. Don't use instructions in this thread - go to the 'Full Release' one.

Thanks :)


All times are GMT. The time now is 12:11 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01188 seconds
  • Memory Usage 1,800KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (12)bbcode_code_printable
  • (5)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (18)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete