2012-07-12 3 views
3

질문

웹 사이트의 각 페이지에 위젯 (데이터베이스 호출 결과)을 구현하려면 어떻게해야합니까?PlayFramework2에서 위젯을 구현하는 방법은 무엇입니까?

컨텍스트

저는 사이드 바를 포함한 전통적 웹 응용 프로그램을 가지고 있습니다.

  • 자명 계정에 대한
  • 상세 (마지막 접속 등)는 사용자의 프로파일에 기초하여
  • Personnalized 메시지 사이드 바는 다음과 같은 데이터를 포함한다.
  • 데이터베이스에서 추출한 다른 데이터. 지금까지

    공식 문서에 나타낸 바와 같이

솔루션, 템플릿 안에 템플릿을 렌더링 할 수 있습니다. 흥미로운 기능이지만 충분하지 않습니다. 내 위젯에서 렌더링되기 위해서는 데이터베이스의 데이터가 필요합니다. 의미하는 것이다

:

  1. 을 어딘가에 사이드에 필요한 모든 데이터를 얻기 각보기 각 컨트롤러에서 데이터를 전달
  2. ,
  3. 마지막으로 각 템플릿과 외부 템플릿을 호출 주어진 데이터.

내가하고 싶은 것은 Symfony2 프레임 워크에있는 것입니다. 컨트롤러를 직접 호출하고 싶습니다.

{% render MyController:MyActionMethod %} 

이러한 종류의 메카니즘을 어떻게 구현할 수 있습니까?

추신 : 예, 조금 둘러 봤습니다. 이 질문은 "비슷한 질문입니다.": How to avoid passing parameters everywhere in play2?

답변

1

먼저 두 가지 솔루션이 있습니다. 먼저 컨트롤러에서 데이터를 개체로 전달한 다음이를 렌더링하는 데 tags을 사용하고 있습니다.

두 번째 해결책은 반대로, 각 템플릿은 스칼라 함수이므로 컨트롤러에서 몇 가지 메소드를 호출하면 필요한 데이터를 가져 와서 하위 템플릿을 렌더링 할 수 있습니다.

즉. 템플릿에서 액세스 controllers.MyController.myMethod(Integer a, Integer b)에 대신 결과의 당신은 play.api.templates.Html (또는 play.mvc.Content)을 반환하는 컨트롤러에 정적 메서드를 작성할 수

<div> 
    @MyController.myMethod(1,2) 
</div> 
+0

참으로 멋진 작품. 나는 그것을 오늘 저녁에 시도 할 것이다. 이 솔루션에서 볼 수있는 한 가지 문제점은 요청이 필요할 것입니다.의미, 나는 모든 템플릿에 따라 요청을 전달해야합니다. –

+1

'request'는 모든 템플릿에서 암시 적입니다 (즉, 직접 사용할 수 있습니다) –

0

를 사용합니다.

public static Content widget() { 

    Data fetchedData = fetchDataFromTheDatabase(); 

    return views.html.widget.render(fetchedData); 
} 

그리고이 정적 메서드를 호출하면됩니다.

관련 문제