Yii Framework Forum: Truncate words - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Truncate words Rate Topic: -----

#1 User is offline   izzol 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 28-February 09

Posted 15 October 2009 - 07:34 AM

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.
0

#2 User is offline   drylko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 13-September 09
  • Location:Poland

Posted 17 October 2009 - 03:18 PM

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
0

#3 User is offline   emix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 70
  • Joined: 02-March 09
  • Location:Poland

Posted 18 October 2009 - 01:17 PM

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.
0

#4 User is offline   drylko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 86
  • Joined: 13-September 09
  • Location:Poland

Posted 01 November 2009 - 01:22 PM

View Postemix, on 18 October 2009 - 01:17 PM, said:

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.


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 :)
0

#5 User is offline   kanjar 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 12-March 09
  • Location:Poland, Krakow

Posted 01 November 2009 - 05:39 PM

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 ;]
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users