문제

나는 이것을 한 번 물어 보려고 노력했지만 내 이전 질문은 너희들이 대답하기에는 너무 불분명하다고 생각한다.

나는 Zend 프레임 워크를 사용하여 웹 사이트를 만들고 있으며 Pricade Messageboard Phorum을 포함 시키려고 노력하고 있습니다. 지금까지 .htaccess 파일을 사용하여 부트 스트랩을 통해 실행하지 않아 작동했습니다. 내가하고 싶은 것은 부트 스트랩을 통해 실행할 수있어 Zend를 통해서만 실행할 수있는 이전에 생성 된 레이아웃과 클래스를 사용할 수 있도록하는 것입니다.

예를 들어 Zend_auth를 통해 작동하는 미리 메이드 사인 시스템이 있습니다. zend_session에 그 사람의 데이터를 저장했습니다. 컨트롤러를 통해 사용자의 프로필을로드합니다. 사용자를 대신하여 데이터베이스에 연결하는 모델의 서비스 계층이 있습니다. 내가 알 수있는 한, 부트 스트랩이 필요한 몇 가지 다른 종속성이 있습니다.

Phorum은 기본적으로 Get 매개 변수에 의존하는 대규모 PHP 스크립트 세트입니다. 저의 원래 아이디어는 컨트롤러를 사용하여 스크립트를 렌더링하는 것이 었습니다. 그 URI의 모습의 예는 다음과 같습니다. my-site.com/messageboard/list.php?1,3 Messageboard가 MessageboardController입니다. 이것은 로딩 목록에 효과적이지만 Phorum이 의존하는 Get 매개 변수를 캡처 할 수 없습니다. Phorum의 복잡한 특성으로 인해, 내가 들어가서 my-site.com/messageboard/list/1/3 또는 그 줄을 따라 모든 것. URI는 Phorum에 내장되어 있기 때문에 전자 여야합니다.

프레임을 사용해 보았습니다. 로그인 패널을 위에 올려 놓고 페이지의 본문을 프레임으로 만들었지 만 책 마크가 불가능했으며 뒤로 버튼은 모든 것을 터무니 없게 만들었습니다. 또한 프레임이 Zend의 부모 페이지와 대화 할 수 없었기 때문에 프레임은 옵션이 아닙니다.

누구든지 내가 할 수있는 방법이 있습니까? 본질적으로 내가 필요한 것은 스크립트 (예 : list.php? 1,3)를 가져 와서 1,3 매개 변수를 사용한 후 내 렌더링을 내 "바디"div의 DIV에 배치하는 것입니다. 형세. 내가 알 수있는 한, 렌더는 get 매개 변수를 캡처 할 수없는 것 같습니다. 누구든지 내가 할 수있는 방법을 알고 있습니까?

모든 아이디어는 헤아릴 수 없을 정도로 감사 할 것입니다. 도와 주셔서 감사합니다!

도움이 되었습니까?

해결책

이것은 처리하기위한 사소한 일이 아니지만, 이런 종류의 물건을 처리하고 적절한 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.php PhorumController :: WhorperAction ()로 라우팅해야하며 '뭐든지'가 있어야합니다. $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);
}

제발 - 테스트하십시오 요청을 제작하려는 사람들을위한이 코드 .., 페이지에 등.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top