Potong string di template blade Laravel

93

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.

fl3x7
sumber
bagaimana dengan laravel 5?
Hos Mercury
1
@HosMercury Untuk L5 lihat stackoverflow.com/questions/29281013/…
fl3x7

Jawaban:

199

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::limithelper.

//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

Anil Singh
sumber
Jawaban yang benar karena kasus penggunaan dalam tampilan Blade.
Frisbetarian
10
Dalam versi 5.8 strpembantu dihapus Anda harus menggunakan Illuminate\Support\Str::limit($string)sebagai gantinya
Hassan Azimi
1
str_limit tidak digunakan lagi
Omer
39

Laravel 4 memiliki Str::limityang akan memotong ke jumlah karakter yang tepat, dan juga Str::wordsyang akan memotong batas kata.

Periksa:

Dustin Graham
sumber
Apakah Anda tahu jika yang setara Str::wordsada di Larvel 5.2?
Jiedara
1
Tidak. Sepertinya sekarang membatasi jumlah kata, bukan karakter. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham
Itulah yang saya cari! Terima kasih !
Jiedara
32

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

Laurence
sumber
Terima kasih atas sarannya, sepertinya saya harus
mengalah
Saat ini Laravel 4 memiliki kelas Str. Lihat tanggapan Dustin Graham.
trm42
Ya itu benar. Ketika saya awalnya memposting jawaban ini selama Laravel 4 Beta, ketika kelas Str tidak ada
Laurence
Dimana jawaban origianlnya? Sangat mustahil menemukan dokumen apa pun untuk 4.1 sekarang ... :(
Srneczek
15

Pembaruan untuk Laravel 7. * : Fluent Strings yaitu antarmuka berorientasi objek yang lebih lancar untuk bekerja dengan nilai string, memungkinkan Anda untuk merangkai beberapa operasi string bersama-sama menggunakan sintaks yang lebih mudah dibaca dibandingkan dengan operasi string tradisional.

batas Contoh:

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

Keluaran

The quick brown fox...

Kata Contoh:

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

Keluaran

Perfectly balanced, as >>>

Pembaruan untuk Laravel 6. * : Anda memerlukan paket ini untuk bekerja dengan semua pembantu laravelcomposer require laravel/helpers

Untuk menggunakan helper di controller, jangan lupa untuk menyertakan / use class juga

use Illuminate\Support\Str;

Pembaruan Laravel 5.8

Ini untuk menangani karakter dari string :

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

Keluaran

Lorem ipsu ... 

Ini untuk menangani kata-kata dari string :

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

Keluaran

Lorem ipsum ... 

Berikut adalah dokumentasi helper terbaru untuk menangani string Laravel Helpers

Vipertecpro
sumber
1
solusi yang sangat bersih. bekerja untuk saya. jawaban terbaik IMO
maximus1127
@ maximus1127 Terima kasih banyak atas upaya Anda untuk belajar, saya senang saya dapat berguna untuk Anda.
Vipertecpro
1
Bagus! Jenis jawaban saya ingin melihat lebih banyak.
mhrabiee
Apa yang akan terjadi jika Anda memiliki string seperti dolor Lorem ipsum akan mengembalikan hasil yang benar?
Rishi
@Rishi Ya itu akan mengembalikan hasil yang benar, btw metode mana yang Anda bicarakan tentang batas? atau kata-kata?
Vipertecpro
7

Anda dapat mengatur namespace seperti:

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

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:

{{ $comment->short_description }}
Guillaume Pommier
sumber
2

Ini berfungsi di Laravel 5:

{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
Ofor Emma
sumber
2

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 gambarIni menunjukkan contoh batas string

Ganesh Khadka
sumber
Hei, Saudaraku, sudah usang perbarui jawaban Anda
Mahdi Safari
1

Untuk hal-hal sederhana seperti ini saya lebih suka membuat helper - misalnya:

buat helpers.phpfile di Anda /app/helpers.phpdengan konten berikut:

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

Daftarkan helper.phpdi 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:

{{ short_string($whatever_as_text) }}

Anda dapat menggunakan fungsi sederhana ini, secara global di aplikasi Anda.

Stefanr
sumber
0

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>
Shamsheer
sumber
0

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='...') }}
zahidsoft
sumber
Laravel 7, gunakan hanya {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello