Есть ли модификатор усечения для шаблонов лезвий в Laravel, очень похожий на Smarty?
Я знаю, что могу просто записать реальный php в шаблоне, но я ищу что-то более приятное для написания (давайте не будем вдаваться в подробности PHP - это дискуссия о движке шаблонов).
Так, например, я ищу что-то вроде:
{{ $myVariable|truncate:"10":"..." }}
Я знаю, что могу использовать что-то вроде Twig через композитор, но я надеюсь на встроенную функциональность в самом Laravel.
Если нет, то можно создать свои собственные многоразовые модификаторы, такие как Smarty. Мне нравится тот факт, что Blade не перебарщивает с синтаксисом, но я думаю, что truncate - действительно удобная функция.
Я использую Laravel 4.
Ответы:
В 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
источник
str
были удалены помощники, которые вы должны использоватьIlluminate\Support\Str::limit($string)
вместо нихВ Laravel 4 есть
Str::limit
усечение до точного количества символов, а такжеStr::words
усечение по границе слова.Проверять, выписываться:
источник
Str::words
в Larvel 5.2?Изменить: этот ответ был опубликован во время бета-версии Laravel 4, когда класс Str не существовал. Теперь есть лучший способ сделать это в Laravel 4 - ответ Дастина ниже. Я не могу удалить этот ответ из-за правил SO (это не позволит мне)
Сам Blade не имеет такой функции.
В Laravel 3 был класс Str, который вы могли сделать:
{{ Str::limit($myVariable, 10) }}
На данном этапе я не верю, что класс Str находится в Laravel 4, но вот его порт, который вы можете включить в композитор, чтобы добавить в свой собственный проект.
источник
limit Пример:
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
Выход
слова Пример:
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
Выход
Perfectly balanced, as >>>
Для использования помощника в контроллере не забудьте также включить / использовать класс
use Illuminate\Support\Str;
Это для обработки символов из строки :
{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Выход
Это для обработки слов из строки :
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Выход
Вот последняя вспомогательная документация для обработки строк Laravel Helpers
источник
Вы можете установить пространство имен, например:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
источник
Чтобы ваш код оставался СУХИМ, и если ваш контент исходит из вашей модели, вам следует принять немного другой подход. Отредактируйте свою модель так (проверено в 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, '...'); } } ?>
Тогда, на ваш взгляд:
источник
Это работает на Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
источник
Вы можете установить ограничение строки, как показано ниже:
<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>
Он отобразит только 20 букв, включая пробелы, и оканчивается на ....
Пример изображения
источник
Для таких простых вещей я бы предпочел сделать помощника, например:
создайте
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" ] }
После этого вы можете использовать в своем файле лезвия, например:
Затем вы можете использовать эту простую функцию в своем приложении глобально.
источник
Обновление 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>
источник
В 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='...') }}
источник