Cadena truncada en plantillas de hoja de Laravel

5 minutos de lectura

avatar de usuario
fl3x7

¿Hay un modificador truncado para las plantillas blade 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 el debate completo de PHP es un 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 una funcionalidad integrada en Laravel.

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

Estoy usando Laravel 4.

  • ¿Qué pasa con Laravel 5?

    – mercurio

    27 de febrero de 2016 a las 2:13

  • @HosMercury Para L5 ver stackoverflow.com/questions/29281013/…

    – fl3x7

    1 de marzo de 2016 a las 12:21

  • Espero y rezo para que ya no estés trabajando en laravel 4. 😀

    – Vipertecpro

    21 abr a las 12:02

  • @Vipertecpro jeje, ¡eso no sería algo! Laravel ha recorrido un largo camino desde entonces.

    – fl3x7

    21 abr a las 16:03

avatar de usuario
anil singh

En Laravel 4 y 5 (hasta 5.7), puede usar str_limitque limita el número de caracteres en una cadena.

Mientras esté en Laravel 5.8 o superior, puede usar el Str::limit ayudante.

//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 auxiliares de Laravel http://laravel.com/docs/helpers#strings

  • Respuesta correcta ya que el caso de uso está en la vista Blade.

    – frisbetario

    8 de junio de 2016 a las 8:56

  • En la versión 5.8 str los ayudantes fueron eliminados debes usar Illuminate\Support\Str::limit($string) en cambio

    – Amir Hassan Azimi

    11 de abril de 2019 a las 11:32

  • str_limit está en desuso

    – Omer

    19 oct 2019 a las 10:49

  • Primeros 3 caracteres: {{ \Illuminate\Support\Str::limit($string, 0, 3) }}

    – Pedro Cardoso

    12 de marzo de 2021 a las 5:48

avatar de usuario
polvo graham

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

Verificar:

  • ¿Sabes si un equivalente de Str::words existen en Larvel 5.2?

    – Jiedara

    4 de agosto de 2016 a las 7:35


  • 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

    4 de agosto de 2016 a las 17:52

  • ¡Eso era lo que estaba buscando! Gracias !

    – Jiedara

    04/08/2016 a las 18:46

avatar de usuario
lorenzo

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ías hacer:

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

En esta etapa, no creo que la clase Str esté en Laravel 4 – pero aquí hay un puerto que puedes incluir en composer para agregar a su propio proyecto

  • Gracias por la sugerencia, parece que tendré que ceder y usar los puertos de Meido jajaja

    – fl3x7

    22 de febrero de 2013 a las 9:02

  • Hoy en día Laravel 4 tiene la clase Str. Vea la respuesta de Dustin Graham.

    – trm42

    15 de diciembre de 2013 a las 1:54

  • Si, eso es correcto. Cuando publiqué originalmente esta respuesta fue durante Laravel 4 Beta, cuando la clase Str no existía

    – Laurence

    16 de diciembre de 2013 a las 1:33

  • ¿Dónde está la respuesta original? Es jodidamente imposible encontrar documentos para 4.1 ahora… 🙁

    – Srneczek

    09/04/2016 a las 16:32


avatar de usuario
vipertecpro

Actualización para Laravel 7.*: Cuerdas 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 utilizando 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);

Producción

The quick brown fox...

palabras Ejemplo :

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

Producción

Perfectly balanced, as >>>

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

Para usar el asistente 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, ' ...') !!}

Producción

Lorem ipsu ... 

Esto es para manejar palabras de la cadena :

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

Producción

Lorem ipsum ... 

Aquí está la documentación de ayuda más reciente para el manejo de cadenas Ayudantes de Laravel

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 tu opinión:

{{ $comment->short_description }}

avatar de usuario
ramon bhasker

Puede establecer el espacio de nombres como:

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

avatar de usuario
ItaliaPaleAle

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

crear un helpers.php archivo en su /app/helpers.php con el siguiente contenido:

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

Registre el helper.php en carga automática en su composer.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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad