Pregunta

He intentado hacer esta vez, pero creo que mi primera pregunta era demasiado claro para ustedes para contestar, así que voy a intentarlo de nuevo

Estoy haciendo un sitio web utilizando el Zend Framework, y estoy tratando de incluir el Phorum tablero de mensajes prefabricados. Hasta ahora, he hecho funcionar por no corriendo a través de mi proceso de arranque usando mi archivo .htaccess. Lo que me gustaría hacer que me gustaría hacer es ser capaz de correr a través de mi rutina de carga para que pueda utilizar mis diseños creados anteriormente y clases que sólo se puede ejecutar a través de Zend.

Por ejemplo, tengo una señal de prefabricados en el sistema que funciona a través Zend_Auth. Tengo los datos de la persona guardan en Zend_Session. Me carga el perfil de usuario a través de un controlador. Tengo una capa de servicio para el modelo que se conecta a mi base de datos en nombre del usuario. Hay varias otras dependencias que, por lo que yo puedo decir, que necesito el arranque para.

Phorum es básicamente un gran conjunto de scripts PHP que dependen de parámetros GET. Mi idea original había sido la utilización de un controlador para hacer los guiones. Un ejemplo de lo que se vería como URI es la siguiente: My-Site.com/messageboard/list.php?1,3 con ser el tablero de mensajes messageboardController. Aunque esto funciona para la lista de carga, no se puede capturar los parámetros GET, que depende de Phorum. Debido a la naturaleza compleja de Phorum, sería casi imposible para mí ser capaz de entrar y hacer que sea algo así como My-Site.com/messageboard/list/1/3 o nada a lo largo de los líneas. El URI tiene que ser el primero, ya que está integrado en Phorum.

He intentado usar marcos. Tengo que mantener mi registro en el panel encima de la tapa, y tenía el cuerpo de la página sea un marco, pero era sencillas de recordar, y el botón de retroceso hecho todo lo tremendamente difícil. Asimismo, no se pudo obtener el marco de hablar con la página principal en la Zend bien, así que los marcos no son una opción.

¿Alguien tiene una forma que yo puedo hacer esto? Lo que necesito, en esencia, es tomar el guión (ex. List.php? 1,3) y el lugar sea lo que haría que, después de haber utilizado los parámetros de 1,3, en un div en el "cuerpo" de mi div diseño. Por lo que yo puedo decir, hacer que no parece ser capaz de capturar los parámetros GET. ¿Alguien sabe de alguna manera de hacer esto.

Cualquier idea sería enormemente apreciada. Gracias por su ayuda!

¿Fue útil?

Solución

Esto no es una cosa trivial a proceso, sin embargo, es posible escribir una ruta personalizada, junto con un poco de magia controlador para manejar este tipo de cosas e incluya el archivo php adecuado:

En primer lugar - La ruta probablemente debería ser (en ZF1.9 convenciones application.ini)

resources.router.routes.phorum.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.phorum.route = "messageboard(?:/(.*))?"
resources.router.routes.phorum.defaults.controller = "phorum"
resources.router.routes.phorum.defaults.action = "wrapper"
resources.router.routes.phorum.defaults.module = "default"
resources.router.routes.phorum.defaults.page = "index.php"
resources.router.routes.phorum.map.1 = "page"

Ahora todas las solicitudes de messageboard/whatever.php deben encaminarse a PhorumController :: wrapperAction () y tienen 'whatever.php' en $this->getRequest()->getParam('page')

Entonces debe convertido en una simple cuestión de reorientar su acción "contenedor" para incluir el archivo php adecuada de Phorum. He añadido algo de código de un controlador similar que tengo (aunque la mía no incluyen archivos php - que estaba destinado únicamente para servir a un directorio de contenido)

public function wrapperAction() {
   $phorumPath = APPLICATION_PATH."../ext/phorum/";

   $file = realpath($phorumPath . $this->getRequest()->getParam('page');
   if (!$file || !is_file($file)) throw new Exception("File not found");

   // disable default viewRenderer - layout should still render at this point
   $this->_helper->viewRenderer->setNoRender(true);     

   // determine extension to determine mime-type
   preg_match("#\.([^.]+)$#", $filename, $matches);
   switch (strtolower($matches[1]))
   {
     case "php":

       // patch the request over to phorum
       include($file);
       return; // exit from the rest of the handler, which deals specifically
       // with other types of files

     case "js": 
       $this->getResponse()->setHeader('Content-Type', 'text/javascript'); 
       ini_set('html_errors', 0);
       break;
     case "css": 
       $this->getResponse()->setHeader('Content-Type', 'text/css'); 
       ini_set('html_errors', 0);
       break;
     case "html":
       $this->getResponse()->setHeader('Content-Type', 'text/html');
       break;
     // you get the idea... add any others like gif/etc that may be needed
     default:
       $this->getResponse()->setHeader('Content-Type', 'text/plain'); 
       ini_set('html_errors', 0);
       break;
   }

   // Disable Layout
   $this->_helper->layout->disableLayout();

   // Sending 304 cache headers if the file hasn't changed can be a bandwidth saver
   $mtime = filemtime($fn);  
   if ($modsince = $this->getRequest()->getServer('HTTP_IF_MODIFIED_SINCE'))
   {
     $modsince = new Zend_Date($modsince);
     $modsince = $modsince->getTimestamp();

     if ($mtime <= $modsince) {
       $this->getResponse()->setHttpResponseCode(304); 
       return;
     }
   }

   $this->getResponse()->setHeader('Last-Modified', gmdate("D, d M Y H:i:s",$mtime). " GMT");
   readfile($fn);
}

-. Asegúrese de probar este código para las personas tratando de solicitudes de artesanía con .., etc en la página

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top