fevereiro 22, 2010 | In: Zend

Helper Truncate para Zend Framework

Dias atrás tive a necessidade de truncar strings que vinham do banco de dados e populavam uma combo select.
Como estou utilizando Zend Framework, tinha certeza que acharia algo que me ajudasse, e para não reinventar a roda comecei a pesquisar no oráculo e eis que encontrei um Helper(Truncate) que faz o que eu queria mas com um pequeno probleminha que só acontece em países que fazem uso de acentuação… encoding! =/

Fucei, procurei, estressei até que o Wellaton(Leandro), um companheiro de trabalho indicou o uso da função mb_substr ao invés da substr, e não é que resolveu o problema com a acentuação??!!!

Então tá aí a dica, caso precise truncar strings, existe um helper pronto, fácil de usar e bom pra isso:

<?php
class Virgen_View_Helper_Truncate
{
    public function truncate($string, $start = 0, $length = 100, $prefix = '...', $postfix = '...')
    {
        $truncated = trim($string);
        $start = (int) $start;
        $length = (int) $length;
        // Return original string if max length is 0
        if ($length < 1) return $truncated;
        $full_length = iconv_strlen($truncated);
        // Truncate if necessary
        if ($full_length > $length) {
            // Right-clipped
            if ($length + $start > $full_length) {
                $start = $full_length - $length;
                $postfix = '';
            }
            // Left-clipped
            if ($start == 0) $prefix = '';
            // Do truncate!
            $truncated = $prefix . trim(substr($truncated, $start, $length)) . $postfix;
        }
        return $truncated;
    }
}

E caso tenha problema com os caracteres, utilize a função mb_substr no lugar de substr, alterando na linha 22:

$truncated = $prefix . trim(mb_substr($truncated, $start, $length)) . $postfix;

E é isso ae!

;-)

Comment Form

Categorias

Últimas Twittadas!!!

Posting tweet...

Powered by Twitter Tools

Calendário

fevereiro 2010
S T Q Q S S D
« jan   mar »
1234567
891011121314
15161718192021
22232425262728

Reflexão

Deixo meu suor no campo de treinamento, para não deixar meu sangue no campo de batalha" - Sun Tzu