Truncate words


(Pawel Grzesik) #1

Witam,

Chcialem zrobic taki motyw ze przy wyswietlaniu newsa na stronie glownej potrzeboje wyswietlac nie wiecej niz np 50 znakow. W django sobie to robilem za pomoca |truncatewords. Nie moge sie doszukac w dokumentacji czy cos podobnego jest w yii.


(Pawel Drylo) #2

Hej,

ja czegoś takiego nie znalazłem i postanowiłem stworzyć sobie w protected katalog helpers i dorzucic tam własną klasę MString z metodą trim:


$charCount// - po ilu znakach uciąć...


public static function trim($string, $charCount, $endString = '...') 

{ 	

 	if(strlen($string)<$charCount)

 		return $string;

  	if(preg_match('/\W/',$string[$charCount]))

 	{

 		$trimedString = substr($string,0,$charCount);

 		if(preg_match('/\W/',$trimedString[strlen($trimedString)-1]))

 		{

 			$trimedString = substr($string,0,strlen($trimedString)-1);

 		}

 		$trimedString .= $endString;

 	}

 	else

 	{

 		$str = substr($string,0,$charCount);

 		for($i = strlen($str)-1; $i>=0; $i--)

 		{

 			if(preg_match('/\W/',$str[$i]))

 			{

 				$position = $i;

 				break;

 			}

 		}

 		$trimedString = substr($str,0,$position);

 		if(preg_match('/\W/',$trimedString[strlen($trimedString)-1]))

 		{

 			$trimedString = substr($string,0,strlen($trimedString)-1);

 		}

 		$trimedString .= $endString;

 	}

 	return $trimedString; 

}

I po dodaniu do config/main.php:




'import'=>array(

 	'application.models.*',

 	'application.components.*',

 	'application.helpers.*', 

)



I w widoku przy wyswietlaniu robie:


<?php echo MString::trim($tekst); ?>

Jeśli ktoś znajdzie jakiś błąd, albo uprości to nie mam nic przeciwko…

Mam nadzieje, że pomogłem :)

Pozdrawiam,

pd


(Michal) #3

drylko ale to skomplikowane, tak chyba łatwiej:




function ttrim($str, $break, $after='...')

{

	if (strlen($str) <= $break) return $str;

	return substr($str,0,strpos($str,' ',$break)).$after;

}



Natomiast zmiany takie powinno się stosować w modelu, a nie w widoku.


(Pawel Drylo) #4

Dla tekstu: ‘ala ma kota, a kot to…’, przy wywołaniu Twojej funkcji:

ttrim(‘ala ma kota, a kot to…’, 10, ‘…’) otrzymuje wynik: ‘ala ma kota,…’,

przy mojej:

trim(‘ala ma kota, a kot to…’, 10, ‘…’) winikiem jest: ‘ala ma…’

co właśnie było planowane :)


(Jan Kurek) #5

tego typu helpery mozna sobie szybko potworzyc korzystajac ze “zrodel” np CodeIgniter <http://codeigniter.com/> ktory ma ich calkiem sporo ;)

np w system/helpers/text_helper.php znajdziecie Word Limiter, Character Limiter, High ASCII to Entities, Entities to ASCII, Word Censoring Function, Code Highlighter, Phrase Highlighter i Word Wrap - praktycznie gotowe do CTRL+C i CTRL+V ;]