Зрізати рядок у шаблонах леза Laravel


93

Чи є в Laravel модифікатор усічення для шаблонів лез, майже схожий на Smarty?

Я знаю, що міг би просто виписати фактичний php у шаблоні, але я шукаю щось дещо приємніше для написання (давайте не будемо вникати у весь PHP - це обговорення двигуна шаблонів).

Так, наприклад, я шукаю щось на зразок:

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

Я знаю, що я міг би використати щось на зразок Twig за допомогою композитора, але я сподіваюся на вбудовану функціональність у самому Laravel.

Якщо ні, то неможливо створити власні багаторазові модифікатори, як Smarty. Мені подобається той факт, що Blade не переборщує з усіма синтаксисом, але я думаю, що truncate - це дуже зручна функція.

Я використовую Laravel 4.


а як щодо laravel 5?
Hos Mercury

1
@HosMercury Для L5 см stackoverflow.com/questions/29281013 / ...
fl3x7

Відповіді:


199

У Laravel 4 & 5 (до 5,7) ви можете використовувати str_limit, що обмежує кількість символів у рядку.

Перебуваючи в Laravel 5.8, ви можете скористатися Str::limitпомічником.

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

Для отримання додаткових допоміжних функцій Laravel http://laravel.com/docs/helpers#strings


Правильна відповідь, оскільки варіант використання наведено у поданні Blade.
Фрісбетаріан

10
У версії 5.8 strвидалено помічників, яких ви повинні використовувати Illuminate\Support\Str::limit($string)замість цього
Хасан Азімі

1
str_limit застарів
Омер,

39

У Laravel 4 є усі, Str::limitякі будуть усічені до точної кількості символів, а також Str::wordsусічені на межі слова.

Перевіряти:


Чи знаєте ви, чи існує еквівалент Str::wordsу Larvel 5.2?
Jiedara

1
Ні. Схоже, це обмежує кількість слів зараз, а не символів. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Дастін Грем

Це те, що я шукав! Дякую !
Jiedara

32

Редагувати: Ця відповідь була опублікована під час бета-версії Laravel 4, коли класу Str не існувало. Зараз є кращий спосіб це зробити в Laravel 4 - це відповідь Дастіна нижче. Я не можу видалити цю відповідь через правила SO (це не дозволить мені)

Блейд сам не має такої функціональності.

У Laravel 3 був клас Str - це ви могли зробити:

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

На цьому етапі я не вірю, що клас Str знаходиться в Laravel 4 - але ось його порт, який ви можете включити до композитора, щоб додати до власного проекту


Дякую за пропозицію, здається, мені доведеться заглибитись і використовувати порти Мейдо, ха-ха
fl3x7

У наш час Laravel 4 має клас Str. Дивіться відповідь Дастіна hamрема.
trm42

Так - це правильно. Коли я спочатку розмістив цю відповідь, це було під час Laravel 4 Beta, коли клас Str не існував
Лоуренс

Де оригінальна відповідь? Наразі неможливо знайти будь-які документи протягом 4.1 ... :(
Srneczek,

16

Оновлення для Laravel 7. * : Fluent Strings, тобто більш плавний, об’єктно-орієнтований інтерфейс для роботи з рядковими значеннями, що дозволяє зв’язувати декілька рядкових операцій разом, використовуючи більш читабельний синтаксис у порівнянні з традиційними рядковими операціями.

Приклад обмеження :

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

Вихідні дані

The quick brown fox...

слова Приклад:

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

Вихідні дані

Perfectly balanced, as >>>

Оновлення для Laravel 6. * : Вам потрібен цей пакет, щоб працювати з усіма помічниками laravelcomposer require laravel/helpers

Для використання помічника в контролері, не забудьте також включити / використовувати клас

use Illuminate\Support\Str;

Laravel 5.8 Оновлення

Це для обробки символів із рядка :

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

Вихідні дані

Lorem ipsu ... 

Це для обробки слів із рядка :

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

Вихідні дані

Lorem ipsum ... 

Ось остання допоміжна документація щодо обробки рядків Laravel Helpers


1
дуже чистий розчин. працював у мене. найкраща відповідь IMO
maximus1127

@ maximus1127 Щиро дякую за ваші зусилля щодо навчання, я радий, що можу бути для вас корисним.
Vipertecpro

1
Чудово! Якусь відповідь, я хотів би побачити більше.
mhrabiee

Що станеться, якщо у вас буде рядок, як у долора Lorem ipsum, чи поверне він правильний результат?
Ріші

@Rishi Так, це поверне правильний результат, до речі про який метод ви говорите про обмеження? чи слова?
Vipertecpro

7

Ви можете встановити простір імен, наприклад:

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

5

Щоб ваш код був сухим, і якщо ваш вміст походить від вашої моделі, слід застосувати дещо інший підхід. Редагуйте свою модель так (протестовано в 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, '...');
    }
}
?>

Тоді на ваш погляд:

{{ $comment->short_description }}


2

Ви можете встановити обмеження рядків, як показано нижче:

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

Він буде відображати лише 20 літер, включаючи пробіли і закінчується ....

Приклад зображенняВін показує приклад обмеження рядків


Гей, брате, застаріло оновити вашу відповідь
Махді Сафарі

1

Для таких простих речей я хотів би зробити помічника - наприклад:

створити helpers.phpфайл у своєму файлі /app/helpers.phpіз таким вмістом:

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

Зареєструйте helper.phpпри автозавантаженні у своємуcomposer.json

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

Після цього ви можете використовувати у своєму файлі леза, наприклад:

{{ short_string($whatever_as_text) }}

Тоді ви можете використовувати цю просту функцію у всьому світі у своєму додатку.


0

Оновлення 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

У Laravel 4 & 5 (до 5.7) ви можете використовувати str_limit, який обмежує кількість символів у рядку.

Перебуваючи в Laravel 7, ви можете використовувати помічник Str :: limit.

//For Laravel  to Laravel 7

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

Laravel 7, використовуйте лише {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.