Nieuws bericht verkoten en html
Ik zou het leuk vinden als mijn nieuws berichten verkort worden bij 1000 tekens.
Normaal is dat niet zo moeilijk dan gebruik je gewoon.
$news_body = substr($news_body,0,1000);
echo $news_body . ' '...';
Maar nu heb ik de Tinymce editor er in zitten dus er zit html in en verknoeid hij dat als hij boven de 1000 tekens komt.
Hoe kan ik het bericht laten verkortten terwijl hij wel alle html heel houd.
Mr:
Hij heeft html in z'n berichten, dus bijvoorbeeld heeft hij bijvoorbeeld staan. Als je dan strip_tags doet is die opmaak dus weg.
Niet de bedoeling lijkt mij.
Bedankt Mr Bean en Karl Karl wat Karl Karl zegt is inderdaad het geval als ik dat zou gebruiken er kunnen namelijk plaatjes in zitten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$nieuws = array();
$i=0;
$res = $db->query("SELECT nieuws_id, headline, content FROM nieuws ORDER BY datum DESC LIMIT 20;");
while(list($id, $headline, $content)=mysql_fetch_row($res)){
$nieuws[$i][0] = $id;
$nieuws[$i][1] = $headline;
$content = explode("\r\n",$content);
$j=0;
while($j<=2){
if($j == 2){
$nieuws[$i][2] .= $content[$j];
}else{
$nieuws[$i][2] .= $content[$j];
}
$j++;
}
$nieuws[$i][2] .= "<a href='index.php?page=nieuws#".$nieuws[$i][0]."'>Lees verder</a>";
$i++;
}
$i=0;
$res = $db->query("SELECT nieuws_id, headline, content FROM nieuws ORDER BY datum DESC LIMIT 20;");
while(list($id, $headline, $content)=mysql_fetch_row($res)){
$nieuws[$i][0] = $id;
$nieuws[$i][1] = $headline;
$content = explode("\r\n",$content);
$j=0;
while($j<=2){
if($j == 2){
$nieuws[$i][2] .= $content[$j];
}else{
$nieuws[$i][2] .= $content[$j];
}
$j++;
}
$nieuws[$i][2] .= "<a href='index.php?page=nieuws#".$nieuws[$i][0]."'>Lees verder</a>";
$i++;
}
Is niet de mooiste oplossing, maar het werkt wel. Ik had hetzelfde probleem.
Als je aanpast naar een hoger getal worden er meer regels weergeven.
Dit script kapt de tekst af na 2 regels. (eigenlijk na 2 newlines, daarom moet je na elke regel een newline zetten om dit script te laten werken.)
Maargoed, zoals ik zei, niet mooi en zeker niet al te efficiënt, maar wel effectief.
Verbeteringen zijn natuurlijk welkom.
Of je zoekt na een aantal tekens de laatste </b|u|i|etc> op?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
/**
* String afbreken na X karakters
* Return: str
*/
function word_cut($str, $maxLength, $char){
$maxLength += strlen($char);
if(strlen($str) <= $maxLength){
return $str;
}
$count = 0;
$newStr = '';
$openTag = false;
for($i=0; $i<strlen($str); $i++){
$newStr .= $str{$i};
if($str{$i} == '<'){
$openTag = true;
continue;
}elseif(($openTag == true) && ($str{$i} == '<')){
$openTag = false;
continue;
}elseif($openTag == false){
$count++;
if($count==$maxLength){//if current word max length is reached
$newStr = substr($newStr,0,-strlen($char)).$char;//insert word break char
return $newStr;
}
}
}
return $newStr;
}
?>
/**
* String afbreken na X karakters
* Return: str
*/
function word_cut($str, $maxLength, $char){
$maxLength += strlen($char);
if(strlen($str) <= $maxLength){
return $str;
}
$count = 0;
$newStr = '';
$openTag = false;
for($i=0; $i<strlen($str); $i++){
$newStr .= $str{$i};
if($str{$i} == '<'){
$openTag = true;
continue;
}elseif(($openTag == true) && ($str{$i} == '<')){
$openTag = false;
continue;
}elseif($openTag == false){
$count++;
if($count==$maxLength){//if current word max length is reached
$newStr = substr($newStr,0,-strlen($char)).$char;//insert word break char
return $newStr;
}
}
}
return $newStr;
}
?>
Dat gebruik ik altijd, voor het geval dat je dus tags hebt. Voorbeeldje van gebruik; 30 tekens, en afsluiten met ... : word_cut('Hele lange lap tekst die afgekort moet worden op 30 tekens',30,'...');
dankje wel Andries Louw Wolthuizen
Voordat je je bericht door tinyMCE gooid op 1000 tekens controleren en daarna pas je html + andere rotzooi toevoegen?