-1

一度質問してみたのですが、前の質問がわかりにくすぎて皆さんが答えられなかったと思うので、もう一度質問します

Zend Framework を使用して Web サイトを作成しており、既製の掲示板 Phorum を含めようとしています。これまでのところ、.htaccess ファイルを使用してブートストラップを実行しないことで機能しました。私がやりたいことは、Zend でしか実行できない以前に作成したレイアウトとクラスを使用できるように、ブートストラップを介して実行できるようにすることです。

たとえば、Zend_Auth を介して機能する既製のサインイン システムがあります。その人物のデータを Zend_Session に保存しています。コントローラーを介してユーザーのプロファイルを読み込みます。ユーザーに代わってデータベースに接続するモデルのサービス層があります。私が知る限り、ブートストラップが必要な依存関係は他にもいくつかあります。

Phorum は基本的に、GET パラメータに依存する PHP スクリプトの大規模なセットです。私の最初のアイデアは、コントローラーを使用してスクリプトをレンダリングすることでした。その URI の例は次のとおりです。これはリストの読み込みには機能しますが、Phorum が依存している GET パラメーターを取得することはできません。Phorum は複雑な性質を持っているため、 My-Site.com /messageboard/list/1/3 などのようなものにすることはほとんど不可能です。Phorum に組み込まれているため、URI は前者でなければなりません。

フレームを使ってみました。ログインパネルを一番上にして、ページの本文をフレームにしましたが、ブックマークできず、戻るボタンがすべてを非常に困難にしました。また、フレームが Zend の親ページとうまく通信できなかったため、フレームはオプションではありません。

誰にもこれを行う方法がありますか? 本質的に必要なのは、スクリプト (例: list.php?1,3) を取得し、1,3 パラメーターを使用した後にレンダリングするものを、私の "body" div の div に配置することです。レイアウト。私が知る限り、render は GET パラメータをキャプチャできないようです。誰も私がこれを行うことができる方法を知っていますか?

どんなアイデアでも計り知れないほど高く評価されます。ご協力ありがとうございました!

4

1 に答える 1

1

これを処理するのは簡単なことではありませんが、この種のことを処理し、適切なphpファイルを含めるためのコントローラーマジックとともに、カスタムルートを作成することは可能です。

まず第一に-あなたのルートはおそらく(ZF1.9 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"

これで、へのすべてのリクエストをmessageboard/whatever.phpPhorumController ::wrapperAction()にルーティングし、「whatever.php」を含める必要があります。$this->getRequest()->getParam('page')

次に、「ラッパー」アクションをリダイレクトして、phorumから適切なphpファイルを含めるという単純な問題になるはずです。私が持っている同様のコントローラーからいくつかのコードを追加しました(私のものにはphpファイルは含まれていませんでした-それはコンテンツのディレクトリを提供するためだけのものでした)

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

お願いします-ページでなどを使用してリクエストを作成しようとしている人のために、このコードをテスト..してください。

于 2009-11-07T22:22:17.897 に答える