Archief - PHP: Read More Algoritme

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

orez

Legacy Member
Ok, ik zit dus met het volgende, ben aan siteje bezig, en zou het volgende willen realiseren.

Per Message da gepost wordt mogen er maximum 50 Woorden worden weergegeven (ik dacht eerst aan 1 alinea.. morja.. denk ni da da zo eenvoudig te doen is?)

Ik gebruik dit om mn woorden te tellen (duh)

Code:
count(explode(" ", $news))

Mor nu zou ik erges aan een algoritme moeten raken, als er meer dan 50 woorden zijn dat hij dan stopt aan het 50ste woord en zegt van read more...

Indien er natuurlijk minder dan 50 zijn moet hij het read more statement niet meegeven...

Iemand die kan helpen? tnx :)

(ik weet dat dit eenvoudiger op te lossen is door een count te doen op letters en als die letters meer zijn dan een bepaald aantal de letterstringlengte een maximumwaarde te geven... maar kvin dah wa slordig als em plots int midden van een woord afbreekt..)

Grtz

Yngwie

Legacy Member
eum, juist de explode functie opgezocht en deze geeft een array terug met elk woord in als je een spatie als separator gebruikt. dus om deze 50woorden af te drukken zou ik een for-lus schrijven die 50 keer loopt met een $i die begint op 0 en gaat tot 49. binnen deze for lus kan je dan 1 stuk van de array afprinte + een spatie. volgende keer dat de for lus zal doorlopen worden wordt het volgende woord afgedrukt. en dit tot 50woorden. array index 0 tot 49.

dus zoiets:

for ($i=0; $i<=49; $i++)
{
echo $resultarray[$i];
echo " ";
}
echo "<a href=\"#\">Read More</a>";

0n3Liner

Legacy Member
ik weet dat er iemand op deze forums zo'n functie ahd geschreven... kan het alleen neit terugvinden...

Squall-sX-

Legacy Member
Je array kan ook kleiner zijn dan 50:

PHP:
$i; // ik maak de $i hier aan zodat hij zeker blijft bestaan na de for-lus (weet niet juist hoe dat zit bij PHP).
for ($i=0; $i<=49 && $i<count( $resultarray ); $i++) // Als de array kleiner is dan 50 moet er gestopt worden met drukken.
{
  echo $resultarray[$i];
  echo " ";
}
if ( $i < ( count( $resultarray ) -1 )  ) // testen of er wel meer dan 50 woorden zijn ($i is dan 49, en die count minimum 51).
  echo "<a href=\"#\">Read More</a>";

Yngwie

Legacy Member
Squall-sX- zei:
Je array kan ook kleiner zijn dan 50:

PHP:
$i; // ik maak de $i hier aan zodat hij zeker blijft bestaan na de for-lus (weet niet juist hoe dat zit bij PHP).
for ($i=0; $i<=49 && $i<count( $resultarray ); $i++) // Als de array kleiner is dan 50 moet er gestopt worden met drukken.
{
  echo $resultarray[$i];
  echo " ";
}
if ( $i < ( count( $resultarray ) -1 )  ) // testen of er wel meer dan 50 woorden zijn ($i is dan 49, en die count minimum 51).
  echo "<a href=\"#\">Read More</a>";
Klein detail dak nog over het hoofd gezien had, er kunne ook minder dan 50 woorden zijn :D

orez

Legacy Member
tghoh, bij nadenken is het eigelijk simpel hé.. :s, mja soit enorm bedankt voor jullie hulp, anders zat ik hier morgenochtend nog :D, beetje vermoeidheid denk ik...

Kheb nu enkel nog 1 probleem bij het uitlezen...

ik gebruik nl2br... en die br ziet hij ook als een woord of 2, neem nu <br /> dan gaat hij deze afbreken in <br Read more ... bv

dan krijg ik errors qua validering :p
enig idee hoe dit op te lossen iemand? :)

Ik ga nu mn bedje in, allesins al bedankt voor de hulp !

killgore

Legacy Member
ik zou dus op letters tellen, en dan substr doen, en alles vanaf laatste spatie verwijderen (heb je geen afbrekingen in een woord dus).

iets van:

PHP:
if(strlen($bericht) > 500)
{
$bericht = substr($bericht,0,500)
$bericht = substr($bericht,0,500-strlen( strrchr($bericht," ") ) );
$bericht .= '<a href="#">...&nbsp;&nbsp;&nbsp;Read More</a>';
}

orez

Legacy Member
krijg ik nog altijd hetzelfde me die <br /> ze ... kzou dit eerst willen opgelost krijgen...

En nu zit ik hier nog :/ slaapwel :p

Squall-sX-

Legacy Member
Als dat vorige werkte dan:
PHP:
if(strlen($bericht) > 500)
{
  $bericht = substr($bericht,0,500)
  $bericht = substr($bericht,0,500-strlen( strrchr($bericht," ") ) );
  $bericht .= '<a href="#">...&nbsp;&nbsp;&nbsp;Read More</a>';

  if ( substr( $bericht, strlen( $bericht )-3 ) == '<br' )
    $bericht = substr( $bericht, 0, strlen( $bericht ) -3 );
}
Controleer je gewoon of het laatste van je bericht een afgekapte <br /> is.

xml

Legacy Member
of eerst vervang je alle <br /> door <br>, dan ga je u vijftig woorden maken, dan verander je alle <br> terug door <br />

Niet de meest elegante oplossing waarschijnlijk, maar ze doet het wel.

Dece

Legacy Member
0n3Liner zei:
ik weet dat er iemand op deze forums zo'n functie ahd geschreven... kan het alleen neit terugvinden...
da was ik: https://www.beyondgaming.be/forums
maar die code maakt gebruik van het aantal karakters, niet het aantal lijnen.

En een alinea is toch één of twee <br /> achter elkaar? code wordt dan simpelweg
PHP:
$txt_stukken = explode('<br /><br />', $lange_tekst);

$preview_stuk = $txt_stukken[0];

servi

Legacy Member
toch eventjes zeggen dat explode niet echt de ideale functie is.

Je kan hiervoor beter substr_count gebruiken.

Eens je dan weet dat er meer dan 50 is kan je explode gaan gebruiken maar dan wel met de limiter.

concreet dus :

PHP:
define('AANTAL_WOORDEN',50);
if ( substr_count($tekst) > AANTAL_WOORDEN ) {
 $woorden = explode(" ",$tekst,AANTAL_WOORDEN);
 for ($i = 0; $i < AANTAL_WOORDEN - 1; $i++)
    echo $woorden[$i];
 echo " Read More ...";
} else {
  echo $tekst;
}

FluX.iccd

Legacy Member
Kan je niet eerst dat "read more" scriptje uitvoeren, en dan pas nl2br? Dan moet je wel eerst weer de eerste 50 woorden van je array aan elkaar plakken. Ofwel zelf de "\n" vervangen door <br /> in je for loop.

polleke

Legacy Member
ik ben wat aan het experimenteren met php, en ik heb dit juist gemaakt... (gewone code dus en niks van layout)

http://www.remyvd.be/php/news.php

het is eigenlijk simpel te doen, vanaf mijn bericht langer is dan 220 letters, kap ik het af op 180 letters (want stel dat je bericht 225 letters lang is, is het belachelijk om een nieuwe pagina te openen voor 5 lettertjes)

dit is de code:
PHP:
if(strlen($news['news_main']) > 220) {
$news['news_main']=substr($news['news_main'],0,180) . " ... <a href=nieuws/news.php?news_ID=" . $news['news_ID'] . ">meer</a>";
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan