Frage

Ich habe versucht, dies einmal zu fragen, aber ich denke, dass meine erste Frage zu unklar war für euch zu beantworten, also werde ich versuchen, wieder

Ich mache eine Website das Zend Framework, und ich versuche, die premade Messageboard Phorum aufzunehmen. Bisher habe ich es durch sie nicht durch meine Bootstrap gemacht Arbeit läuft meine .htaccess-Datei. Was ich möchte, ich tun möchte ist zu tun, um es durch meine Bootstrap laufen, so dass ich meine zuvor erstellten Layouts und Klassen verwenden können, die ich nur durch Zend laufen kann.

Zum Beispiel, ich habe ein premade Zeichen in System, das durch Zend_Auth funktioniert. Ich habe die Person, die Daten in Zend_Session gespeichert. Ich lade das Profil des Benutzers über einen Controller. Ich habe eine Dienstschicht für das Modell, das im Namen des Benutzers zu meiner Datenbank verbindet. Es gibt mehrere andere Abhängigkeiten, die, soweit ich sagen kann, ich brauche das Bootstrap für.

Phorum ist im Grunde nur eine große Menge von PHP-Skripten, die auf GET-Parametern abhängig sind. Meine ursprüngliche Idee war einen Controller zu verwenden, um die Skripte zu machen. Ein Beispiel dafür, was die URI aussehen würde, ist dies: My-Site.com/messageboard/list.php?1,3 mit Messageboard der messageboardController zu sein. Während dies für Ladeliste funktioniert, kann es nicht die GET-Parameter erfassen, die Phorum auf abhängt. Aufgrund der Komplexität der Phorum, wäre es fast unmöglich für mich zu gehen in der Lage sein und es so etwas wie My-Site.com/messageboard/list/1/3 oder etwas in diesen macht Linien. Der URI hat die ehemaligen sein, wie es in zu Phorum gebaut wird.

Ich habe mit Frames versucht. Ich habe meine Login-Panel bis oben zu halten, und hatte den Körper der Seite ein Rahmen sein, aber es war unbookmarkable und das Zurück-Taste machte alles unerhört schwierig. Ich konnte auch nicht den Rahmen erhalten sie gut auf die übergeordnete Seite in Zend zu sprechen, so Frames sind keine Option.

Hat jemand eine Möglichkeit, dass ich dies tun kann? Was ich brauche, im Grunde genommen ist das Skript zu nehmen (ex. List.php? 1,3) und Platz, was auch immer es machen würde, nachdem den 1,3-Parameter verwendet hat, in ein div in der „Körper“ div meines Layout. Soweit ich das beurteilen kann, machen scheint nicht in der Lage zu sein, die GET-Parameter zu erfassen. Kennt jemand eine Möglichkeit, ich dies tun kann.

würde Irgendwelche Ideen unermesslich geschätzt. Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Dies ist keine triviale Sache zu verarbeiten, ist es jedoch möglich, eine individuelle Route, zusammen mit einiger Controller Magie zu schreiben, um diese Art der Sache und auch die richtige PHP-Datei zu behandeln:

Zunächst einmal - Ihr Weg sollte wahrscheinlich sein (in ZF1.9 application.ini Konventionen)

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"

Nun werden alle Anfragen sind an messageboard/whatever.php zu PhorumController :: wrapperAction verlegt werden () und haben 'whatever.php' in $this->getRequest()->getParam('page')

Dann ist es sollte wird einfach eine Frage der Umleitung Ihrer „Wrapper“ Aktion die richtige PHP-Datei von Phorum aufzunehmen. Ich habe einige Codes aus einem ähnlichen Controller hinzugefügt Ich habe (obwohl nicht meine PHP-Dateien enthalten ist - es allein dazu dient, ein Verzeichnis von Inhalten gemeint war)

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);
}

Bitte -. Achten Sie darauf, prüfen dieser Code für die Menschen zu Handwerk Anfragen mit .. versuchen, etc. auf der Seite

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top