Schneiden Sie die Zeichenfolge in Laravel-Blade-Vorlagen ab


91

Gibt es in Laravel einen Modifikator zum Abschneiden der Blade-Vorlagen, ähnlich wie bei Smarty?

Ich weiß, ich könnte einfach das eigentliche PHP in die Vorlage schreiben, aber ich bin auf der Suche nach etwas Schönerem zum Schreiben (lassen Sie uns nicht auf das gesamte PHP eingehen, ist eine Template-Engine-Debatte).

So suche ich zum Beispiel nach etwas wie:

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

Ich weiß, dass ich über Composer so etwas wie Twig verwenden könnte, aber ich hoffe auf eine integrierte Funktionalität in Laravel.

Wenn nicht, können Sie Ihre eigenen wiederverwendbaren Modifikatoren erstellen, wie sie Smarty bereitstellt. Ich mag die Tatsache, dass Blade nicht mit der gesamten Syntax überfordert ist, aber ich denke, dass das Abschneiden eine sehr praktische Funktion ist.

Ich benutze Laravel 4.


Was ist mit Laravel 5?
Hos Mercury

1
@HosMercury Für L5 siehe stackoverflow.com/questions/29281013/…
fl3x7

Antworten:


197

In Laravel 4 & 5 (bis zu 5.7) können Sie verwenden str_limit, wodurch die Anzahl der Zeichen in einer Zeichenfolge begrenzt wird.

In Laravel 5.8 können Sie den Str::limitHelfer verwenden.

//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='...') }}

Weitere Laravel-Hilfsfunktionen finden Sie unter http://laravel.com/docs/helpers#strings


Richtige Antwort, da sich der Anwendungsfall in der Blade-Ansicht befindet.
Frisbetarian

10
In Version 5.8 wurden strHelfer entfernt, die Sie Illuminate\Support\Str::limit($string)stattdessen verwenden müssen
Hassan Azimi

1
str_limit ist veraltet
Omer

39

Laravel 4 hat Str::limitwelche, die auf die genaue Anzahl von Zeichen Str::wordsabgeschnitten werden , und welche auch an der Wortgrenze abgeschnitten werden.

Auschecken:


Wissen Sie, ob Str::wordses in Larvel 5.2 ein Äquivalent von gibt?
Jiedara

1
Nein. Sieht so aus, als würde die Anzahl der Wörter jetzt begrenzt, nicht der Zeichen. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham

Das habe ich gesucht! Vielen Dank !
Jiedara

32

Bearbeiten: Diese Antwort wurde während der Beta von Laravel 4 veröffentlicht, als die Str-Klasse nicht existierte. In Laravel 4 gibt es jetzt einen besseren Weg - das ist Dustins Antwort unten. Ich kann diese Antwort aufgrund von SO-Regeln nicht löschen (das lässt mich nicht)

Blade selbst verfügt nicht über diese Funktionalität.

In Laravel 3 gab es die Str-Klasse - was Sie tun konnten:

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

Derzeit glaube ich nicht, dass sich die Str-Klasse in Laravel 4 befindet - aber hier ist eine Portierung davon, die Sie in den Komponisten aufnehmen können , um sie Ihrem eigenen Projekt hinzuzufügen


Vielen Dank für den Vorschlag, anscheinend muss ich nachgeben und die Meido-Ports benutzen lol
fl3x7

Heutzutage hat Laravel 4 die Str-Klasse. Siehe Dustin Grahams Antwort.
trm42

Ja, das ist richtig. Als ich diese Antwort ursprünglich veröffentlichte, war es während der Laravel 4 Beta, als die Str-Klasse nicht existierte
Laurence

Wo ist die ursprüngliche Antwort? Es ist verdammt unmöglich, jetzt irgendwelche Dokumente für 4.1 zu finden ... :(
Srneczek

14

Update für Laravel 7. * : Fließende Zeichenfolgen, dh eine flüssigere, objektorientierte Schnittstelle für die Arbeit mit Zeichenfolgenwerten, mit der Sie mehrere Zeichenfolgenoperationen mit einer im Vergleich zu herkömmlichen Zeichenfolgenoperationen besser lesbaren Syntax miteinander verketten können.

limit Beispiel:

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

Ausgabe

The quick brown fox...

Wörter Beispiel:

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

Ausgabe

Perfectly balanced, as >>>

Update für Laravel 6. * : Sie benötigen dieses Paket, um alle Laravel-Helfer zu unterstützencomposer require laravel/helpers

Vergessen Sie bei der Verwendung von Helper in Controller nicht, auch die Klasse einzuschließen / zu verwenden

use Illuminate\Support\Str;

Laravel 5.8 Update

Dies dient zum Behandeln von Zeichen aus der Zeichenfolge :

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

Ausgabe

Lorem ipsu ... 

Dies dient zum Behandeln von Wörtern aus der Zeichenfolge :

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

Ausgabe

Lorem ipsum ... 

Hier finden Sie die neueste Helferdokumentation für den Umgang mit String- Laravel-Helfern


1
sehr saubere Lösung. arbeitete für mich. beste Antwort IMO
maximus1127

@ maximus1127 Vielen Dank für Ihre Bemühungen um das Lernen. Ich bin froh, dass ich für Sie nützlich sein kann.
Vipertecpro

1
Toll! Eine Art Antwort, die ich gerne mehr sehen würde.
Mhrabiee

Was passiert, wenn Sie eine Zeichenfolge wie Lorem ipsums Farbe haben? Wird sie das richtige Ergebnis zurückgeben?
Rishi

@Rishi Ja, es wird das richtige Ergebnis zurückgegeben. Übrigens, über welche Methode sprechen Sie? oder Worte?
Vipertecpro

7

Sie können den Namespace wie folgt festlegen:

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

5

Um Ihren Code trocken zu halten und wenn Ihr Inhalt von Ihrem Modell stammt, sollten Sie einen etwas anderen Ansatz wählen. Bearbeiten Sie Ihr Modell wie folgt (getestet in 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, '...');
    }
}
?>

Dann aus Ihrer Sicht:

{{ $comment->short_description }}

2

Sie können das String-Limit wie folgt festlegen:

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

Es werden nur die 20 Buchstaben einschließlich Leerzeichen angezeigt und endet mit ....

BeispielbildEs zeigt das Beispiel der Zeichenfolgenbegrenzung


Hey, Bruder, es ist veraltet, deine Antwort zu aktualisieren
Mahdi Safari

1

Dies funktioniert auf Laravel 5:

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

1

Für einfache Dinge wie diese würde ich lieber einen Helfer machen - zum Beispiel:

Erstellen Sie eine helpers.phpDatei in Ihrem /app/helpers.phpmit folgenden Inhalten:

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

Registrieren Sie sich helper.phpbei autoload in Ihremcomposer.json

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

Danach können Sie in Ihrer Blade-Datei beispielsweise Folgendes verwenden:

{{ short_string($whatever_as_text) }}

Sie können diese einfache Funktion dann global in Ihrer App verwenden.


0

Laravel 6 Update:

@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

In Laravel 4 & 5 (bis zu 5.7) können Sie str_limit verwenden, wodurch die Anzahl der Zeichen in einer Zeichenfolge begrenzt wird.

In Laravel 7 können Sie den Str :: limit-Helfer verwenden.

//For Laravel  to Laravel 7

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

Laravel 7, benutze nur {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.