Foros del Web » Programando para Internet » PHP »

Modificar trozo de cadena en cada aparición

Estas en el tema de Modificar trozo de cadena en cada aparición en el foro de PHP en Foros del Web. ¡Hola! Resulta que en la aplicación que estoy diseñando los usuarios podrán subir imágenes a través del ckeditor. Y quiero que, cuando se suba una ...
  #1 (permalink)  
Antiguo 04/06/2012, 02:59
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años
Puntos: 1
Pregunta Modificar trozo de cadena en cada aparición

¡Hola! Resulta que en la aplicación que estoy diseñando los usuarios podrán subir imágenes a través del ckeditor. Y quiero que, cuando se suba una imagen, se le añada un efecto lightbox para que se pueda ampliar, automáticamente al grabarla.

Para ello, tengo que transformar un código del tipo:

Código:
<img alt="" src="http://www.foto-gratis.es/photos/0-0/2008-11-18/Img01122008105184546110.jpg" style="width: 550px; height: 853px" />
en código de tipo:
Código:
<a href="imagenes/contenido/<?php echo $fila_contenido['contenido_imagen']; ?>"
rel="lightbox[grupo]" title="<?php echo $fila[''.$name]?>">
<img src = "<?php echo "imagenes/contenido/";
	echo $fila_contenido['contenido_imagen'];?> " alt="Ampliar" width="150" height="150"/>
He conseguido que me lo cambié en la primera aparición de una imagen. Lo hice así: preguntando si detecta que hay una imagen en el valor introducido a través del ckeditor:
Código:
 if (strpos ($contenido_descripcion, 'img alt')) $contenido_descripcion = divide($contenido_descripcion);
Y en ese caso, como podéis ver, se llama a la función divide, que hace esto:
Código:
	function divide($original) {
		$division = explode ('img alt', $original);
		$segundaparte = substr ($division[1], 9, strlen($division[1]));
		$indice = strpos ($segundaparte, '/>');
		$algo = substr($segundaparte, 0, $indice);
		$prueba1 = 'a href="';
		$prueba2 = '/>';
		$prueba3 = ' rel="lightbox[grupo]"> <img src="';
		$prueba4 = '/>';
		$valor = $division[0].$prueba1.$algo.$prueba3.$algo.$prueba4;						
		return $valor;
	}
De la transformación de código necesaria para que coja el lightbox me puedo ocupar yo, pero lo que necesitaba es ayuda para saber si es posible, dada una cadena (el texto completo que introduce a través de ckeditor), identificar todas las apariciones de una determinada subcadena (desde img alt hasta /> ) y actualizarlas sólo a ellas. Sé que hay funciones para encontrar la última aparición (strrchr), la primera aparición (strpos), dividir cadenas en partes (explode)... pero no soy capaz de hacer lo que quiero utilizando esas funciones.

¡Muchas gracias por adelantado! Saludos.
  #2 (permalink)  
Antiguo 04/06/2012, 05:08
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: Modificar trozo de cadena en cada aparición

Estoy algo confundido escribe mejor lo que deseas hacer amigo..
  #3 (permalink)  
Antiguo 04/06/2012, 08:16
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años
Puntos: 1
Respuesta: Modificar trozo de cadena en cada aparición

Jejeje. Es que hay bastante información que sobra.

Realmente lo que quiero es, a partir de los datos introducidos en un formulario, que identifique, cuando se le da a grabar, si hay alguna imagen en código html (es decir, que busque si hay algún "<img").

Y que permita que, todas y cada una de las imágenes que haya, pase su código (desde "<img" hasta "/>") por la función divide() que ya he creado y me funciona perfectamente (lo que hace esa función es envolver esa imagen con un código especial para que quede luego más bonita cuando se muestre).

Ahora mismo puedo hacerlo imagen a imagen, me envuelve la primera aparición de img en el código ése, y me funciona bien, pero si hay varias imágenes, no sé como hacer para decirle que, siempre que haya ese código, pase por la función divide().

No sé si ahora me expliqué mejor...
  #4 (permalink)  
Antiguo 06/06/2012, 03:05
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años
Puntos: 1
Respuesta: Modificar trozo de cadena en cada aparición

Lo pregunto de la forma más general posible: si hubiese una cadena que desconozco su contenido, y quiero que busque por ejemplo si tiene código html. Es decir que mire si hay algo así:

Código:
xxxx <html> www </html>  zzzz <html> jjjjjj </html> llllll
Y en caso afirmativo que coja el código html (en el ejemplo anterior las "w" y las "j" cada vez que aparezca (supongo que aparece varias veces código en html), y le ponga <b> delante de lo que haya en html, y </b> justo detrás. Para transformar el código y quede así:

Código:
xxxx <html> <b> www </b> </html>  zzzz <html> <b> jjjjjj </b> </html> llllll
¿Eso cómo se haría? Muchas gracias por adelantado.
  #5 (permalink)  
Antiguo 06/06/2012, 03:10
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Respuesta: Modificar trozo de cadena en cada aparición

Yo creo que ya que quieres que pase por todas las etiquetas <img /> de un texto ( y del cual ademas, opino que cada img tendra una url distinta ) , tendrias que usar expresiones regulares para reconocer esos bloques de imagenes y poderlos identificar correctamente.
__________________
» Presupuesto Pagina Web
  #6 (permalink)  
Antiguo 06/06/2012, 05:17
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: Modificar trozo de cadena en cada aparición

Fijate de usar un preg_match con una expresion regular para identificar imagenes y ahi vas a encontrar lo que queres.

Espero sirva, saludos.
  #7 (permalink)  
Antiguo 07/06/2012, 01:15
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años
Puntos: 1
Respuesta: Modificar trozo de cadena en cada aparición

Al final no lo solucioné "a mi manera".

La verdad es que no tengo mucha idea de expresiones regulares. De todos modos, estoy en la recta final de mis prácticas, y lo que había conseguido el día que pregunté esto era que se envolviese correctamente la primera imagen insertada a través del formulario con el lightbox, pero borraba el resto del contenido. Pues bien, ayer conseguí que se envolviese la primera imagen con el Lightbox, y se mantenga el resto del contenido. De hecho, si se edita ese contenido por segunda vez, al darle a grabar, mantiene el lightbox de la primera imagen, y añade el lightbox a la segunda, y así sucesivamente.

A mi jefe le sirve, y tengo que seguir avanzando. En el futuro trataré de aprender a usar las expresiones regulares, que además me parecen muy útiles, y a lo mejor si tengo dudas hasta vuelvo a preguntar en el foro.

¡Muchas gracias por vuestra ayuda!
  #8 (permalink)  
Antiguo 07/06/2012, 07:21
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Respuesta: Modificar trozo de cadena en cada aparición

Código PHP:
public function pruebaetiimg($contenido){
        if(
preg_match_all('/<img[^<]+/i'$contenido$result)){
            
            foreach(
$result as $k=>$v){
            echo 
'<div id="modulo1" class="flexslider"><ul class="slides">';
            
                foreach(
$v as $key=>$r){
                    
//$mod=$key+1;
                    
$r substr($r0strlen($r) - 3) .' height="200px" width="100%" 'substr($r, -3) ;
                    echo 
'<li><a href="">'.$r.'</a></li>';
                    
                    
                
/*    echo htmlentities($r);*/
                
}
            echo 
'</ul></div>';
            }
        }
        else{
            echo 
"No se encontro una etiqueta img";
        }
    } 
mira para ver si esto te sirve, esta funcion toma un texto e identifica donde hay etiquetas img y le añade un tamaño fijo. lo otro es para ponerla en un slider pero eso no le tomes simportancia sino al bucle y la funcion preg_match...
  #9 (permalink)  
Antiguo 11/06/2012, 09:34
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años
Puntos: 1
Respuesta: Modificar trozo de cadena en cada aparición

Muchas gracias. Lo cierto es que terminé las prácticas, así que ya no lo necesito. Quizá algún día intente hacer algo muy parecido por muy cuenta, en ese caso probaré con tu sistema, y te digo si fui capaz.

¡Gracias!

Etiquetas: cada, modificar, usuarios, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:02.