Hola a tod@s, os comento el problema con el que me he encontrado.
He creado un sistema de envío de noticias, en el que un administrador (que no tiene ningún tipo de conocimiento de html) redacte el contenido.
Ese contenido en portada se resume, cortando el string en el espacio anterior una vez haya alcanzado el número máximo de caracteres, hasta ahí todo correcto.
El problema, es que quiero que cuando se redacte un mensaje, se pueda introducir una etiqueta creada por mi, la cual pueda ser identificada con un explode o similar, y se extraiga el contenido.
De forma que se puedan introducir muchas etiquetas como esa, y las sustituya por código html cada vez que la función encuentre una.
He probado a hacer lo siguiente:
Código PHP:
// Con esta función trato de sacar el contenido entre las etiquetas que le especificaré
// cuando llame a la función
function sacarcontenidoyetiquetas($cad,$uno,$dos){
$sip = strstr($cad,$uno);
$a = array($uno,$dos);
$b = array("","");
$salida = preg_replace($a,$b,$sip);
return $salida;
}
// Con ésto, hago algo parecido, pero solo extraigo lo que contienen esas etiquetas
function sacarcontenido($TheStr, $sLeft, $sRight){
$pleft = strpos($TheStr, $sLeft, 0);
if ($pleft !== false){
$pright = strpos($TheStr, $sRight, $pleft + strlen($sLeft));
If ($pright !== false) {
return (substr($TheStr, $pleft + strlen($sLeft), ($pright - ($pleft + strlen($sLeft)))));
}
}
return '';
}
// Dentro de cada etiqueta, habrá 4 argumentos, y en función de éstos, se generará
// el código html de la imagen con la siguiente función
function colocarimagen($id,$dimensiones,$alineado,$ampliacion){
global $conexion;
$resultado = mysqli_query($conexion, "select * from imagenes where id=$id") or die(mysqli_error());
$contenido = mysqli_fetch_array($resultado);
$urlimagen = $contenido['url'];
if($alineado == "centro") {
$estilo = "display:block; margin:auto;";
} elseif($alineado == "derecha") {
$estilo = "float:right;";
} else {
$estilo = "float:left;";
}
if ($dimensiones == "reducido") {
$ruta = "./imagenes/mini/mini-";
} else {
$ruta = "./imagenes/";
}
if($ampliacion == "ampliar"){
$resultado = "<a href='./imagenes/$urlimagen' rel='lightbox'><img class='imagenes' style='$estilo' src='$ruta$urlimagen'></a>";
} else {
$resultado = "<img class='imagenes' style='$estilo' src='$ruta$urlimagen'>";
}
return $resultado;
}
// Esta variable contiene el texto donde tengo que buscar coincidencias con
// las etiquetas, que llamaré [imagen] y [finimagen]
$textoreducido = "Textofaouboabgoagagfaga [imagen]65,reducido,centro,ampliar[finimagen]agfa,
fagwag agawgawgagwaga[imagen]35,reducido,derecha,ampliar[finimagen]";
// Llamo a la función sacarcontenido() y le indico las etiquetas a tomar referencia
$datosimagen=sacarcontenido($textoreducido,"[imagen]","[finimagen]");
// Lo mismo que antes, pero indico el código que reemplazaré más adelante con
// la función sacarcontenidoyetiquetas()
$textoareemplazar = sacarcontenidoyetiquetas($textoreducido,"[imagen]","[finimagen]");
// Creo un array con los 4 argumentos separados por , gracias a un explode
$datosimagenseparados = explode(",", $datosimagen);
$id = $datosimagenseparados[0];
$dimensiones = $datosimagenseparados[1];
$alineado = $datosimagenseparados[2];
$ampliacion = $datosimagenseparados[3];
// Genero el código html pasándole los argumentos a la función colocarimagen()
$imagenresultado = colocarimagen($id,$dimensiones,$alineado,$ampliacion);
// uso str_replace para sustituir la etiqueta escrita, por el html generado y lo
// almaceno en la variable $resumen
$resumen = str_replace($textoareemplazar, $imagenresultado, $textoreducido);
Lo que si consigo, es extraer correctamente los argumentos que necesito para generar el código html de la imagen, pero a la hora de sustituir las etiquetas por dicho código, no funciona, no me da errores, pero solo aparece el resumen de la primera noticia y el contenido de la variable resumen, pero sin sustituir correctamente las etiquetas...
He intentado explicar el código lo mejor que he podido por si alguien me puede echar un cable, que no le lleve mucho tiempo hacerse una idea de lo que trato de hacer.
Un saludo y muchas gracias