2016-07-22 6 views
1

ip-api.com에서 데이터를 가져 와서 세션에 넣어야 특정 고객 데이터를 내 애플리케이션의 프로세스에서 나중에 사용할 수 있습니다.Concrete5 컨트롤러 로직

문제는 내가 어디에 Concrete5 자체에 논리를 넣을지 모르겠다는 것입니다. 지금은 application/src/IpApi에 수업을 만들고 수업 자체는 문제가 아닙니다. 주요 문제는 그것이 모든 단일 페이지 뷰에서 실행되도록하는 방법입니다. 두 번째 옵션은 블록을 만들어 헤더에 추가하는 것이지만, 템플릿 엔진이 렌더링되기 전에 FrontPage가 활성화되기 전에도 데이터를 구문 분석해야합니다.

어디에 넣어야하고 어떻게로드해야합니까? 내 현재 테마는 elemental 테마의 연장이므로 상자에서 꺼내지도 않습니다. 조언

답변

0

에 대한

덕분에 나는 내가 PageType 처음 만들 것을 발견했다. 특정 유형의 컨트롤러가 거기에서 application/controllers/page_types/<mytype.php>

로 생성 할 수있는 후 on_start 방법은 당신의 친구 또는 어떤 기능이

1

당연히 당신은 패키지를 생성하고 패키지 컨트롤러의 on_start 기능을 사용할 수 있습니다 필요합니다. on_before_render 이벤트 내에서 작업을 수행하는 것이 좋습니다. 아약스 요청 및 기타 이와 같은 작업을 수행하지 않도록하십시오. 그러면 다음과 같이 보일 것입니다 :

<?php 
namespace Concrete\Package\SomePackage; 

class Controller extends \Concrete\Core\Package\Package 
{ 

    public function on_start() 
    { 
     $app = \Core::make('app'); 
     $app->make('director')->addEventListener(
      'on_before_render', 
      function() use ($app) { 
       $session = $app->make('session'); 
       $flashBag = $session->getFlashBag(); 

       if (!$flashBag->has('my-custom-data')) { 
        $dataGetter = $app->make('YourCustomDataGetterClass'); 
        $flashBag->set('my-custom-data', $dataGetter->getData()); 
       } 
      } 
     ); 
    } 

}