Gör rubrikerna "senaste inlägg" längre.

Tråden skapades och har fått 14 svar. Det senaste inlägget skrevs .
1

På forumets första sida ser man rubriker på senaste trådar i varje kategori. Tyvärr blir det ofta bara "Jag behöver hjälp med att..."

Vore det inte trevligare att få hela, eller åtminstonde större delen av, rubriken? Jag vet att vissa webläsare har mouse over popup, men inte Safari, och det är inte heller rätt enligt W3C har jag för mig.

Relaterad bugg: Om man laddat in sidan och klickar på en rubrik så kan det hända att man hamnar i en annan tråd. Detta verkar bero på att den andra tråden hamnar överst innan mna själv hunnit ladda om sidan. Ganska störande.

Ciryon

Ett enkelt sätt som iallafall fungerar i IE 6 och Opera 7.10 till Windows är att ha ett title attribut i länk taggen.

<a href="article.html" title="Jag vill ha hjälp med att mata katten under semestern">Jag vill ha hjälp...</a>

Vet inte om ni kan ändra i forum koden men om ni kunde det är ingreppet relativt smärtfritt.

  • Oregistrerad
  • 2003-04-22 22:20
Citat:

Skrevs ursprungligen av Ciryon
..och det är inte heller rätt enligt W3C har jag för mig.

Hej!
Det ska inte vara något problem, title i länkar är helt okej enligt 4.01 specifikation.

/Freddy

Ja det vore mycket bra. title="" funkar fint med Safari.

Ciryon

Kan ni inte lägga till det som vi snackat om i den här tråden? Skulle vara schysst att kunna läsa inläggs hela rubrik även om de visas som trunkerade på sidan.

*testar*

Ok - problemet är att "senaste inlägg" är en variabel som heter $forum[lastthread] som genereras i en annan fil. Som ni ser så blir "title" lika kort som resten av rubriken.

Alternativet är väl att definera en ny variabel som är längre, t ex @forum[lastthread-long]. Så här ser koden ut för själva "senaste rubriken" funktionen:

+-----------------------------------------------+
| Last Post on Forumhome and Forumdisplay       |
| Version 1.2 (for vBulletin 2.2.8)             |
+-----------------------------------------------+
| By PPN (vBulletin.org/com moderator)
| Email: software@pp-network.com
| Updated for VB2.2.8 by TECK
| TimeStamp: 96UFBO
|
|
+-----------------------------------------------+
| FILES TO MODIFY                               |
+-----------------------------------------------+
| forum/admin/functions.php
| forum/index.php
| forum/forumdisplay.php
| forum/newthread.php
| forum/newreply.php
| forum/editpost.php
| forum/postings.php
|
|
+-----------------------------------------------+
| TEMPLATES TO MODIFY                           |
+-----------------------------------------------+
| forumhome_lastpostby
|
|
+-----------------------------------------------+
| INSTALL STEPS                                 |
+-----------------------------------------------+
|
+-----------------------------------------------+
| File: FORUM/admin/doquery.php                 |
+-----------------------------------------------+
| Create a new file with the content:
+--------------------------------------------------------------------------+
<?php
error_reporting(7);
require("./global.php");

cpheader("<title>Run a Query on $dbname Database</title>");

$doquery = "ALTER TABLE forum ADD lastthread VARCHAR(100) NOT NULL AFTER lastpost";
$DB_site->query($doquery);

echo "Query successful.<br>";
echo "<font face='Courier New' size='1'>$doquery</font><br><br>";
echo "Do not forget to delete this file...";

cpfooter();
?>
+--------------------------------------------------------------------------+
| Save it in your /admin folder as 'doquery.php', run it and
| delete it after it's completion.
|
|
|
+-----------------------------------------------+
| File: FORUM/admin/functions.php (2 changes)   |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
  $lastpost=0;
  $lastposter='';

  $forumslist='';
  $getchildforums=$DB_site->query("SELECT forumid,threadcount,replycount,parentlist,parentid,lastpost,lastposter FROM forum WHERE INSTR(CONCAT(',',parentlist,','),',$forumid,')>0");
  while ($getchildforum=$DB_site->fetch_array($getchildforums)) {
    if ($getchildforum[forumid]==$forumid) {
      $parentlist=$getchildforum[parentlist];
    } else {
      if ($getchildforum[parentid]==$forumid) {
        $threadcount+=$getchildforum[threadcount];
        $replycount+=$getchildforum[replycount];
      }
      if ($getchildforum[lastpost]>$lastpost) {
        $lastpost=$getchildforum[lastpost];
        $lastposter=$getchildforum[lastposter];
      }
    }
    $forumslist.=",$getchildforum[forumid]";
  }
  $DB_site->free_result($getchildforums);
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
  $lastpost=0;
  $lastthread='';
  $lastposter='';

  $forumslist='';
  $getchildforums=$DB_site->query("SELECT forumid,threadcount,replycount,parentlist,parentid,lastpost,lastthread,lastposter FROM forum WHERE INSTR(CONCAT(',',parentlist,','),',$forumid,')>0");
  while ($getchildforum=$DB_site->fetch_array($getchildforums)) {
    if ($getchildforum[forumid]==$forumid) {
      $parentlist=$getchildforum[parentlist];
    } else {
      if ($getchildforum[parentid]==$forumid) {
        $threadcount+=$getchildforum[threadcount];
        $replycount+=$getchildforum[replycount];
      }
      if ($getchildforum[lastpost]>$lastpost) {
        $lastpost=$getchildforum[lastpost];
        if($getchildforum[lastthread]=='') {
          $threadtitle=$DB_site->fetch_array($DB_site->query("SELECT * FROM thread WHERE forumid='$forumid' AND lastposter='$getchildforum[lastposter]' AND lastpost='$getchildforum[lastpost]'"));
          $lastthread=$threadtitle[title];
        } else {
          $lastthread=$getchildforum[lastthread];
        }
        $lastposter=$getchildforum[lastposter];
      }
    }
    $forumslist.=",$getchildforum[forumid]";
  }
  $DB_site->free_result($getchildforums);
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| 2. Find this code:
+--------------------------------------------------------------------------+
  $lastposts=$DB_site->query_first("SELECT MAX(lastpost) AS lastpost FROM thread WHERE forumid=$forumid AND visible=1 AND open<>10");
  if ($lastposts['lastpost']>$lastpost) {
  $lastposts=$DB_site->query_first("
      SELECT lastpost,lastposter
      FROM thread
      WHERE forumid = $forumid AND lastpost = '$lastposts[lastpost]'");
  $lastpost=$lastposts['lastpost'];
  $lastposter=$lastposts['lastposter'];
  }

  $lastpostquery=",lastpost='$lastpost',lastposter='".addslashes($lastposter)."'";
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
  $lastposts=$DB_site->query_first("SELECT MAX(title) as title,MAX(lastpost) AS lastpost FROM thread WHERE forumid=$forumid AND visible=1 AND open<>10");
  if ($lastposts['lastpost']>$lastpost) {
    $lastposts=$DB_site->query_first("
      SELECT lastpost,lastposter,title
      FROM thread
      WHERE forumid = $forumid AND lastpost = '$lastposts[lastpost]'");
    $lastpost=$lastposts['lastpost'];
    $lastthread=$lastposts['title'];
    $lastposter=$lastposts['lastposter'];
  }

  $lastpostquery=",lastpost='$lastpost',lastthread='".addslashes($lastthread)."',lastposter='".addslashes($lastposter)."'";
+--------------------------------------------------------------------------+
|
|
|
+-----------------------------------------------+
| File: FORUM/index.php (2 changes)             |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
      if (!$hideprivateforums) {
        $forumperms['canview']=1;
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
      $trueperm['canview'] = $forumperms['canview'];

      if (!$hideprivateforums) {
        $forumperms['canview']=1;
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| 2. Find this code:
+--------------------------------------------------------------------------+
        // dates
        if ($forum['lastpost']>0) {
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
        // dates
        if ($forum['lastpost']>0) {
          $maxchars='30'; // title lenght
          if($trueperm['canview']) {
            $forum['lastthread']=unhtmlspecialchars($forum['lastthread']);
            if (strlen($forum['lastthread']) > $maxchars) {
              $forum['lastthread'] = substr($forum['lastthread'], 0, $maxchars-2) . '...';
            }
          }
+--------------------------------------------------------------------------+
| NOTE: Change the title lenght variable to what ever you like.
|
|
+-----------------------------------------------+
| File: FORUM/forumdisplay.php (2 changes)      |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
      if (!$hideprivateforums) {
        $forumperms['canview']=1;
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
      $trueperm['canview'] = $forumperms['canview'];

      if (!$hideprivateforums) {
        $forumperms['canview']=1;
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| 2. Find this code:
+--------------------------------------------------------------------------+
        // dates
        if ($forum['lastpost']>0) {
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
        // dates
        if ($forum['lastpost']>0) {
          $maxchars='30'; // last thread title lenght
          if($trueperm['canview']) {
            $forum['lastthread']=unhtmlspecialchars($forum['lastthread']);
            if (strlen($forum['lastthread']) > $maxchars) {
              $forum['lastthread'] = substr($forum['lastthread'], 0, $maxchars-2) . '...';
            }
          }
+--------------------------------------------------------------------------+
| NOTE: Change the title lenght variable to what ever you like.
|
|
|
+-----------------------------------------------+
| File: FORUM/newthread.php (2 changes)         |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
      //create new thread
      if ($postpoll) {
         $visible = 0;
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
      //create new thread
      if ($postpoll) {
         $visible = 0;
         $DB_site->query("UPDATE forum SET lastthread='".addslashes(htmlspecialchars($subject))."' WHERE forumid IN ($foruminfo[parentlist])");
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| 2. Find this code:
+--------------------------------------------------------------------------+
      // update forum stuff
      if ($visible==1) {
        $DB_site->query("UPDATE forum SET replycount=replycount+1,threadcount=threadcount+1,lastpost='".time()."',lastposter='".addslashes($postusername)."' WHERE forumid IN ($foruminfo[parentlist])");
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
      // update forum stuff
      if ($visible==1 or $postpoll) {
        $DB_site->query("UPDATE forum SET replycount=replycount+1,threadcount=threadcount+1,lastpost='".time()."',lastthread='".addslashes(htmlspecialchars($subject))."',lastposter='".addslashes($postusername)."' WHERE forumid IN ($foruminfo[parentlist])");
      }
+--------------------------------------------------------------------------+
|
|
|
+-----------------------------------------------+
| File: FORUM/newreply.php (1 change)           |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
      // update forum stuff
      if ($visible==1) {
        $DB_site->query("UPDATE forum SET replycount=replycount+1,lastpost='".time()."',lastposter='".addslashes($postusername)."' WHERE forumid IN ($foruminfo[parentlist])");
      }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
      // update forum stuff
      if ($visible==1) {
        $DB_site->query("UPDATE forum SET replycount=replycount+1,lastpost='".time()."',lastthread='".addslashes(htmlspecialchars($threadinfo[title]))."',lastposter='".addslashes($postusername)."' WHERE forumid IN ($foruminfo[parentlist])");
      }
+--------------------------------------------------------------------------+
|
|
|
+-----------------------------------------------+
| File: FORUM/editpost.php (1 change)           |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
  if ($isfirst and $title!="" and $postinfo[dateline]+$editthreadtitlelimit*60>time()) {
    $DB_site->query("UPDATE thread SET title='".addslashes(htmlspecialchars($title))."', iconid=".intval($iconid)." WHERE threadid=$threadinfo[threadid]");
    //$title="";
  }
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
  if ($isfirst and $title!="" and $postinfo[dateline]+$editthreadtitlelimit*60>time()) {
    $DB_site->query("UPDATE thread SET title='".addslashes(htmlspecialchars($title))."', iconid=".intval($iconid)." WHERE threadid=$threadinfo[threadid]");
    $lastpost=$DB_site->query_first("SELECT * FROM forum WHERE forumid=$threadinfo[forumid]");
    if($lastpost['lastpost']==$threadinfo['dateline']) {
      $DB_site->query("UPDATE forum SET lastthread='".addslashes(htmlspecialchars($title))."' WHERE forumid=$threadinfo[forumid]");
    }
  }
+--------------------------------------------------------------------------+
|
|
|
+-----------------------------------------------+
| File: FORUM/postings.php (1 change)           |
+-----------------------------------------------+
| 1. Find this code:
+--------------------------------------------------------------------------+
  updateforumcount($threadinfo[forumid]);

  if ($visible) {
+--------------------------------------------------------------------------+
|
+-----------------------------------------------+
| Replace it with:
+--------------------------------------------------------------------------+
  updateforumcount($threadinfo[forumid]);

  $lastpost=$DB_site->query_first("SELECT * FROM forum WHERE forumid='$threadinfo[forumid]'");
  if($lastpost['lastpost']==$threadinfo['dateline']) {
    $DB_site->query("UPDATE forum SET lastthread='".addslashes(htmlspecialchars($title))."' WHERE forumid='$threadinfo[forumid]'");
  }

  if ($visible) {
+--------------------------------------------------------------------------+
|
|
|
+-----------------------------------------------+
| Template: forumhome_lastpostby (1 change)     |
+-----------------------------------------------+
| Add this code anywhere you like:
+--------------------------------------------------------------------------+
<a href="showthread.php?s=$session[sessionhash]&goto=lastpost&forumid=$forum[forumid]">$forum[lastthread]</a>
+--------------------------------------------------------------------------+

Vad var det som du just postade? Koden från forumet eller? Och jag som trodde SQL-satser mitt i PHP-koden var förbjudet

Alltså ett alternativ är ju att välja ut hela titeln och trunkera först när du skapar länken alltså i pseudokod så skulle det se ut såhär:

<a href="bla" title="$forum[lastthread]"><? trunkera($forum[lastthread]) ?></a>

Eftersom varje titel bara visas en gång per sida så kommer trunkeringen bara ske en gång per titel och då är det ju onödigt att lagra det trunkerade värdet som en extra variabel.

Vad var det? Verkar vara nån sorts brukanvisning hur man manuellt uppgraderar (?) nån del av forumet. Krångligt. Varför inte skriva en patch istället.

Men den plockar ju fint ut

$lastthread=$threadtitle[title];

ur databasen. Hur ser koden ut som formaterar förstasidan? Någonstans måste den ju klippa av.

Ciryon

Sök efter $maxchars='30' på ett av de ställena sker stympningen av titlarna. Men jag håller med Ciryon den där koden ser skum ut. Var kommer den ifrån?

Hur går det Martin? Får du någon ordning på det?

Hallå?

Ciryon

Citat:

Skrevs ursprungligen av Gabriel Falkenberg
Sök efter $maxchars='30' på ett av de ställena sker stympningen av titlarna. Men jag håller med Ciryon den där koden ser skum ut. Var kommer den ifrån?

Koden kommer från vbulletin.org, där många skriver tillägg till vbulletin-forumet. Vet ej varför de inte använder sig av patcher, men att installera hacket tar inte speciellt länge, så det var inget vi störde oss på.

Tyvärr vet jag inte om vi kan göra denna ändring ni frågar efter, men jag ska be Martin titta närmare på det. Vi är inga phphackers direkt.

1
Bevaka tråden