Question

J'ai essayé de poser cette fois, mais je pense que ma première question était trop claire pour vous les gars de répondre, donc je vais essayer à nouveau

Je fais un site Web en utilisant le Zend Framework, et essaie d'inclure le Phorum premade messageboard. Jusqu'à présent, je l'ai fait fonctionner en ne passant par mon bootstrap en utilisant mon fichier .htaccess. Ce que je voudrais faire, je voudrais faire est d'être capable de l'exécuter à travers mon bootstrap pour que je puisse utiliser mes présentations et de classes créées précédemment que je ne peux pas courir par Zend.

Par exemple, j'ai un signe premade dans le système qui fonctionne par Zend_Auth. J'ai les données de la personne enregistrées dans Zend_Session. Je charge le profil de l'utilisateur via un contrôleur. J'ai une couche de service pour le modèle qui se connecte à ma base de données pour le compte de l'utilisateur. Il y a plusieurs autres dépendances qui, pour autant que je peux dire, j'ai besoin du bootstrap pour.

Phorum est fondamentalement juste un grand ensemble de scripts PHP qui dépendent des paramètres GET. Mon idée originale était d'utiliser un contrôleur pour rendre les scripts. Un exemple de ce que l'URI ressemblerait à ceci: My-Site.com/messageboard/list.php?1,3 avec messageboard étant le messageboardController. Bien que cela fonctionne pour la liste de chargement, il ne peut pas capturer les paramètres GET, qui Phorum dépend. En raison de la nature complexe de Phorum, il serait presque impossible pour moi d'être en mesure d'aller et faire quelque chose comme My-Site.com/messageboard/list/1/3 ou quoi que ce soit le long de ces lignes. L'URI doit être le premier, car il est construit pour Phorum.

Je l'ai essayé d'utiliser des cadres. Je suis arrivé à garder mon journal dans le panneau en haut, et avait le corps de la page soit un cadre, mais il était unbookmarkable, et le bouton de retour en tout outrageusement difficile. Je ne pouvais pas aussi Préparons le cadre de parler à la page parent dans Zend, donc les cadres ne sont pas une option.

Quelqu'un at-il une manière que je peux le faire? Ce que je dois, en substance, est de prendre le script (ex. List.php? 1,3) et le lieu quoi qu'il rendrait, après avoir utilisé les paramètres 1,3, dans un div dans le « corps » de mon div disposition. Pour autant que je peux dire, rendre ne semble pas être en mesure de saisir les paramètres GET. Est-ce que quelqu'un sait d'une manière que je peux le faire.

Toutes les idées seraient infiniment appréciées. Merci pour votre aide!

Était-ce utile?

La solution

Ce n'est pas une chose triviale à traiter, cependant, il est possible d'écrire un itinéraire personnalisé, ainsi que la magie du contrôleur pour gérer ce genre de chose et inclure le fichier php approprié:

Tout d'abord - Votre itinéraire devrait probablement être (dans ZF1.9 conventions 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"

Maintenant toutes les demandes de messageboard/whatever.php devraient être acheminés vers PhorumController :: wrapperAction () et ont 'whatever.php' dans $this->getRequest()->getParam('page')

Ensuite, devrait devenir une simple question de rediriger votre action "wrapper" pour inclure le fichier php approprié de phorum. J'ai ajouté un code à partir d'un contrôleur similaire je (même si la mienne ne comprennent pas les fichiers php - il a été conçu uniquement pour servir un répertoire de contenu)

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

S'il vous plaît -. Assurez-vous de tester ce code pour les personnes essayant de demandes d'artisanat avec .., etc dans la page

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top