web-dev-qa-db-fra.com

Tronquer la chaîne dans Laravel modèles de lame

Existe-t-il un modificateur de troncature pour les modèles de lames dans Laravel, assez semblable à Smarty?

Je sais que je pourrais simplement écrire le php réel dans le modèle, mais je cherche quelque chose d'un peu plus agréable à écrire (n'entrons pas dans l'ensemble PHP est un débat sur le moteur de modélisation).

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, il est possible de créer vos propres modificateurs réutilisables tels que fournis par Smarty. J'aime le fait que Blade n’excède pas toute la syntaxe, mais j’estime que tronquer est une fonction très pratique.

J'utilise Laravel 4.

66
fl3x7

Dans Laravel 4 & 5, vous pouvez utiliser str_limit, qui limite le nombre de caractères d'une chaîne.

{{ str_limit($string, $limit = 150, $end = '...') }}

Pour plus Laravel fonctions d'aide http://laravel.com/docs/helpers#strings

154
Anil Singh

Laravel 4 a Str::limit qui tronquera au nombre exact de caractères, ainsi que Str::words qui tronqueront la limite de Word.

Check-out:

37
Dustin Graham

Edit: Cette réponse a été postée pendant la version bêta de Laravel 4, lorsque la classe Str n'existait pas. Il existe maintenant un meilleur moyen de le faire dans Laravel 4 - ce qui est la réponse de Dustin ci-dessous. Je ne peux pas supprimer cette réponse en raison de règles SO (cela ne me le permettra pas)

La lame elle-même n'a pas cette fonctionnalité.

Dans Laravel 3, il y avait la classe Str - ce que vous pouvez faire:

{{ Str::limit($myVariable, 10) }}

A ce stade, je ne crois pas que la classe Str soit dans Laravel 4 - mais en voici un portage que vous pouvez inclure dans composer à ajouter à votre propre projet

29
Laurence

Vous pouvez définir l'espace de noms comme:

{!! \Illuminate\Support\Str::words($item->description, 10,'....')  !!}
6
Raman Bhasker

Pour que votre code soit gardé au sec, et si votre contenu provient de votre modèle, vous devez adopter une approche légèrement différente. Modifiez votre modèle comme suit (testé en L5.8):

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Comment extends Model
{
    public function getShortDescriptionAttribute()
    {
        return Str::words($this->description, 10, '...');
    }
}
?>

Alors à votre avis:

{{ $comment->short_description }}
4
Guillaume Pommier

Mise à jour Laravel 5.8

{!! Str::limit('Lorem ipsum dolor sit amet, consectetur adipisicing elit', 10, ' ...') !!}

sortie

Lorem ipsu ... 
3
Vipertecpro

Vous pouvez définir une limite de chaîne comme dans l'exemple ci-dessous:

<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>

Il n’affichera que les 20 lettres incluant les espaces et se termine par ....

Exemple d'image It shows the example of string limit

1
Ganesh Khadka

Cela fonctionne sur Laravel 5:

{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
1
Ofor Emma