Truncar cadena en plantillas de hoja de Laravel

93

¿Hay un modificador de truncar para las plantillas de hoja en Laravel, muy parecido a Smarty?

Sé que podría escribir el php real en la plantilla, pero estoy buscando algo un poco más agradable para escribir (no entremos en todo el PHP, es un debate sobre el motor de plantillas).

Entonces, por ejemplo, estoy buscando algo como:

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

Sé que podría usar algo como Twig a través del compositor, pero espero tener una funcionalidad incorporada en Laravel.

Si no es así, es posible crear sus propios modificadores reutilizables como los que ofrece Smarty. Me gusta el hecho de que Blade no se exagera con toda la sintaxis, pero creo que truncar es una función realmente útil.

Estoy usando Laravel 4.

fl3x7
fuente
¿qué pasa con laravel 5?
Hos Mercury
1
@HosMercury para L5, consulte stackoverflow.com/questions/29281013/…
fl3x7

Respuestas:

199

En Laravel 4 y 5 (hasta 5.7), puede usar str_limit, lo que limita la cantidad de caracteres en una cadena.

Mientras estés en Laravel 5.8 en adelante, puedes usar el Str::limitayudante.

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

Para más funciones de ayuda de Laravel http://laravel.com/docs/helpers#strings

Anil Singh
fuente
Respuesta correcta ya que el caso de uso está en la vista Blade.
Frisbetarian
10
En la versión 5.8, strse eliminaron los ayudantes que debe usar Illuminate\Support\Str::limit($string)en su lugar
Hassan Azimi
1
str_limit está en desuso
Omer
39

Laravel 4 tiene Str::limitque truncará al número exacto de caracteres, y tambiénStr::words que se truncará en el límite de la palabra.

Revisa:

Dustin Graham
fuente
¿Sabes si Str::wordsexiste un equivalente de en Larvel 5.2?
Jiedara
1
No. Parece que ahora limita el número de palabras, no de caracteres. github.com/laravel/framework/blob/5.2/src/Illuminate/Support/…
Dustin Graham
¡Eso era lo que estaba buscando! Gracias !
Jiedara
32

Editar: Esta respuesta se publicó durante la versión beta de Laravel 4, cuando la clase Str no existía. Ahora hay una mejor manera de hacerlo en Laravel 4, que es la respuesta de Dustin a continuación. No puedo eliminar esta respuesta debido a las reglas SO (no me deja)

Blade en sí no tiene esa funcionalidad.

En Laravel 3 estaba la clase Str, que podía hacer:

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

En esta etapa, no creo que la clase Str esté en Laravel 4, pero aquí hay una versión que puede incluir en el compositor para agregar a su propio proyecto

Laurence
fuente
Gracias por la sugerencia, parece que tendré que ceder y usar los puertos de Meido lol
fl3x7
Hoy en día, Laravel 4 tiene la clase Str. Vea la respuesta de Dustin Graham.
trm42
Si, eso es correcto. Cuando publiqué esta respuesta originalmente fue durante Laravel 4 Beta, cuando la clase Str no existía
Laurence
¿Dónde está la respuesta original? Es increíblemente imposible encontrar documentos para 4.1 ahora ... :(
Srneczek
15

Actualización para Laravel 7. * : Cadenas fluidas, es decir, una interfaz más fluida y orientada a objetos para trabajar con valores de cadena, lo que le permite encadenar varias operaciones de cadena juntas usando una sintaxis más legible en comparación con las operaciones de cadena tradicionales.

límite Ejemplo:

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

Salida

The quick brown fox...

palabras Ejemplo:

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

Salida

Perfectly balanced, as >>>

Actualización para Laravel 6. * : Necesita este paquete para trabajar con todos los ayudantes de Laravelcomposer require laravel/helpers

Para usar helper en el controlador, no olvide incluir / usar la clase también

use Illuminate\Support\Str;

Laravel 5.8 Actualizar

Esto es para manejar caracteres de la cadena :

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

Salida

Lorem ipsu ... 

Esto es para manejar palabras de la cadena :

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

Salida

Lorem ipsum ... 

Aquí está la documentación de ayuda más reciente para manejar la cadena Laravel Helpers

Vipertecpro
fuente
1
solución muy limpia. trabajó para mi. la mejor respuesta IMO
maximus1127
@ maximus1127 Muchas gracias por sus esfuerzos para aprender, me alegra poder serle útil.
Vipertecpro
1
¡Excelente! Tipo de respuesta que me encantaría ver más.
mhrabiee
¿Qué pasará si tienes una cuerda como el dolor de Lorem ipsum, devolverá el resultado correcto?
Rishi
@Rishi Sí, devolverá el resultado correcto, por cierto, ¿de qué método estás hablando de límite? o palabras?
Vipertecpro
7

Puede establecer el espacio de nombres como:

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

Para mantener su código SECO, y si su contenido proviene de su modelo, debe adoptar un enfoque ligeramente diferente. Edite su modelo así (probado en 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, '...');
    }
}
?>

Entonces, en su opinión:

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

Esto funciona en Laravel 5:

{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
O para Emma
fuente
2

Puede establecer el límite de cadena como se muestra a continuación:

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

Mostrará solo las 20 letras, incluidos los espacios en blanco y termina con ....

Imagen de ejemploMuestra el ejemplo de límite de cadena.

Ganesh Khadka
fuente
Hola, hermano, está desaprobado actualice su respuesta
Mahdi Safari
1

Para cosas simples como esta, preferiría hacer un ayudante, por ejemplo:

crea un helpers.phparchivo en tu /app/helpers.phpcon el siguiente contenido:

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

Registre la helper.phpautocarga en sucomposer.json

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

Después de eso, puede usar en su archivo blade, por ejemplo:

{{ short_string($whatever_as_text) }}

Puede usar esta función simple, entonces, globalmente en su aplicación.

Stefanr
fuente
0

Actualización de 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
fuente
0

En Laravel 4 y 5 (hasta 5.7), puede usar str_limit, que limita la cantidad de caracteres en una cadena.

Mientras estés en Laravel 7, puedes usar el asistente Str :: limit.

//For Laravel  to Laravel 7

{{ Illuminate\Support\Str::limit($post->title, 20, $end='...') }}
zahidsoft
fuente
Laravel 7, use solo {{Str :: limit ($ chamado-> subClient-> name, 10)}}
João Mello