Dece
Legacy Member
ellow,
ik heb hier net een functie geschreven om nieuws items te previewen.
De bedoeling was om niet midden in een zin te stoppen, maar netjes op het einde van een zin.
De functie werkt, maar ik vind ze iets te lang/te zwaar uitgevallen.
mn vraag is dus logischerwijs of ze korter gemaakt kan worden.
output:
BTW: wie deze code wilt gebruiken mag dat natuurlijk doen
ik heb hier net een functie geschreven om nieuws items te previewen.
De bedoeling was om niet midden in een zin te stoppen, maar netjes op het einde van een zin.
De functie werkt, maar ik vind ze iets te lang/te zwaar uitgevallen.
mn vraag is dus logischerwijs of ze korter gemaakt kan worden.
PHP:
<?php
$config->preview_chars = 250;
$vb_tekst = 'simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!!simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! ';
function generate_preview($text)
{
global $config;
//inkorten van de content string als het moet...
if (strlen($text) > $config->preview_chars)
{
$temp_content = substr($text, 0, $config->preview_chars);
//nu zitten we prolly in het midden van een zin/woord --> mag niet dus even controleren
$laatste_letter_temp_content = substr($temp_content, $config->preview_chars, 1);
if ( $laatste_letter_temp_content == '.' || $laatste_letter_temp_content == '!' || $laatste_letter_temp_content == '?')
{
//zin is af --> ok
$preview_text = $temp_content;
}
else
{
$remaining_content = substr($text, $config->preview_chars, strlen($text));
//opsporen van de eerste keer dat een van de leestekens voorkomt
$eerst_voorkomend_punt = strpos($remaining_content, '.');
$eerst_voorkomend_uitroepteken = strpos($remaining_content, '!');
$eerst_voorkomend_vraagteken = strpos($remaining_content, '?');
//strpos kan false als resultaat weergeven --> wegfilteren met een immens groot getal
$eerst_voorkomend_punt = ( !is_integer( $eerst_voorkomend_punt ) ) ? 999999999999 : $eerst_voorkomend_punt;
$eerst_voorkomend_uitroepteken = ( !is_integer( $eerst_voorkomend_uitroepteken ) ) ? 999999999999 : $eerst_voorkomend_uitroepteken;
$eerst_voorkomend_vraagteken = ( !is_integer( $eerst_voorkomend_vraagteken ) ) ? 999999999999 : $eerst_voorkomend_vraagteken;
//wat is nu het kleinste?
if (($eerst_voorkomend_punt < $eerst_voorkomend_uitroepteken) && $eerst_voorkomend_punt < $eerst_voorkomend_vraagteken)
{
//inkorten tot het eerste punt en 2 extra puntjes toevoegen
$extra_content = substr($remaining_content, 0, $eerst_voorkomend_punt+1).'..';
}
elseif (($eerst_voorkomend_uitroepteken < $eerst_voorkomend_punt) && ($eerst_voorkomend_uitroepteken < $eerst_voorkomend_vraagteken))
{
$extra_content = substr($remaining_content, 0, $eerst_voorkomend_uitroepteken+1).' ...';
}
elseif (($eerst_voorkomend_vraagteken < $eerst_voorkomend_punt) && ($eerst_voorkomend_vraagteken < $eerst_voorkomend_uitroepteken))
{
$extra_content = substr($remaining_content, 0, $eerst_voorkomend_vraagteken+1).' ...';
}
else
{
//eugh hoe kan da? nuja voor alle veiligheid
$extra_content = '';
}
$preview_text = $temp_content . $extra_content;
}//einde leestekens
return $preview_text;
}//einde tekst te lang
else
{
return $text;
}
}//function preview_text
echo preview_text($vb_tekst);
?>
output:
simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!!simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij!!! simpelen test of alles goe marcheert. en om daar zeker van te zijn vul ik dit veld me veel zeverderij! ...
BTW: wie deze code wilt gebruiken mag dat natuurlijk doen

