Apakah ada pengubah truncate untuk template blade di Laravel, seperti Smarty?
Saya tahu saya bisa saja menulis php yang sebenarnya di template tetapi saya mencari sesuatu yang sedikit lebih bagus untuk ditulis (jangan membahas keseluruhan PHP adalah perdebatan mesin templating).
Jadi misalnya saya mencari sesuatu seperti:
{{ $myVariable|truncate:"10":"..." }}
Saya tahu saya dapat menggunakan sesuatu seperti Twig melalui komposer tetapi saya berharap untuk membangun fungsionalitas di Laravel itu sendiri.
Jika tidak, Anda dapat membuat pengubah yang dapat digunakan kembali seperti yang disediakan Smarty. Saya suka fakta bahwa Blade tidak berlebihan dengan semua sintaks tetapi menurut saya truncate adalah fungsi yang sangat berguna untuk dimiliki.
Saya menggunakan Laravel 4.
Jawaban:
Di Laravel 4 & 5 (hingga 5.7), Anda dapat menggunakan
str_limit
, yang membatasi jumlah karakter dalam sebuah string.Sementara di Laravel 5.8 ke atas, Anda bisa menggunakan
Str::limit
helper.//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='...') }}
Untuk lebih banyak fungsi pembantu Laravel http://laravel.com/docs/helpers#strings
sumber
str
pembantu dihapus Anda harus menggunakanIlluminate\Support\Str::limit($string)
sebagai gantinyaLaravel 4 memiliki
Str::limit
yang akan memotong ke jumlah karakter yang tepat, dan jugaStr::words
yang akan memotong batas kata.Periksa:
sumber
Str::words
ada di Larvel 5.2?Sunting: Jawaban ini telah diposting selama beta Laravel 4, ketika kelas Str tidak ada. Sekarang ada cara yang lebih baik untuk melakukannya di Laravel 4 - yang merupakan jawaban Dustin di bawah ini. Saya tidak dapat menghapus jawaban ini karena aturan SO (tidak akan membiarkan saya)
Blade sendiri tidak memiliki fungsi itu.
Di Laravel 3 ada kelas Str - yang dapat Anda lakukan:
{{ Str::limit($myVariable, 10) }}
Pada tahap ini saya tidak percaya kelas Str ada di Laravel 4 - tetapi ini adalah portnya yang dapat Anda sertakan dalam komposer untuk ditambahkan ke proyek Anda sendiri
sumber
batas Contoh:
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
Keluaran
Kata Contoh:
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
Keluaran
Perfectly balanced, as >>>
Untuk menggunakan helper di controller, jangan lupa untuk menyertakan / use class juga
use Illuminate\Support\Str;
Ini untuk menangani karakter dari string :
{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Keluaran
Ini untuk menangani kata-kata dari string :
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Keluaran
Berikut adalah dokumentasi helper terbaru untuk menangani string Laravel Helpers
sumber
Anda dapat mengatur namespace seperti:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
sumber
Untuk menjaga kode Anda KERING, dan jika konten Anda berasal dari model Anda, Anda harus mengadopsi pendekatan yang sedikit berbeda. Edit model Anda seperti ini (diuji di 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, '...'); } } ?>
Kemudian dalam pandangan Anda:
sumber
Ini berfungsi di Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
sumber
Anda dapat mengatur batas string seperti contoh di bawah ini:
<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>
Ini akan menampilkan hanya 20 huruf termasuk spasi dan diakhiri dengan ....
Contoh gambar
sumber
Untuk hal-hal sederhana seperti ini saya lebih suka membuat helper - misalnya:
buat
helpers.php
file di Anda/app/helpers.php
dengan konten berikut:<?php if (! function_exists('short_string')) { function short_string($str) { $rest = substr($str, 0, 10); return $rest; } }
Daftarkan
helper.php
di autoload di Andacomposer.json
"autoload": { "files": [ "app/helpers.php" ], "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }
Setelah itu Anda dapat menggunakan file blade Anda misalnya:
Anda dapat menggunakan fungsi sederhana ini, secara global di aplikasi Anda.
sumber
Pembaruan 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>
sumber
Di Laravel 4 & 5 (hingga 5.7), Anda dapat menggunakan str_limit, yang membatasi jumlah karakter dalam sebuah string.
Sementara di Laravel 7 ke atas, Anda dapat menggunakan helper Str :: limit.
//For Laravel to Laravel 7 {{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
sumber