kbkingMedlem sedan mars 2003168 inlägg Hej!
Jag har denna kod, som funkar klanderfritt.
<?
// Original hack by Rene displays last 5 postings in forum 1.
//This hack will show the last 3 posted headlines in each forum sectioned by folders if any
chdir("../phorum/"); //again, don't forget to change this to suit your phorum dir.
include "common.php";
$curr_par = "";
$par = "";
$number=3; // number of messages to show.
//omit or change the forum name for your test forums.
// we select active forums tables that are not folders
$sSQL="Select id, name, table_name, parent from ".$pho_main." where active=1 and folder='0' and name!='Test' order by parent";
$q->query($DB, $sSQL);
$rec=$q->getrow();
if(is_array($rec)){
while(is_array($rec)){
//get folder name
if ($rec[parent]>0) {
$pSQL="Select name from ".$pho_main." where id=$rec[parent]";
$pq = new query($DB, $pSQL);
$prec=$pq->getrow();
$par = $prec[name];
}
$SQL="select id, thread, author, subject, datestamp from $rec[table_name] order by datestamp desc limit $number";
$nq = new query($DB, $SQL);
$nrec=$nq->getrow();
if(is_array($nrec)) {
if ($curr_par != $par) echo "<br><b>$par</b>";
$curr_par = $par;
echo "<br><b><i>$rec[name]</i></b><br>\n";
while(is_array($nrec)){
echo "$nrec[author] - <a href=\"$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]\"> $nrec[subject]</a><br>\n";
$nrec=$nq->getrow();
}
}
$rec=$q->getrow();
}
}
?>
Nu vill jag att antal tecken i ämnesraden ska kunna vara max 20 st.
Spango har postat en kodsnutt, som kanske kan vara till hjälp här. Den ser ut så här:
$txt = 'en massa långa ord';
$ptn = '/(\S{20})/'; # matcha och memorera 20 efterföljande icke-blanksteg
echo preg_replace($ptn, '\1 ', $txt);
Alltså hur kan jag få till ett blanksteg efter säg 20 tecken?
Blev lite fel där. :r Menar snarare så här: hejahejahejahejahejahejahejaheja skall istället synas så här: hejahejahejahejaheja...
Tack på förhand!
MatteMedlem sedan aug. 20002 975 inlägg Något liknande detta du söker?
$txt = strlen($txt) > 20 ? substr($txt, 0, 20).'...' : $txt;
kbkingMedlem sedan mars 2003168 inlägg Jo det borde vara det.
Jag har suttit och ändrat lite och koden ser nu ut så här:
<?
// Original hack by Rene displays last 5 postings in forum 1.
//This hack will show the last 3 posted headlines in each forum sectioned by folders if any
chdir("../phorum/"); //again, don't forget to change this to suit your phorum dir.
include "common.php";
$curr_par = "";
$par = "";
$number=3; // number of messages to show.
//omit or change the forum name for your test forums.
// we select active forums tables that are not folders
$sSQL="Select id, name, table_name, parent from ".$pho_main." where active=1 and folder='0' and name!='Test' order by parent";
$q->query($DB, $sSQL);
$rec=$q->getrow();
if(is_array($rec)){
while(is_array($rec)){
//get folder name
if ($rec[parent]>0) {
$pSQL="Select name from ".$pho_main." where id=$rec[parent]";
$pq = new query($DB, $pSQL);
$prec=$pq->getrow();
$par = $prec[name];
}
$SQL="select id, thread, author, subject, datestamp from $rec[table_name] order by datestamp desc limit $number";
$nq = new query($DB, $SQL);
$nrec=$nq->getrow();
if(is_array($nrec)) {
if ($curr_par != $par) echo "<br><b>$par</b>";
$curr_par = $par;
echo "<br><b><i>$rec[name]</i></b><br>\n";
while(is_array($nrec)){
$subject = explode (" ", $nrec[subject]);
$i = 0;
while($subject[$i]) {
if(strlen($subject[$i]) >= 20){ $subject[$i] = substr ($subject[$i], 0, 20)."..."; }
$i++;
}
$subject = implode (" ", $subject);
echo "$nrec[author] - <a href=\"$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]\"> $nrec[subject]</a><br>\n";
$nrec=$nq->getrow();
}
}
$rec=$q->getrow();
}
}
?>
Jag får inga felmeddelanden, men resultatet blir detsamma, som med översta exemplet, nämligen så att allt skrivs ut korrekt,
fast utan att ämnesraden begränsas till 20 tecken.
MatteMedlem sedan aug. 20002 975 inlägg Nu förstår jag inte vad du försöker göra.
Du tar de enskilda orden i ämnesraden och kortar ner dom till max 20 tecken.
Sedan skriver du ut strängen som den var från början.
Antingen vill du hugga ner hela strängen till 20 tecken:
$url = "$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]";
if (strlen($nrec['subject']) > 20) {
$subject = substr($nrec['subject'], 0, 20).'...';
} else {
$subject = $nrec['subject'];
}
echo "$nrec[author] - <a href=\"$url\"> $subject</a><br>\n";
eller så vill du hindra att där finns ord som är längre än 20 tecken, då kan du göra så här:
$url = "$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]";
$subject = wordwrap($nrec['subject'], 20, "\n", 1);
echo "$nrec[author] - <a href=\"$url\"> $subject</a><br>\n";
kbkingMedlem sedan mars 2003168 inlägg Tack!
Hur/var lägger jag in ditt första förslag? Själv får jag ett felmeddelande.
MatteMedlem sedan aug. 20002 975 inlägg Istället för:
while(is_array($nrec)){
$subject = explode (" ", $nrec[subject]);
$i = 0;
while($subject[$i]) {
if(strlen($subject[$i]) >= 20){ $subject[$i] = substr ($subject[$i], 0, 20)."..."; }
$i++;
}
$subject = implode (" ", $subject);
echo "$nrec[author] - <a href=\"$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]\"> $nrec[subject]</a><br>\n";
Det saknades några apostrofer i koden jag skrev i inlägget innan. Har fixar detta.
kbkingMedlem sedan mars 2003168 inlägg Nu får jag felet att en } på rad 45 är "oväntad". Tar jag bort denna }, kommer de tre punkterna (...) fram sist i ämnesraden, men dessutom upprepas ämnesraden massor av ggr.
kbkingMedlem sedan mars 2003168 inlägg Tog nu bort denna kodsnutt och det verkar fungera.
$nrec=$nq->getrow();
}
Kan det vara rätt så, Matte?
om du tittar på koden så ser du 3 st { och 2 }
Jepp, det fattas 1 }
MatteMedlem sedan aug. 20002 975 inlägg Eller är det kanske lämpligare att denna kod finns kvar:
while(is_array($nrec)){
Den halkade med av misstag i mitt tidigare inlägg :)
Skärp dig nu Matte!