entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Límite de caracteres

Buenas.

Tengo el siguiente código:

    foreach
    {
        echo '
p
 </div>
                ';

        if (!$news['is_last'])
            echo '
            ';
    }
}

Quisiera saber cómo darle un límite de caracteres a esta línea, es decir, su contenido ($news['body']):

<div class="panel-body">
<div class="news_body" style="padding: 2ex 0;">', $news['body'], '</div>

Y al superar dicha cantidad de caracteres, se mostraría lo siguiente:

<a href="', $news['href'], 'more'<a>

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola @KevinLeyes,

para hacer esto, tenés que verificar la longitud de la cadena, y si excede el límite, cortarta:


...
$txt = $news['body'];
$leermas='';
if( strlen($txt) > 300) {
  $txt = substr($txt,0,300);
  $leermas = "<a href="', $news['href'], '">[Leer más...]</a>";
}
?>
<div class="news_body" style="padding: 2ex 0;"><?=$txt?></div>
<?=$leermas?>
...

Entonces, si la longitud es mayor a 300 (por ejemplo) lo recorta y asigna contenido a $leermas, luego, siempre mostrás $txt y $leermas, que tendrán el valor adecuado.

Saludos!

1voto

Leyes comentado

Gracias por responder @Leonardo-Tadei, entendí el código a la perfección. Pero no logré adaptarlo bien porque el código donde es mostrado el body está dentro de un echo (como se ve en el que mostré al principio), ¿cómo debería colocarlo para que funcione correctamente? Ya que lógicamente usando las etiquetas <?php ... ?> no es funcional. Saludos.

1voto

Leonardo-Tadei comentado

Hola Kevin,

el código sí es funcional: tenés que poner el IF al principio del foreach, y luego reemplazar tu $news['body'] por $txt y agregás $leermas en dónde quieras que aparezca,

En mi ejemplo lo puse como aconsejan las buenas prácticas de PHP: poner el HTML como tal, cerrando PHP con ?> y poniendo los valores con print(), ya sea explícito o implícito como en mi ejemplo.

Saludos!

0voto

Leyes comentado

Gracias @Leonardo-Tadei.

¿Hay alguna manera o un código similar pero en lugar de establecer una cantidad de caracteres hacerlo así...

Mostrar $leermas cuando se usen 3 veces la etiqueta [/list].

...?

Saludos.

0voto

Leonardo-Tadei comentado

Sí se puede contar las veces que aparece [/list], usando la función substr_count().

Ponés el el IF en vez de la comparación con 300 caracteres la comparación con cuantas veces aparece, y si es 3 o mayor, mostrás el "leer más". La lógica es la misma.

Respecto a tu otra pregunta de la cantidad de noticias, habría que ver cómo se genera la query y ver qué valores están devolviendo los "is_last". Tu código es innecesariamente complicado: por ejemplo, preguntar cuántos son los elementos es inncesario porque un foreach los recorre siempre todos, y la pregunta final de, si es el último, mostrar un montón de espacios en blanco no tiene sentido, porque los navegadores muestran solo 1 espacio si hay muchos consecutivos.

No conozco el resto del código, pero a priori, los 3 IF son superfluos, y todo funciona igual (o mejor) sin ellos.

Saludos cordiales

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta