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


92

Existe-t-il un modificateur tronqué pour les modèles de lames dans Laravel, un peu comme Smarty?

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

Par exemple, je recherche quelque chose comme:

{{ $myVariable|truncate:"10":"..." }}

Je sais que je pourrais utiliser quelque chose comme Twig via composer mais j'espère des fonctionnalités intégrées dans Laravel lui-même.

Sinon, il est possible de créer vos propres modificateurs réutilisables comme Smarty le propose. J'aime le fait que Blade ne soit pas excessif avec toute la syntaxe, mais je pense que truncate est une fonction vraiment pratique à avoir.

J'utilise Laravel 4.


qu'en est-il de laravel 5?
Hos Mercury

1
@HosMercury Pour L5, voir stackoverflow.com/questions/29281013/…
fl3x7

Réponses:


198

Dans Laravel 4 & 5 (jusqu'à 5.7), vous pouvez utiliser str_limit, ce qui limite le nombre de caractères dans une chaîne.

Dans Laravel 5.8 up, vous pouvez utiliser l' Str::limitassistant.

//For Laravel 4 to Laravel 5.5
{{ str_limit($string, $limit = 150, $end = '...') }}
//For Laravel 5.5 upwards
{{ \Illuminate\Support\Str::limit($string, 150, $end='...') }}

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


Bonne réponse car le cas d'utilisation est en vue Blade.
Frisbetarian

10
Dans la version 5.8, les straides ont été supprimées, vous devez les utiliser à la Illuminate\Support\Str::limit($string)place
Hassan Azimi

1
str_limit est obsolète
Omer

39

Laravel 4 a Str::limitce qui tronquera au nombre exact de caractères, et aussi Str::wordsqui tronquera sur la limite du mot.

Check-out:


Savez-vous si un équivalent de Str::wordsexiste dans Larvel 5.2?
Jiedara

1
Non. On dirait que cela limite maintenant le nombre de mots, pas de caractères. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham

C'était ce que je cherchais! Merci !
Jiedara

32

Edit: Cette réponse a été publiée lors de la version bêta de Laravel 4, lorsque la classe Str n'existait pas. Il existe 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 - ce que vous pouviez faire:

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

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


Merci pour la suggestion, il semble que je
devrai céder

Aujourd'hui, Laravel 4 a la classe Str. Voir la réponse de Dustin Graham.
trm42

Oui c'est correct. Quand j'ai initialement publié cette réponse, c'était pendant la bêta de Laravel 4, quand la classe Str n'existait pas
Laurence

Où est la réponse originale? Son effrayant impossible de trouver des documents pour 4.1 maintenant ... :(
Srneczek

15

Mise à jour pour Laravel 7. * : Fluent Strings, c'est-à-dire une interface plus fluide et orientée objet pour travailler avec des valeurs de chaîne, vous permettant d'enchaîner plusieurs opérations de chaîne en utilisant une syntaxe plus lisible par rapport aux opérations de chaîne traditionnelles.

Exemple de limite :

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);

Production

The quick brown fox...

mots Exemple:

$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');

Production

Perfectly balanced, as >>>

Mise à jour pour Laravel 6. * : Vous avez besoin de ce package pour fonctionner avec tous les helpers laravelcomposer require laravel/helpers

Pour utiliser helper dans le contrôleur, n'oubliez pas d'inclure / utiliser également la classe

use Illuminate\Support\Str;

Mise à jour Laravel 5.8

C'est pour gérer les caractères de la chaîne :

{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}

Production

Lorem ipsu ... 

C'est pour gérer les mots de la chaîne :

{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}

Production

Lorem ipsum ... 

Voici la dernière documentation d'aide pour la gestion des chaînes Laravel Helpers


1
solution très propre. travaillé pour moi. meilleure réponse IMO
maximus1127

@ maximus1127 Merci beaucoup pour vos efforts d'apprentissage, je suis heureux de pouvoir vous être utile.
Vipertecpro

1
Génial! Genre de réponse j'aimerais en voir plus.
mhrabiee le

Que se passera-t-il si vous avez une chaîne comme la couleur de Lorem ipsum retournera-t-elle un résultat correct?
Rishi

@Rishi Oui, il retournera le résultat correct, btw de quelle méthode parlez-vous de limite? ou des mots?
Vipertecpro

7

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

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

5

Pour garder votre code 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 tel (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, '...');
    }
}
?>

Ensuite, à votre avis:

{{ $comment->short_description }}

2

Cela fonctionne sur Laravel 5:

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

2

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, espaces compris et se termine par ...

Exemple d'imageIl montre l'exemple de limite de chaîne


Hé, mon frère, il est obsolète de mettre à jour votre réponse
Mahdi Safari

1

Pour des choses simples comme celle-ci, je préférerais faire une aide - par exemple:

créez un helpers.phpfichier dans votre /app/helpers.phpavec le contenu suivant:

<?php
if (! function_exists('short_string')) {
    function short_string($str) {
            $rest = substr($str, 0, 10);
            return $rest;
    }
}

Enregistrez le helper.phpat autoload dans votrecomposer.json

   "autoload": {
        "files": [
            "app/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    }

Après cela, vous pouvez utiliser dans votre fichier lame par exemple:

{{ short_string($whatever_as_text) }}

Vous pouvez utiliser cette fonction simple, ensuite, globalement dans votre application.


0

Mise à jour de Laravel 6:

@php
$value = 'Artificial Intelligence';
$var = Str::limit($value, $limit = 15, $end = '');
print_r($var);
@endphp

<p class="card-text">{{ Illuminate\Support\Str::limit($value, 7) }}</p>
<h2 class="main-head">{!! Str::limit($value, 5) !!}</h2>

0

Dans Laravel 4 & 5 (jusqu'à 5.7), vous pouvez utiliser str_limit, qui limite le nombre de caractères dans une chaîne.

Dans Laravel 7, vous pouvez utiliser l'assistant Str :: limit.

//For Laravel  to Laravel 7

{{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}

Laravel 7, utilisez uniquement {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.