-1

내 전면 컨트롤러를 통해 미리 만들어진 게시판을 실행,하지만 난 내 이전의 질문 너희들이 대답하기에 너무 불분명 생각, 그래서 난 다시내가 한번 물어 시도 젠드

를 시도 할 것이다 Zend Framework를 사용하여 웹 사이트를 만들고 premade messageboard Phorum을 포함하려고합니다. 지금까지, 나는 .htaccess 파일을 사용하여 부트 스트랩 (bootstrap)을 통해 실행하지 않음으로써 작동하도록 만들었습니다. 내가하고 싶습니다. 이전에 만든 레이아웃과 클래스를 사용할 수 있도록 내 부트 스트랩을 통해이를 실행할 수 있어야합니다. 그러면 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 또는 그 라인을 따라 무엇이든 들어가서 만들 수는 거의 불가능합니다. Phorum에 내장되어 있기 때문에 URI는 전자어 여야합니다.

프레임을 사용해 보았습니다. 나는 패널을 위로 올려 놓고 페이지의 몸체를 프레임으로 유지해야하지만, 그만큼 책을 읽을 수 없었고, 뒤로 버튼은 모든 것을 터무니 없게 만들었다. 또한 프레임을 Zend의 부모 페이지와 잘 대화 할 수 없으므로 프레임이 옵션이 아닙니다.

누구든지이 작업을 수행 할 수있는 방법이 있습니까? 본질적으로 필요한 것은 스크립트 (예 : list.php? 1,3)를 가져 와서 1,3 매개 변수를 사용한 후에 렌더링 할 내용을 "body"div의 div에 넣는 것입니다. 형세. 내가 알 수있는 한 render는 GET 매개 변수를 캡처 할 수없는 것 같습니다. 아무도 내가 이것을 할 수있는 방법을 안다.

어떤 아이디어라도 기뻐할 것입니다. 도와 줘서 고마워! 모든

첫째 :

+0

이미 답변이 하나 있는데 질문을 삭제하고 새 질문을 열어 본 것 같습니다. 초기 버전이 충분하지 않다고 생각되면 질문을 편집 할 수 있습니다. 나는 그것이 당신에게 도움이되지 않는다면 나의 대답이 다른 누군가에게 도움이 될 수 있었기 때문에 당신이 당신의 질문을 삭제했다는 것을 매우 무례한 것으로 안다. –

+0

당신의 대답은 나를 당신의 오래된 대답에 연결시키는 것이 었습니다. 당신이 제 질문을 읽었을 때 대답을 해주지 않았기 때문입니다. – Ethan

+0

나는 이런 식의 오래된 코드를 래핑하지 말 것을 제안합니다. 디버깅에 약간의 악몽이 될 것이지만, 당신이 그것을 할 필요가있는 것들을 당신에게 제공해 주었을 것입니다. – gnarf

답변

1

이 처리 할 사소한 일이 아니다, 그러나, 이런 종류의 물건을 처리 할 수있는 몇 가지 컨트롤러 마법과 함께 사용자 지정 경로를 작성하고 적절한 PHP 파일을 포함 할 수 있습니다 - 당신의 경로는 아마

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 :: wrapperAction (라우팅해야한다 (ZF1.9 application.ini 규칙에) 수)와 $this->getRequest()->getParam('page')

에 'whatever.php'을해야한다

그러면 이 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); 
} 

하세요 페이지에 .. 등으로 요청을 만드는 사람들.

+0

좋아요, 마침내 제대로 작동했습니다. 나는 네가 한 말을 거의 다했다. 가장 큰 문제는 내가 Phorum이 javascript.php와 css.php를 사용한다는 것입니다.이 스크립트는 javascript와 css를 읽는 대신 생성합니다. 무슨 일이 있었는지 내 레이아웃은 또한 javascript 및 CSS, 본질적으로 자바 스크립트 파일에서 비 자바 스크립트를 넣어 주위에 인쇄지고, 그것을 읽을 수 있습니다. 귀하의 주요 아이디어는 훌륭했지만 감사합니다. – Ethan

+0

@Ethan - 당신은 쉽게 'if ($ this-> getRequest() -> getParam ('page ') =='javascript.php ') $ this-> _ helper-> layout-> disableLayout(); 특수한 경우 – gnarf