borsatti 2 Denunciar post Postado Dezembro 14, 2009 eu vi uma função dessa la embaixo mas acho que nao precisava de tudo aquilo , então vou por a minha. //Resume o texto e nao corta as palavras function resumo($texto,$qnt){ $resumo=substr($texto,'0',$qnt); $last=strrpos($resumo," "); $resumo=substr($resumo,0,$last); return $resumo."..."; } para usar resumo("Maria Corta a Mao","10"); ai vai retornar e no final ... se não quiser os 3 pontinhos é só tirar ali na função! Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 15, 2009 OBS: não precisava de tudo aquilo?, nem sei qual função você viu, mas concerteza era necessario, pois a sua função tem falhas e não é pratica e poderia dar a opção para o usuario reduzir do lado esquerda ou direito :natal_happy: Compartilhar este post Link para o post Compartilhar em outros sites
gilbnet 4 Denunciar post Postado Dezembro 17, 2009 OBS: não precisava de tudo aquilo?, nem sei qual função você viu, mas concerteza era necessario, pois a sua função tem falhas e não é pratica e poderia dar a opção para o usuario reduzir do lado esquerda ou direito http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif Fabyo qual a função você sugere para este caso, estou tendo esta necessidade... Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 17, 2009 Vou postar aqui a função do illidan que ele publicou num forum chamado Foo, só que esse forum esta muito tempo inativo, então se eu postar só o link corre o risco de um dia sumir e ninguem mais ver a função OBS: apesar do codigo ter sido criado em 2005 ele esta muito bem feito, pois o Illidan é um excelente programador e mestre dos magos em javascript = ) então esta ai a função do Illidan: Função para reduzir uma string sem cortar palavras ao meio Esta função reduz uma string até um limite máximo de caracteres sem cortar palavras ao meio. Pode-se reduzir a string pela sua extremidade direita (padrão da função), esquerda, ambas ou pelo centro. Por padrão, serão adicionados três pontos "..." à parte reduzida da string, mas pode-se modificar isto através do parâmetro $append. Por exemplo, você poderia querer que ela incluísse três pontos entre parênteses: "(...)", ou que ela não incluísse coisa alguma: "". A função remove também o excesso de espaços (" ", <TABS> ou <ENTERS>), de forma que ela tentará retornar o máximo de palavras sem exceder o limite imposto por $max_length. Exemplos de como utilizar: <?php $str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; echo str_reduce($str, 100); /* Retornará: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut ..." */ echo str_reduce($str, 100, "(...)", STR_REDUCE_LEFT); /* Retornará: "(...) cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." */ ?> Obs: pra reduzir por ambas as extremidades, você deverá passar dois valores no quarto parâmetro da função. Para isso, utilize o operador bit a bit "|" desta forma: (STR_REDUCE_LEFT | STR_REDUCE_RIGHT) Código fonte da função: <?php define("STR_REDUCE_LEFT", 1); define("STR_REDUCE_RIGHT", 2); define("STR_REDUCE_CENTER", 4); /** * @autor: Carlos Reche * @data: Jan 21, 2005 */ function str_reduce($str, $max_length, $append = NULL, $position = STR_REDUCE_RIGHT, $remove_extra_spaces = true) { if (!is_string($str)) { echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects parameter 1 to be string."; return false; } else if (!is_int($max_length)) { echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects parameter 2 to be integer."; return false; } else if (!is_string($append) && $append !== NULL) { echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects optional parameter 3 to be string."; return false; } else if (!is_int($position)) { echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "() expects optional parameter 4 to be integer."; return false; } else if (($position != STR_REDUCE_LEFT) && ($position != STR_REDUCE_RIGHT) && ($position != STR_REDUCE_CENTER) && ($position != (STR_REDUCE_LEFT | STR_REDUCE_RIGHT))) { echo "<br /><strong>Warning</strong>: " . __FUNCTION__ . "(): The specified parameter '" . $position . "' is invalid."; return false; } if ($append === NULL) { $append = "..."; } $str = html_entity_decode($str); if ((bool)$remove_extra_spaces) { $str = preg_replace("/\s+/s", " ", trim($str)); } if (strlen($str) <= $max_length) { return htmlentities($str); } if ($position == STR_REDUCE_LEFT) { $str_reduced = preg_replace("/^.*?(\s.{0," . $max_length . "})$/s", "\\1", $str); while ((strlen($str_reduced) + strlen($append)) > $max_length) { $str_reduced = preg_replace("/^\s?[^\s]+(\s.*)$/s", "\\1", $str_reduced); } $str_reduced = $append . $str_reduced; } else if ($position == STR_REDUCE_RIGHT) { $str_reduced = preg_replace("/^(.{0," . $max_length . "}\s).*?$/s", "\\1", $str); while ((strlen($str_reduced) + strlen($append)) > $max_length) { $str_reduced = preg_replace("/^(.*?\s)[^\s]+\s?$/s", "\\1", $str_reduced); } $str_reduced .= $append; } else if ($position == (STR_REDUCE_LEFT | STR_REDUCE_RIGHT)) { $offset = ceil((strlen($str) - $max_length) / 2); $str_reduced = preg_replace("/^.{0," . $offset . "}|.{0," . $offset . "}$/s", "", $str); $str_reduced = preg_replace("/^[^\s]+|[^\s]+$/s", "", $str_reduced); while ((strlen($str_reduced) + (2 * strlen($append))) > $max_length) { $str_reduced = preg_replace("/^(.*?\s)[^\s]+\s?$/s", "\\1", $str_reduced); if ((strlen($str_reduced) + (2 * strlen($append))) > $max_length) { $str_reduced = preg_replace("/^\s?[^\s]+(\s.*)$/s", "\\1", $str_reduced); } } $str_reduced = $append . $str_reduced . $append; } else if ($position == STR_REDUCE_CENTER) { $pattern = "/^(.{0," . floor($max_length / 2) . "}\s)|(\s.{0," . floor($max_length / 2) . "})$/s"; preg_match_all($pattern, $str, $matches); $begin_chunk = $matches[0][0]; $end_chunk = $matches[0][1]; while ((strlen($begin_chunk) + strlen($append) + strlen($end_chunk)) > $max_length) { $end_chunk = preg_replace("/^\s?[^\s]+(\s.*)$/s", "\\1", $end_chunk); if ((strlen($begin_chunk) + strlen($append) + strlen($end_chunk)) > $max_length) { $begin_chunk = preg_replace("/^(.*?\s)[^\s]+\s?$/s", "\\1", $begin_chunk); } } $str_reduced = $begin_chunk . $append . $end_chunk; } return htmlentities($str_reduced); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Dezembro 17, 2009 Humm... A funcionalidade é ótima, mais, dependendo da necessidade do programador, não vejo porque de um código desse tamanho... poderia ser o simples mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 17, 2009 Mas a questão toda não é o tamanho da função em linhas e sim sua necessidade e praticidade nos recursos que a função pode oferecer nao adianta ter uma função pequena que nao atende o que precisa, se atende blz. mas não sou contra funções pequenas, eu mesmo adoro fazer funções com poucas linhas ou 1 linha, mas a função tem que fazer o que precisa ser feito. :natal_wink: Compartilhar este post Link para o post Compartilhar em outros sites
gilbnet 4 Denunciar post Postado Dezembro 17, 2009 Verdade... Acredito que pela funcionalidade deveria ser algo menos "grande"... Agradeço ao retorno rápido e irei pesquisar alguma coisa se encontrar posterei aqui. bom achei esta aqui... no fórum mesmo que quiser ver ... http://forum.imasters.com.br/index.php?/topic/197740-funcao-de-resumo/ Tem esta aqui também que encontrei no google <?php $texto = "O rato roeu a roupa do rei de Roma."; $texto = explode(" ", substr($texto, 0, 25)); if(count($texto) > 1) array_pop($texto); $texto = implode(" ", $texto)."..."; echo $texto; // retorna: O rato roeu a roupa do... ?> Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Dezembro 17, 2009 Isso aí... vezes também uso essas funções, principalmente naqueles sistemas de notícias, etc. Legal. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 17, 2009 tem funções que são grandes mais cheios de encher linguiça, eu ja peguei funções com um monte de loop sendo que daria pra tirar a metade, ai sim a função ta obesa por exemplo eu tenho uma função que eu criei em 2005 para validar CNPJ que usa apenas 1 loop e poucas linhas, a maioria das funções por ai usa 2 loops :natal_w00t: Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Dezembro 17, 2009 É verdade, eu também já vi várias funções obesas, pra falar a verdade é o que mais tem por aí. Outra obesidade horrível em um script, é usar loop para pegar dados estáticos, referente apenas a um ID, quando se deve usar um simples fetch_array... essas e outras coisinhas acabam de uma certa forma "estragando o sistema", aí acaba dando, não só aparecência de grande, mais tambem, como você diz, "obeso" hehehehhee http://forum.imasters.com.br/public/style_emoticons/default/natal_laugh.gif Compartilhar este post Link para o post Compartilhar em outros sites
Luiz Fernando - Ampol 2 Denunciar post Postado Fevereiro 3, 2012 "eu sei que o tópico é antigo.." Esta função vai cortar a ultima palavra fora... Compartilhar este post Link para o post Compartilhar em outros sites