/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Begrænsning til poster med mindst X ord/ka~
Fra : HLH


Dato : 05-06-03 11:02

Jeg har en artikel-samling på en underside af min hjemmeside. For at gøre
forsiden dynamisk, har jeg lavet et script, som viser en tilfældig artikel
på forsiden. Scriptet afkorter artiklen til max 450 ord. Dette gør jeg for
at undgå, at meget lange artikler "ødelægger" layoutet af forsiden.

Her er problemet:

Der er også artikler, som er utra-korte. Disse artikler vil jeg gerne undgå
bliver vist overhovedet.

Jeg vil således gerne bevare den nuværende funktion, men undgå, at artikler
med under 50 ord bliver valgt. Det er underordnet om det er begrænsning i
karakterer eller ord, bare jeg kan undgå at få meget korte artikler vist.

Nu har jeg:

$result = mysql_query("select * from babylex order by rand() limit 1");
while($row = mysql_fetch_array($result)) {
$maxTextLenght=450;
$aspace=" ";
if(strlen($row[spgs]) > $maxTextLenght ) {
$row[spgs] = substr(trim($row[spgs]),0,$maxTextLenght);
$row[spgs] =
substr($row[spgs],0,strlen($row[spgs])-strpos(strrev($row[spgs]),$aspace));
$row[spgs] = $row[spgs].'...';
}
print "<table border=0 cellpadding=0 cellspacing=0 width=210><tr><td
width=22 valign=top><img src=\"bulletart.gif\"></td><td><a
href=\"babylex/index.php?option=laes&amp;id=$row[id]\"><font size=\"2\"
face=\"Verdana\">$row[overskrift]</a>:</font></td></tr></table><br>";
print "<table border=0 cellpadding=0 cellspacing=0 width=210><tr><font
face=Verdana size=2>" . nl2br(stripslashes ($row[spgs])) .
"</font></tr></table>";
}

?>

se det på http://netsundhedsplejerske.dk

Er der nogen, som kan hjælp med en tilføjelse, så jeg undgår de korte
artikler?

- Heini L. Hansen






 
 
Thomas Lindgaard (05-06-2003)
Kommentar
Fra : Thomas Lindgaard


Dato : 05-06-03 15:19

"HLH" <hlh@jubiipostREMOVETHIS.dk> wrote in
news:bbn4cb$q9m$1@news.net.uni-c.dk:

> Her er problemet:
>
> Der er også artikler, som er utra-korte. Disse artikler vil jeg gerne
> undgå bliver vist overhovedet.
>
> Jeg vil således gerne bevare den nuværende funktion, men undgå, at
> artikler med under 50 ord bliver valgt. Det er underordnet om det er
> begrænsning i karakterer eller ord, bare jeg kan undgå at få meget
> korte artikler vist.

Hvad med følgende:

> $result = mysql_query("select * from babylex order by rand() limit
> 1");
> while($row = mysql_fetch_array($result)) {
> $maxTextLenght=450;
> $aspace=" ";
> if(strlen($row[spgs]) > $maxTextLenght ) {
> $row[spgs] = substr(trim($row[spgs]),0,$maxTextLenght);
> $row[spgs] = substr($row[spgs],0,strlen($row[spgs])-strpos(strrev
> ($row[spgs]),$aspace));
> $row[spgs] = $row[spgs].'...';
> }
>
> else if (count(preg_split('/ /', $row[spgs], -1,
> PREG_SPLIT_NO_EMPTY)) < 50 )
> {
> // Spring indlæg med mindre en 50 ord over
> continue;
> }
>
> print "en hel masse";
> }

preg_split() deler din tekst op efter mellemrum og afleverer ordene i et
array. Hvis det array indeholder færre end 50 ord bliver continue udført
- dvs. den nuværende iteration af while bliver afbrudt og løkken kører
videre med næste række fra databasen.


--
Hyggehej
/Thomas

HLH (06-06-2003)
Kommentar
Fra : HLH


Dato : 06-06-03 07:20

Tak for forslaget, men det viser bare en blank artikel, hvis den er for
kort. Hensigten var, at den altid skal vise en artikel og altid en med
mindst 50 ord... Nogen ideer?

> > $result = mysql_query("select * from babylex order by rand() limit
> > 1");
> > while($row = mysql_fetch_array($result)) {
> > $maxTextLenght=450;
> > $aspace=" ";
> > if(strlen($row[spgs]) > $maxTextLenght ) {
> > $row[spgs] = substr(trim($row[spgs]),0,$maxTextLenght);
> > $row[spgs] = substr($row[spgs],0,strlen($row[spgs])-strpos(strrev
> > ($row[spgs]),$aspace));
> > $row[spgs] = $row[spgs].'...';
> > }
> >
> > else if (count(preg_split('/ /', $row[spgs], -1,
> > PREG_SPLIT_NO_EMPTY)) < 50 )
> > {
> > // Spring indlæg med mindre en 50 ord over
> > continue;
> > }
> >
> > print "en hel masse";
> > }
>

/Heini



Thomas Lindgaard (06-06-2003)
Kommentar
Fra : Thomas Lindgaard


Dato : 06-06-03 13:46

"HLH" <hlh@jubiipostREMOVE.dk> wrote in news:bbpbm1$2a6e$1
@news.cybercity.dk:

> Tak for forslaget, men det viser bare en blank artikel, hvis den er
for
> kort.

Hum?

> Hensigten var, at den altid skal vise en artikel og altid en med
> mindst 50 ord... Nogen ideer?

Så vidt jeg kan se ud fra din kode, så løber du hele databasen igennem
og skriver alle artikler ud. Udskrivningen sker sidst i while-løkken.
Rigtigt så langt?

Dvs. at vi skal undgå bunden af while-løkken i visse tilfælde.

I pseudokode kunne det se sårn her ud:

while ( der_er_rækker_i_databasen )
{
if ( !tekst_for_kort )
{
if ( tekst_for_lang )
{
klip_ned_til_450_tegn();
}
skriv_rækken_ud();
}
}

og i rigtig kode:

$max_length = 450;
while ( $row = mysql_fetch_array($result) )
{
$num_words = count(
preg_split('/ /', $row['spgs'], -1, PREG_SPLIT_NO_EMPTY)
);
if ( $num_words > 50 )
{
   if ( strlen($row['spgs']) > $max_length )
{
$row['spgs'] = substr(trim($row['spgs']), 0, $max_length);
$row['spgs'] =
substr($row['spgs'], 0, strrpos($row['spgs'], ' ').'...';
}
print $row['spgs'];
}
}

Det er mit bud - ikke testet.

--
Hyggehej
/Thomas

HLH (06-06-2003)
Kommentar
Fra : HLH


Dato : 06-06-03 19:02

Tak, det vil jeg prøve at få til at spille...

HLH



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste