Czy istnieje modyfikator obcięcia dla szablonów ostrzy w Laravel, prawie jak Smarty?
Wiem, że mógłbym po prostu zapisać rzeczywisty php w szablonie, ale szukam czegoś ładniejszego do napisania (nie wchodźmy w całe PHP to debata o silnikach szablonów).
Na przykład szukam czegoś takiego:
{{ $myVariable|truncate:"10":"..." }}
Wiem, że mógłbym użyć czegoś takiego jak Twig za pośrednictwem kompozytora, ale mam nadzieję na wbudowaną funkcjonalność w samym Laravel.
Jeśli nie, możesz stworzyć własne modyfikatory wielokrotnego użytku, takie jak zapewnia Smarty. Podoba mi się fakt, że Blade nie przesadza z całą składnią, ale myślę, że obcinanie to naprawdę przydatna funkcja.
Używam Laravel 4.
Odpowiedzi:
W Laravel 4 i 5 (do 5,7) można użyć
str_limit
, co ogranicza liczbę znaków w ciągu.Będąc w Laravel 5.8 w górę, możesz skorzystać z
Str::limit
pomocnika.//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='...') }}
Więcej funkcji pomocniczych Laravel http://laravel.com/docs/helpers#strings
źródło
str
pomocnicy zostali usunięci, musiszIlluminate\Support\Str::limit($string)
zamiast tego użyćLaravel 4 ma,
Str::limit
który obetnie do dokładnej liczby znaków, a takżeStr::words
obcina na granicy słowa.Sprawdzić:
źródło
Str::words
istnieje w Larvel 5.2?Edycja: Ta odpowiedź została opublikowana podczas wersji beta Laravel 4, kiedy klasa Str nie istniała. W Laravel 4 jest teraz lepszy sposób na zrobienie tego - na co Dustin odpowiada poniżej. Nie mogę usunąć tej odpowiedzi ze względu na zasady SO (na to mi nie pozwala)
Samo ostrze nie ma takiej funkcjonalności.
W Laravel 3 była klasa Str - co można było zrobić:
{{ Str::limit($myVariable, 10) }}
Na tym etapie nie wierzę, że klasa Str znajduje się w Laravel 4 - ale tutaj jest jej port, który możesz włączyć do kompozytora, aby dodać do własnego projektu
źródło
limit Przykład:
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
Wynik
słowa Przykład:
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
Wynik
Perfectly balanced, as >>>
Aby używać pomocnika w kontrolerze, nie zapomnij również dołączyć / użyć klasy
use Illuminate\Support\Str;
To służy do obsługi znaków z ciągu :
{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Wynik
To służy do obsługi słów z ciągu :
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Wynik
Oto najnowsza dokumentacja pomocnicza dotycząca obsługi pomocników Laravel string
źródło
Możesz ustawić przestrzeń nazw na przykład:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
źródło
Aby kod był SUCHY, a treść pochodzi z modelu, należy przyjąć nieco inne podejście. Edytuj swój model w ten sposób (testowane w 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, '...'); } } ?>
Zatem Twoim zdaniem:
źródło
Działa to na Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
źródło
Możesz ustawić limit ciągu, jak na poniższym przykładzie:
<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>
Wyświetli tylko 20 liter, w tym spacje i kończy się na ....
Przykładowe zdjęcie
źródło
W przypadku prostych rzeczy, takich jak ta, wolałbym zrobić pomocnika - na przykład:
utwórz
helpers.php
plik w swoim/app/helpers.php
z następującą zawartością:<?php if (! function_exists('short_string')) { function short_string($str) { $rest = substr($str, 0, 10); return $rest; } }
Zarejestruj
helper.php
at autoload w swoimcomposer.json
"autoload": { "files": [ "app/helpers.php" ], "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }
Następnie możesz użyć w swoim pliku ostrza na przykład:
Możesz więc używać tej prostej funkcji globalnie w swojej aplikacji.
źródło
Aktualizacja 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>
źródło
W Laravel 4 i 5 (do 5.7) możesz użyć str_limit, który ogranicza liczbę znaków w ciągu.
Będąc w Laravel 7 w górę, możesz skorzystać z pomocnika Str :: limit.
//For Laravel to Laravel 7 {{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
źródło