A more clever truncate function.

This commit is contained in:
Laurent Destailleur
2009-10-10 16:45:37 +00:00
parent 304a83d673
commit 42b0de4835

View File

@@ -943,7 +943,8 @@ function dolibarr_trunc($string,$size=40,$trunc='right',$stringencoding='')
} }
/** /**
* \brief Truncate a string to a particular length adding '...' if string larger than length * \brief Truncate a string to a particular length adding '...' if string larger than length.
* If length = max length+1, we do no truncate to avoid having just 1 char replaced with '...'.
* \param string String to truncate * \param string String to truncate
* \param size Max string size. 0 for no limit. * \param size Max string size. 0 for no limit.
* \param trunc Where to trunc: right, left, middle * \param trunc Where to trunc: right, left, middle
@@ -962,7 +963,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='')
if ($trunc == 'right') if ($trunc == 'right')
{ {
$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string; $newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
if (dol_strlen($newstring,$stringencoding) > $size) if (dol_strlen($newstring,$stringencoding) > ($size+1))
return dol_substr($newstring,0,$size,$stringencoding).'...'; return dol_substr($newstring,0,$size,$stringencoding).'...';
else else
return $string; return $string;
@@ -970,7 +971,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='')
if ($trunc == 'middle') if ($trunc == 'middle')
{ {
$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string; $newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
if (dol_strlen($newstring,$stringencoding) > 2 && dol_strlen($newstring,$stringencoding) > $size) if (dol_strlen($newstring,$stringencoding) > 2 && dol_strlen($newstring,$stringencoding) > ($size+1))
{ {
$size1=round($size/2); $size1=round($size/2);
$size2=round($size/2); $size2=round($size/2);
@@ -982,7 +983,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='')
if ($trunc == 'left') if ($trunc == 'left')
{ {
$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string; $newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
if (dol_strlen($newstring,$stringencoding) > $size) if (dol_strlen($newstring,$stringencoding) > ($size+1))
return '...'.dol_substr($newstring,dol_strlen($newstring,$stringencoding) - $size,$size,$stringencoding); return '...'.dol_substr($newstring,dol_strlen($newstring,$stringencoding) - $size,$size,$stringencoding);
else else
return $string; return $string;