Domanda

Ho provato a chiedere una volta, ma penso che il mio ex domanda era troppo chiaro per voi ragazzi per rispondere, quindi cercherò di nuovo

Sto facendo un sito web utilizzando Zend Framework, e sto cercando di includere il Phorum messageboard premade. Finora, ho fatto funzionare da non è in esecuzione attraverso la mia bootstrap usando il mio file .htaccess. Quello che mi piacerebbe fare mi piacerebbe fare è di essere in grado di farlo funzionare attraverso il mio bootstrap in modo che posso usare il mio layout creati in precedenza e le classi che posso correre solo attraverso Zend.

Per esempio, ho un segno premade nel sistema che funziona attraverso Zend_Auth. Ho i dati della persona salvati in Zend_Session. Ho caricare il profilo dell'utente attraverso un controllore. Ho un livello di servizio per il modello che si collega al mio database sul conto dell'utente. Ci sono diverse altre dipendenze che, per quanto posso dire, ho bisogno del bootstrap per.

Phorum è fondamentalmente solo un grande insieme di script PHP che dipendono da parametri GET. La mia idea originale era stata quella di utilizzare un controller per rendere gli script. Un esempio di ciò che URI sarebbe simile a questo: My-Site.com/messageboard/list.php?1,3 con messageboard essere il messageboardController. Anche se questo funziona per la lista di carico, non può catturare i parametri GET, che Phorum dipende. A causa della natura complessa di Phorum, sarebbe quasi impossibile per me essere in grado di entrare e fare qualcosa come My-Site.com/messageboard/list/1/3 o qualcosa del genere Linee. L'URI deve essere il primo, come è costruito per Phorum.

Ho provato con cornici. Ho avuto modo di mantenere la mia Login pannello sulla parte superiore, e aveva il corpo della pagina sia una cornice, ma era unbookmarkable, e il pulsante indietro reso tutto scandalosamente difficile. Ho anche potuto ottenere la cornice per parlare con la pagina principale nella Zend bene, quindi frame non sono un'opzione.

Qualcuno ha un senso che posso fare questo? Che cosa ho bisogno, in sostanza, è quello di prendere lo script (es. List.php? 1,3) e il luogo qualunque essa renderebbe, dopo aver utilizzato i parametri di 1,3, in un div nel div "corpo" della mia disposizione. Per quanto posso dire, il rendering non sembra essere in grado di catturare i parametri GET. Qualcuno sa di un modo per fare questo.

Tutte le idee sarebbero immensamente apprezzato. Grazie per il vostro aiuto!

È stato utile?

Soluzione

Questa non è una cosa banale processo, tuttavia, è possibile scrivere un itinerario personalizzato, insieme ad alcuni controller di magia per gestire questo genere di cose e comprendono il corretto file PHP:

Prima di tutto - Il percorso dovrebbe probabilmente essere (in ZF1.9 convenzioni 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"

Ora tutte le richieste di messageboard/whatever.php dovrebbero essere indirizzati a PhorumController :: wrapperAction () e hanno 'whatever.php' in $this->getRequest()->getParam('page')

Poi dovrebbe diventa una semplice questione di reindirizzare la vostra azione "wrapper" per includere il file php corretta da Phorum. Ho aggiunto un po 'di codice da un controller simile ho (anche se il mio non ha incluso i file php - è stato concepito esclusivamente per servire una directory di contenuto)

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

-. Assicurati di testare il codice per le persone cercando di richieste artigianali con .., ecc nella pagina

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top