Обрезать строку в шаблонах лезвий 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.
Frisbetarian

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 04

32

Изменить: этот ответ был опубликован во время бета-версии Laravel 4, когда класс Str не существовал. Теперь есть лучший способ сделать это в Laravel 4 - ответ Дастина ниже. Я не могу удалить этот ответ из-за правил SO (это не позволит мне)

Сам Blade не имеет такой функции.

В Laravel 3 был класс Str, который вы могли сделать:

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

На данном этапе я не верю, что класс Str находится в Laravel 4, но вот его порт, который вы можете включить в композитор, чтобы добавить в свой собственный проект.


Спасибо за предложение, кажется, мне придется уступить и использовать порты Meido lol
fl3x7

В настоящее время в Laravel 4 есть класс Str. См. Ответ Дастина Грэма.
trm42

Да, это правильно. Когда я изначально опубликовал этот ответ, это было во время бета-тестирования Laravel 4, когда класс Str не существовал
Лоуренс

Где оригинальный ответ? Чертовски невозможно найти какие-либо документы для 4.1 сейчас ... :(
Srneczek

15

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

limit Пример:

$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. * : этот пакет необходим для работы всех помощников laravel.composer 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

Что произойдет, если у вас будет такая строка, как dolor Lorem ipsum, вернет ли она правильный результат?
Риши

@Rishi Да, он вернет правильный результат, кстати, о каком методе вы говорите? или слова?
Vipertecpro


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автозагрузку at в своем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 up, вы можете использовать помощник Str :: limit.

//For Laravel  to Laravel 7

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

Laravel 7, используйте только {{Str :: limit ($ chamado-> subClient-> name, 10)}}
Жоао Мелло,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.