Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2014, 16:27
Malekith
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años, 7 meses
Puntos: 11
Pregunta Creando etiquetas dentro de un string

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$sLeft0);
        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