Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Implementar una función en otra (bbcode)
2 respuestas recibidas | 116 visitas | Categoría PHP

Implementar una función en otra (bbcode)

Avatar de keco
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 71 posts)

#0 Offline keco Usuario 27 mar 08 (23:58)  
Hola amigos:

Estoy intentando hacer que cuando se pase una función bbcode, si el usuario pone [img1]foto.jpg[/img1] la imagen aparezca pero redimensionada, a escala, pero no termino de conseguirlo. Mi problema es que solo se hacer que [img1]foto.jpg[/img1] se reemplace por <img src="...">, pero no que escriba <img src="..." width="..." height="..."> con las medidas calculadas para que la imagen aparezca a escala.

Las funciones que tengo son: normalizar_grafico, que devuelve una array con la medidas a escala de la imagen, redimensionar,que devuelve una cadena con las medidas a escala de la imagen que le pases y cadena que es la que tiene que sustituir en el bbcode por [img1]foto.jpg[/img1], y finalmente la funcion bbcode.

Os pego las funciones, y a ver si podeis darme una solución, xq intentando $texto=preg_replace("(\[img1\](.+?)\[\/img1\])is",redimensionar($1),$texto); la funcion preg_replace da error.

Código PHP


<?

function normalizar_grafico($size_x,$size_y,$hueco_x,$hueco_y,$extender = true) {

    if (
$size_x > 0 && $size_y > 0) {
     
        if (
$size_x <= $hueco_x && $size_y <= $hueco_y && !$extender) {
            
$y = $size_y;
            
$x = $size_x;
        }
         
        else {
         
            if (
$hueco_x/$size_x < $hueco_y/$size_y) {
                
$x = $hueco_x;
                
$y = $size_y*($hueco_x/$size_x);
            }
             
            else {
                
$x = $size_x*($hueco_y/$size_y);
                
$y = $hueco_y;
            }
     
        }
         
        
$coord = array (round($x),round($y));
        return
$coord;
    }
    
    else return
false;
}


function
redimensionar($nombre) {

    
$dir = " ";
    
$file = $nombre;
    
$extensiones = array('jpg','jpeg','gif','png');
    
$max_width=100;
    
$max_height=100;

    if (
$file != '.' && $file != '..' && in_array(strtolower(substr(strrchr($file,'.'),1)),$extensiones)) {
    
$tamaño=getimagesize($dir.$file);
    
$tamaño=normalizar_grafico($tamaño[0],$tamaño[1],$max_width,$max_height,false);
    return
'<center><a href="?go=Gal&ac=ver&id='.$row["id"].'"><img src="'.$dir.$file.'" width="'.$tamaño[0].'" height="'.$tamaño[1].'" border="0" alt="Pulsa para verla más grande" /></a>';
    }

}




function
bbcode($texto) {

$texto=preg_replace("/(http:\/\/)([^ ]+)/is",'<a href="\1\2" target="_blank" style="color: #FFFFFF;">\2</a>',$texto);
$texto=preg_replace("(\[b\](.+?)\[\/b\])is",'<b>$1</b>',$texto);
$texto=preg_replace("(\[i\](.+?)\[\/i\])is",'<em>$1</em>',$texto);
$texto=preg_replace("(\[u\](.+?)\[\/u\])is",'<u>$1</u>',$texto);
$texto=preg_replace("(\[center\](.+?)\[\/center\])is",'<center>$1</center>',$texto);
$texto=preg_replace("(\[img1\](.+?)\[\/img1\])is",redimensionar($1),$texto);
$texto=nl2br($texto);
return(
$texto);

}




$texto = "[img1]hola.jpg[/img1] bla bla bla";

echo
bbcode($texto);




?>



Gracias de antemano, un saludo.
kec0.

Re: Implementar una función en otra (bbcode)

Avatar de panino
Nivel 7 Nivel 7 Nivel 7 Nivel 7 Nivel 7 Nivel 7 Nivel 7

(Nivel 7 - 1145 posts)

#1 Offline panino Moderador 29 mar 08 (04:39) Valor Valor Valor  
Probá así:

Código PHP


<?php
function normalizar_grafico($size_x,$size_y,$hueco_x,$hueco_y,$extender = true) {

    if (
$size_x > 0 && $size_y > 0) {
     
        if (
$size_x <= $hueco_x && $size_y <= $hueco_y && !$extender) {
            
$y = $size_y;
            
$x = $size_x;
        }
         
        else {
         
            if (
$hueco_x/$size_x < $hueco_y/$size_y) {
                
$x = $hueco_x;
                
$y = $size_y*($hueco_x/$size_x);
            }
             
            else {
                
$x = $size_x*($hueco_y/$size_y);
                
$y = $hueco_y;
            }
     
        }
         
        
$coord = array (round($x),round($y));
        return
$coord;
    }
    
    else return
false;
}
function
redimensionar($nombre) {
    
$row["id"]=10;
    
$dir = "";
    
$file = $nombre;
    
$extensiones = array('jpg','jpeg','gif','png');
    
$max_width=100;
    
$max_height=100;

    if (
$file != '.' && $file != '..' && in_array(strtolower(substr(strrchr($file,'.'),1)),$extensiones)) {
    
$tamaño=getimagesize($dir.$file);
    
$tamaño=normalizar_grafico($tamaño[0],$tamaño[1],$max_width,$max_height,false);
    return
'<center><a href="?go=Gal&ac=ver&id='.$row["id"].'"><img src="'.$dir.$file.'" width="'.$tamaño[0].'" height="'.$tamaño[1].'" border="0" alt="Pulsa para verla más grande" /></a>';
    }

}
$texto='[img1]foto1.jpg[/img1]';
$texto=preg_replace("(\[img1\](.+?)\[\/img1\])ise","redimensionar('$1')",$texto);

echo
$texto;
?>


Fijate las comillas y el modificador e de la expresión regular (este modificador evalúa la cadena de reemplazo como código php antes de efectivizar el reemplazo.)

www.disegnocentell.com.ar

Re: Implementar una función en otra (bbcode)

Avatar de keco
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 71 posts)

#2 Offline keco Usuario 29 mar 08 (18:14)  
Perfecto! funciona! mil gracias! ^^

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster