¿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.
Respuestas:
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::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 de ayuda de Laravel http://laravel.com/docs/helpers#strings
fuente
str
se eliminaron los ayudantes que debe usarIlluminate\Support\Str::limit($string)
en su lugarLaravel 4 tiene
Str::limit
que truncará al número exacto de caracteres, y tambiénStr::words
que se truncará en el límite de la palabra.Revisa:
fuente
Str::words
existe un equivalente de en Larvel 5.2?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
fuente
límite Ejemplo:
$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
Salida
palabras Ejemplo:
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
Salida
Perfectly balanced, as >>>
Para usar helper en el controlador, no olvide incluir / usar la clase también
use Illuminate\Support\Str;
Esto es para manejar caracteres de la cadena :
{!! Str::limit('Lorem ipsum dolor', 10, ' ...') !!}
Salida
Esto es para manejar palabras de la cadena :
{!! Str::words('Lorem ipsum dolor', 2, ' ...') !!}
Salida
Aquí está la documentación de ayuda más reciente para manejar la cadena Laravel Helpers
fuente
Puede establecer el espacio de nombres como:
{!! \Illuminate\Support\Str::words($item->description, 10,'....') !!}
fuente
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:
fuente
Esto funciona en Laravel 5:
{!!strlen($post->content) > 200 ? substr($post->content,0,200) : $post->content!!}
fuente
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 ejemplo
fuente
Para cosas simples como esta, preferiría hacer un ayudante, por ejemplo:
crea un
helpers.php
archivo en tu/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 la
helper.php
autocarga 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:
Puede usar esta función simple, entonces, globalmente en su aplicación.
fuente
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>
fuente
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='...') }}
fuente