Foros del Web » Programando para Internet » PHP »

Problema con str_replace() - aplicación php -

Estas en el tema de Problema con str_replace() - aplicación php - en el foro de PHP en Foros del Web. Hola colegas, les comento, estoy desarrollando una aplicación en php y necesito solucionar un problemita que ya me esta sacando canas verdes, hace un tiempo ...
  #1 (permalink)  
Antiguo 21/01/2012, 08:11
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Pregunta Problema con str_replace() - aplicación php -

Hola colegas, les comento, estoy desarrollando una aplicación en php y necesito solucionar un problemita que ya me esta sacando canas verdes, hace un tiempo largo que estoy con esto y nada....
Resulta que mi aplicación esta distribuida en MODELO, VISTA y CONTROLADOR.... en el controlador están todas las librerías y hay un controlador que es quien comanda todas las lineas de códigos a ejecutar, incluyendo las librerías correspondientes....
En la vista no existe ningún tipo de código php, solo es html y txt.... para ello el controlador es quien muestra los datos de la base de datos en el html remplazando los txt que le coloco, por ejemplo...en el html coloco <div id="usuario">{USUARIO}</div> y en php controlador coloco un método que contenga str_replace() y que contenga los datos a remplazar ( str_replace($datosHTML,$datosController,$Cadena) )........ mi problema esta en que los datos extraídos desde la base de datos los muestra en el html, pero fuera del div, como que no entendiera que tiene que ir ubicado dentro del div que contiene {USUARIO}... habrá otra forma extraer datos desde la base de datos y remplazarlos en html, y que cumplan un perfecto orden dentro del div?


p/d =cabe aclarar que ese problema lo tengo cuando llamo los datos desde la base de datos y no cuando coloco una cadena simple "Hola mundo".


Para mas ayuda, colocare mis metodos:

PHP:

Código:
public function getTemplate($cadena, $code, $fill) {

        $archivo = "View/default/" . $fill . ".php";
        
         

         $remplazo = file_get_contents($archivo);

         $remplazo = str_replace($cadena, $code, $remplazo);

        
       $fp = fopen($archivo, "r");
$write = fputs($fp, $remplazo);
fclose($fp);
//esto es metodo de la libreria singleton

Controlador :

Código:
public function index() {


        $this->callLibrary("Singleton");
        $this->callLibrary("Template");

         $this->callMetod(new Template())->callView("header");

        $this->callMetod(Singleton::getInstacia())->getTemplate(
                array(
                    "{fecha}", //dato a remplazar en el html
                    "{titulo}",
                    "{detalle}"
                ),
                array(
                    $this->date(),
                    $this->post("titulo"), //dato remplazador
                    $this->post("detalle")),
                "content");//   archivo


        
        //siempre instanciando su clase podemos llamar al metodo
        // $this->callMetod(new Template())->callView("content");
        $this->callMetod(new Template())->callView("footer");
    }

HTML Contenido

Código:
<div id="main">

    <div id="content">
        <div id="title">{titulo}</div>
        <div id="fecha">{fecha}</div>
        <div id="detalle">{detalle}</div>

    </div>



</div>

Bueno gente espero que me puedan ayudar y muchas gracias por leer mi pregunta...saludos

Última edición por dario_sanz; 21/01/2012 a las 08:34
  #2 (permalink)  
Antiguo 22/01/2012, 08:50
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Respuesta: Problema con str_replace() - aplicación php -

Cita:
Iniciado por dario_sanz Ver Mensaje
Hola colegas, les comento, estoy desarrollando una aplicación en php y necesito solucionar un problemita que ya me esta sacando canas verdes, hace un tiempo largo que estoy con esto y nada....
Resulta que mi aplicación esta distribuida en MODELO, VISTA y CONTROLADOR.... en el controlador están todas las librerías y hay un controlador que es quien comanda todas las lineas de códigos a ejecutar, incluyendo las librerías correspondientes....
En la vista no existe ningún tipo de código php, solo es html y txt.... para ello el controlador es quien muestra los datos de la base de datos en el html remplazando los txt que le coloco, por ejemplo...en el html coloco <div id="usuario">{USUARIO}</div> y en php controlador coloco un método que contenga str_replace() y que contenga los datos a remplazar ( str_replace($datosHTML,$datosController,$Cadena) )........ mi problema esta en que los datos extraídos desde la base de datos los muestra en el html, pero fuera del div, como que no entendiera que tiene que ir ubicado dentro del div que contiene {USUARIO}... habrá otra forma extraer datos desde la base de datos y remplazarlos en html, y que cumplan un perfecto orden dentro del div?


p/d =cabe aclarar que ese problema lo tengo cuando llamo los datos desde la base de datos y no cuando coloco una cadena simple "Hola mundo".


Para mas ayuda, colocare mis metodos:

PHP:

Código:
public function getTemplate($cadena, $code, $fill) {

        $archivo = "View/default/" . $fill . ".php";
        
         

         $remplazo = file_get_contents($archivo);

         $remplazo = str_replace($cadena, $code, $remplazo);

        
       $fp = fopen($archivo, "r");
$write = fputs($fp, $remplazo);
fclose($fp);
//esto es metodo de la libreria singleton

Controlador :

Código:
public function index() {


        $this->callLibrary("Singleton");
        $this->callLibrary("Template");

         $this->callMetod(new Template())->callView("header");

        $this->callMetod(Singleton::getInstacia())->getTemplate(
                array(
                    "{fecha}", //dato a remplazar en el html
                    "{titulo}",
                    "{detalle}"
                ),
                array(
                    $this->date(),
                    $this->post("titulo"), //dato remplazador
                    $this->post("detalle")),
                "content");//   archivo


        
        //siempre instanciando su clase podemos llamar al metodo
        // $this->callMetod(new Template())->callView("content");
        $this->callMetod(new Template())->callView("footer");
    }

HTML Contenido

Código:
<div id="main">

    <div id="content">
        <div id="title">{titulo}</div>
        <div id="fecha">{fecha}</div>
        <div id="detalle">{detalle}</div>

    </div>



</div>

Bueno gente espero que me puedan ayudar y muchas gracias por leer mi pregunta...saludos





jejejejejejejej me parece que en vez de poner "no me gusta" debería poner .... "no tengo el conocimiento para resolverlo" ... lo digo por el (-1) que aparece en rojo en el titulo del foro... :) .....

Bueno gente ya lo solucione al problema, aquí les dejo la respuesta por si alguna vez les pasa algo parecido....

Primero para resumir, tuve que crear un método que me retorne primero la vista y luego otro para que me imprima la vista.... lo hice de la siguiente manera :

Código:
function dinamic_HTML($html, $data) {
    foreach ($data as $clave => $valor) {
        $html = str_replace('{' . $clave . '}', $valor, $html);
    }
    return $html;
}



Código:
public function getTemplate($cadena, $code, $fill) {

        $archivo = "View/default/" . $fill . ".php";
        
         

         $remplazo = file_get_contents($archivo);
         $remplazo = function dinamic_HTML($archivo, $code) 
         $remplazo = str_replace($cadena, $code, $remplazo);
print $remplazo;

Saludos y espero que les sirva cuando quieras desarrollar un MVC..!!!

Etiquetas: html, usuarios
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 19:56.