Laravel blade şablonlarında dizeyi kısaltın


93

Laravel'deki bıçak şablonları için Smarty'ye çok benzeyen bir kesik değiştirici var mı?

Şablondaki gerçek php'yi yazabileceğimi biliyorum, ancak yazmak için biraz daha hoş bir şey arıyorum (tüm PHP'ye girmeyelim, bir şablon motoru tartışmasıdır).

Yani örneğin şöyle bir şey arıyorum:

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

Besteci aracılığıyla Twig gibi bir şey kullanabileceğimi biliyorum ama Laravel'in kendisinde yerleşik işlevsellik olmasını umuyorum.

Değilse, Smarty'nin sağladığı gibi kendi yeniden kullanılabilir değiştiricilerinizi oluşturmak mümkündür. Blade'in tüm sözdizimi ile aşırıya kaçmamasını seviyorum, ancak truncate'in sahip olunması gereken gerçekten kullanışlı bir işlev olduğunu düşünüyorum.

Laravel 4 kullanıyorum.


ya laravel 5?
Hos Mercury

1
@HosMercury L5 için bkz stackoverflow.com/questions/29281013/…
fl3x7

Yanıtlar:


199

Laravel 4 & 5'te (5,7'ye kadar), str_limitbir dizedeki karakter sayısını sınırlayan kullanabilirsiniz .

Laravel 5.8 yukarıdayken, Str::limityardımcıyı kullanabilirsiniz .

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

Daha fazla Laravel yardımcı işlevi için http://laravel.com/docs/helpers#strings


Kullanım durumu Blade görünümünde olduğundan doğru yanıt.
Frisbetarian

10
Versiyonda 5,8 stryardımcıları kullanmak gerekir kaldırıldı got Illuminate\Support\Str::limit($string)yerine
Hasan Azimi

1
str_limit kullanımdan kaldırıldı
Omer

39

Laravel 4, Str::limitkarakter sayısını tam olarak kesecek ve ayrıca Str::wordskelime sınırında kesecek olana sahiptir .

Ödeme:


Str::wordsLarvel 5.2'de bir eşdeğeri olup olmadığını biliyor musunuz ?
Jiedara

1
Hayır. Görünüşe göre artık kelime sayısını sınırlıyor, karakterleri değil. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham

Aradığım buydu! Teşekkürler !
Jiedara

32

Düzenleme: Bu cevap Laravel 4 beta sırasında Str sınıfı mevcut olmadığında yayınlanmıştır. Şimdi Laravel 4'te bunu yapmanın daha iyi bir yolu var - bu da Dustin'in aşağıdaki cevabı. SO kuralları nedeniyle bu cevabı silemiyorum (izin vermiyor)

Blade'in kendisi bu işlevselliğe sahip değil.

Laravel 3'te Str sınıfı vardı - bunu yapabilirsiniz:

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

Bu aşamada Str sınıfının Laravel 4'te olduğuna inanmıyorum - ama burada kendi projenize eklemek için besteciye dahil edebileceğiniz bir liman var.


Öneriniz için teşekkürler, anlaşılan Meido bağlantı noktalarını girip kullanmak zorunda kalacağım lol
fl3x7

Günümüzde Laravel 4 Str sınıfına sahiptir. Dustin Graham'ın cevabına bakın.
trm42

Evet doğru. Bu cevabı ilk gönderdiğimde, Str sınıfının olmadığı Laravel 4 Beta sırasındaydı
Laurence

Orijinal cevap nerede? Şu anda 4.1 için herhangi bir belge bulmak imkansız ... :(
Srneczek

16

Laravel 7 için Güncelleme * : Fluent Strings, yani dize değerleriyle çalışmak için daha akıcı, nesneye yönelik bir arayüz, geleneksel dizgi işlemlerine kıyasla daha okunabilir bir sözdizimi kullanarak birden fazla dizi işlemini birbirine bağlamanıza olanak tanır.

limit Örnek:

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

Çıktı

The quick brown fox...

kelimeler Örnek:

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

Çıktı

Perfectly balanced, as >>>

Laravel 6 için güncelleme * : Bu paketin tüm laravel yardımcılarında çalışması için ihtiyacınız varcomposer require laravel/helpers

Denetleyicide yardımcı kullanmak için, sınıfı da eklemeyi / kullanmayı unutmayın

use Illuminate\Support\Str;

Laravel 5.8 Güncellemesi

Bu, dizedeki karakterleri işlemek içindir :

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

Çıktı

Lorem ipsu ... 

Bu, dizedeki kelimeleri işlemek içindir :

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

Çıktı

Lorem ipsum ... 

İşte dizi Laravel Yardımcıları işlemek için en son yardımcı dokümantasyon


1
çok temiz çözüm. benim için çalıştı. best answer IMO
maximus1127

@ maximus1127 Öğrenmeye yönelik çabalarınız için çok teşekkür ederim, sizin için faydalı olabildiğime sevindim.
Vipertecpro

1
Harika! Daha fazlasını görmek isterim.
mhrabiee

Lorem ipsum'un doloru gibi dizeleriniz olursa ne olacak? Doğru sonuç verecek mi?
Rishi

@Rishi Evet doğru sonuca dönecek, btw limit hakkında konuşuyorsunuz hangi yöntem? veya kelimeler?
Vipertecpro

7

Ad alanını şu şekilde ayarlayabilirsiniz:

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

5

Kodunuzu KURU tutmak için ve içeriğiniz modelinizden geliyorsa biraz farklı bir yaklaşım benimsemelisiniz. Modelinizi şu şekilde düzenleyin (L5.8'de test edilmiştir):

<?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, '...');
    }
}
?>

Sonra size göre:

{{ $comment->short_description }}

2

Bu Laravel 5 üzerinde çalışır:

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

2

Dize sınırını aşağıdaki örnek gibi ayarlayabilirsiniz:

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

Beyaz boşluklar dahil olmak üzere yalnızca 20 harfi görüntüler ve ... ile biter.

Örnek resimDize sınırı örneğini gösterir


Hey, kardeşim, kullanımdan kaldırıldı cevabını güncelle
Mahdi Safari

1

Bunun gibi basit şeyler için bir yardımcı yapmayı tercih ederim - örneğin:

aşağıdaki içeriğe sahip bir helpers.phpdosya oluşturun /app/helpers.php:

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

Kayıt helper.phpiçinde autoload adresindencomposer.json

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

Bundan sonra örneğin blade dosyanızda kullanabilirsiniz:

{{ short_string($whatever_as_text) }}

Bu basit işlevi daha sonra uygulamanızda global olarak kullanabilirsiniz.


0

Laravel 6 Güncellemesi:

@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'te (5.7'ye kadar), bir dizedeki karakter sayısını sınırlayan str_limit kullanabilirsiniz.

Laravel 7 yukarıdayken, Str :: limit yardımcısını kullanabilirsiniz.

//For Laravel  to Laravel 7

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

Laravel 7, yalnızca {{Str :: limit ($ chamado-> subClient-> name, 10)}} kullanın
João Mello
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.