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.

fl3x7
quelle
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

Anil Singh
quelle
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:

Dustin Graham
quelle
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

Laurence
quelle
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

Vipertecpro
quelle
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,'....')  !!}
Raman Bhasker
quelle
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 }}
Guillaume Pommier
quelle
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

Ganesh Khadka
quelle
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!!}
Für Emma
quelle
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.

stefanr
quelle
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>
Shamsheer
quelle
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='...') }}
zahidsoft
quelle
Laravel 7, benutze nur {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello