izzol
(Pawel Grzesik)
October 15, 2009, 12:34pm
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.
drylko
(Pawel Drylo)
October 17, 2009, 8:18pm
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
emix
(Michal)
October 18, 2009, 6:17pm
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.
drylko
(Pawel Drylo)
November 1, 2009, 6:22pm
4
emix:
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
kanjar
(Jan Kurek)
November 1, 2009, 10:39pm
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 ;]