Cắt ngắn chuỗi trong các mẫu lưỡi Laravel


92

Có công cụ sửa đổi cắt ngắn nào cho các mẫu lưỡi kiếm trong Laravel, khá giống với Smarty không?

Tôi biết tôi chỉ có thể viết ra php thực tế trong mẫu nhưng tôi đang tìm kiếm thứ gì đó đẹp hơn một chút để viết (chúng ta đừng đi sâu vào toàn bộ PHP là một cuộc tranh luận về công cụ tạo khuôn mẫu).

Vì vậy, ví dụ, tôi đang tìm kiếm một cái gì đó như:

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

Tôi biết tôi có thể sử dụng một cái gì đó giống như Twig thông qua trình soạn nhạc nhưng tôi hy vọng vào chức năng được tích hợp sẵn trong chính Laravel.

Nếu không, bạn có thể tạo các công cụ sửa đổi có thể sử dụng lại của riêng bạn như Smarty cung cấp. Tôi thích thực tế là Blade không sử dụng quá mức cần thiết với tất cả các cú pháp nhưng tôi nghĩ cắt ngắn là một chức năng thực sự tiện dụng cần có.

Tôi đang sử dụng Laravel 4.


còn laravel 5 thì sao?
Hos Mercury

Câu trả lời:


198

Trong Laravel 4 & 5 (lên đến 5,7), bạn có thể sử dụng str_limit, giới hạn số ký tự trong một chuỗi.

Trong khi ở Laravel 5.8 trở lên, bạn có thể sử dụng trình Str::limittrợ giúp.

//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='...') }}

Để biết thêm các chức năng của trình trợ giúp Laravel, http://laravel.com/docs/helpers#strings


Câu trả lời đúng vì trường hợp sử dụng nằm trong chế độ xem Blade.
Frisbetarian

10
Trong phiên bản 5.8 str giúp việc đã loại bỏ bạn phải sử dụng Illuminate\Support\Str::limit($string)thay vì
Hassan Azimi

1
str_limit không được dùng nữa
Omer

39

Laravel 4 có Str::limitsẽ cắt bớt số ký tự chính xác và cũng Str::wordssẽ cắt bớt ranh giới từ.

Thủ tục thanh toán:


Bạn có biết nếu một bản tương đương Str::wordstồn tại trong Larvel 5.2 không?
Jiedara

1
Không. Có vẻ như nó giới hạn số từ chứ không phải ký tự. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham

Đó là những gì tôi đang tìm kiếm! Cám ơn !
Jiedara

32

Chỉnh sửa: Câu trả lời này được đăng trong phiên bản beta Laravel 4, khi lớp Str không tồn tại. Bây giờ có một cách tốt hơn để làm điều đó trong Laravel 4 - đó là câu trả lời của Dustin dưới đây. Tôi không thể xóa câu trả lời này do quy tắc SO (nó sẽ không cho phép tôi)

Bản thân Blade không có chức năng đó.

Trong Laravel 3 có lớp Str - bạn có thể làm:

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

Ở giai đoạn này, tôi không tin rằng lớp Str có trong Laravel 4 - nhưng đây là một cổng của nó mà bạn có thể đưa vào trình soạn nhạc để thêm vào dự án của riêng bạn


Cảm ơn đã gợi ý, dường như tôi sẽ phải hang động và sử dụng các cổng Meido lol
fl3x7

Ngày nay, Laravel 4 có lớp Str. Hãy xem phản hồi của Dustin Graham.
trm42 15/12/13

Vâng - đó là chính xác. Khi tôi đăng câu trả lời này ban đầu, đó là trong Laravel 4 Beta, khi lớp Str không tồn tại
Laurence

Câu trả lời origianl ở đâu? Thật kỳ lạ khi không thể tìm thấy bất kỳ tài liệu nào cho 4.1 bây giờ ... :(
Srneczek

15

Cập nhật cho Laravel 7. * : Fluent Strings tức là một giao diện hướng đối tượng, trôi chảy hơn để làm việc với các giá trị chuỗi, cho phép bạn xâu chuỗi nhiều hoạt động chuỗi với nhau bằng cách sử dụng cú pháp dễ đọc hơn so với các hoạt động chuỗi truyền thống.

giới hạn Ví dụ:

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

Đầu ra

The quick brown fox...

từ Ví dụ:

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

Đầu ra

Perfectly balanced, as >>>

Cập nhật cho Laravel 6. * : Bạn yêu cầu gói này hoạt động với tất cả các trình trợ giúp của laravelcomposer require laravel/helpers

Để sử dụng helper trong controller, đừng quên bao gồm / sử dụng lớp

use Illuminate\Support\Str;

Laravel 5.8 Cập nhật

Đây là để xử lý ký tự từ chuỗi :

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

Đầu ra

Lorem ipsu ... 

Đây là để xử lý từ từ chuỗi :

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

Đầu ra

Lorem ipsum ... 

Đây là tài liệu trợ giúp mới nhất để xử lý Chuỗi trợ giúp Laravel


1
dung dịch rất sạch. đã làm cho tôi. câu trả lời hay nhất IMO
maximus1127

@ maximus1127 Cảm ơn bạn rất nhiều vì đã nỗ lực học tập, tôi rất vui vì mình có thể hữu ích cho bạn.
Vipertecpro

1
Tuyệt quá! Loại câu trả lời tôi muốn xem thêm.
mhrabiee

Điều gì sẽ xảy ra nếu bạn có chuỗi như dolor của Lorem ipsum nó sẽ trả về kết quả chính xác?
Rishi

@Rishi Vâng, nó sẽ trả về kết quả chính xác, btw bạn đang nói về giới hạn của phương pháp nào? hoặc lời nói?
Vipertecpro

7

Bạn có thể Đặt không gian tên như:

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

5

Để giữ cho mã của bạn KHÔ và nếu nội dung của bạn đến từ mô hình của bạn, bạn nên áp dụng một cách tiếp cận hơi khác. Chỉnh sửa mô hình của bạn như vậy (đã thử nghiệm trong 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, '...');
    }
}
?>

Sau đó, theo quan điểm của bạn:

{{ $comment->short_description }}

2

Điều này hoạt động trên Laravel 5:

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

2

Bạn có thể đặt giới hạn chuỗi như ví dụ dưới đây:

<td>{{str_limit($biodata ->description, $limit = 20, $end = '...')}}</td>

Nó sẽ chỉ hiển thị 20 chữ cái bao gồm khoảng trắng và kết thúc bằng ....

Hình ảnh ví dụNó cho thấy ví dụ về giới hạn chuỗi


Này, Anh em, không dùng nữa, hãy cập nhật câu trả lời của bạn
Mahdi Safari

1

Đối với những việc đơn giản như thế này, tôi muốn trở thành người trợ giúp - ví dụ:

tạo một helpers.phptệp trong của bạn /app/helpers.phpvới nội dung sau:

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

Đăng ký helper.phplúc autoload trong của bạncomposer.json

   "autoload": {
        "files": [
            "app/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    }

Sau đó, bạn có thể sử dụng trong tệp phiến của mình, ví dụ:

{{ short_string($whatever_as_text) }}

Sau đó, bạn có thể sử dụng chức năng đơn giản này trên toàn cầu trong ứng dụng của mình.


0

Cập nhật 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

Trong Laravel 4 & 5 (lên đến 5,7), bạn có thể sử dụng str_limit, giới hạn số ký tự trong một chuỗi.

Trong khi ở Laravel 7 trở lên, bạn có thể sử dụng Str :: limit helper.

//For Laravel  to Laravel 7

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

Laravel 7, chỉ sử dụng {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.