Обрезать строку в шаблонах лезвий Laravel

93

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

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

Так, например, я ищу что-то вроде:

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

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

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

Я использую Laravel 4.

fl3x7
источник
как насчет 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

Vipertecpro
источник
1
очень чистое решение. работал у меня. лучший ответ IMO
maximus1127
@ maximus1127 Большое спасибо за ваши усилия по обучению, я рад, что могу быть вам полезен.
Vipertecpro
1
Большой! Вид ответа, я бы хотел увидеть больше.
mhrabiee
Что произойдет, если у вас будет такая строка, как dolor 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

Это работает на Laravel 5:

{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
Офор Эмма
источник
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)}}
Жоао Мелло,