Tronquer la chaîne dans les modèles de lame Laravel
Y a-t-il un modificateur tronqué pour les modèles de lame dans Laravel, à peu près comme Smarty?
Je sais que je pourrais juste écrire le php réel dans le template mais je cherche quelque chose d'un peu plus agréable à écrire (n'entrons pas dans tout le php est un débat de moteur de modèle).
Donc, par exemple, je cherche quelque chose comme:
{{ $myVariable|truncate:"10":"..." }}
Je sais que je pourrais utiliser quelque chose comme Twig via composer mais j'espère une fonctionnalité intégrée dans Laravel lui-même.
Sinon est-il possible de créer vos propres modificateurs réutilisables comme Smarty fournit. J'aime le fait que Blade n'exagère pas avec toute la syntaxe mais je pense que truncate est une vraie fonction pratique à avoir.
J'utilise Laravel 4.
5 réponses
Dans Laravel 4 & 5, vous pouvez utiliser str_limit
, ce qui limite le nombre de caractères dans une chaîne.
{{ str_limit($string, $limit = 150, $end = '...') }}
Pour plus de Laravel des fonctions d'assistance http://laravel.com/docs/helpers#strings
Laravel 4 A Str::limit
qui va tronquer au nombre exact de caractères, et aussi Str::words
qui va tronquer sur la limite des mots.
Vérifier:
Edit: cette réponse a été publiée pendant la bêta de Laravel 4, lorsque la classe Str n'existait pas. Il y a maintenant une meilleure façon de le faire dans Laravel 4-qui est la réponse de Dustin ci-dessous. Je ne peux pas supprimer cette réponse en raison des règles SO (cela ne me laissera pas)
Blade lui-même n'a pas cette fonctionnalité.
Dans Laravel 3 Il y avait la classe Str-que vous pouviez faire:
{{ Str::limit($myVariable, 10) }}
A ce stade, Je ne crois pas que la classe Str est dans Laravel 4 - Mais voici un port de celui-ci que vous pouvez inclure dans compositeur pour ajouter à votre propre projet
, Vous pouvez Définir l'espace de noms comme:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
Cela fonctionne sur Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}