2011-01-27 7 views

답변

8

Liferay의 페이지에 액세스하는 API는 LayoutService입니다. 그러나 Liferay에서는 페이지 이름이 고유하지 않으며 국제화되어 있습니다. 따라서 페이지 이름이 URL 외에도 검색 할 수있는 고유 한 속성이 필요합니다.

실제로 페이지 이름 만있는 경우 LayoutLocalServiceUtil.getLayouts (...)을 사용하여 모든 레이아웃을 반복하고 일부 속성 (이 경우 해당 이름)을 확인할 수 있습니다.

+0

이름은 고유하지 않지만 FriendlyURL 속성은 고유합니다. – Jonny

+2

FriendlyURL은 고유하지 않습니다. AFAIK. 여러 그룹의 두 페이지 (레이아웃)는 동일한 친숙한 URL을 가질 수 있습니다. 실제로 그들은 새로운 그룹을 만들 때 일반적으로 "/ home"친숙한 URL이있는 페이지를 만듭니다. 페이지 (레이아웃)의 친숙한 URL에 완전한 경로 (예 : '/ web/guest/home', '/ web/user/home')가 포함되어 있지는 않지만 그 일부만 포함된다는 것이 있습니다. – mvmn

+4

groupId + friendlyURL의 조합은 고유합니다. –

12

Liferay의 포털 페이지는 실제로 API와 DB 테이블에서 Layouts이라고합니다. 그들은 plid 필드로 식별되며 LayoutLocalServiceUtil 및 관련 API를 사용하여 얻을 수 있으며 themeDisplay.getLayout()과 같은 다른 호출에서도 얻을 수 있습니다.

그러나 당신은 포털, 그룹과 레이아웃 자체의 친화적 인 URL을 연결해야 페이지에 문자열 포함 된 URL을 구축하기 위해 (즉, /web/guest/home-web 포털 URL은 guest가에 의해 게스트 그룹의 친화적 인 URL입니다, 공개 페이지입니다 기본값이며 home은 기본적으로 홈 페이지/레이아웃의 친숙한 URL입니다.) 이는 공개 또는 비공개 페이지인지 여부를 확인해야하기 때문에 까다로울 수 있습니다.

일단 그룹에 대해 친숙한 URL로 가상 호스트를 사용하기 시작하면 상황이 바뀝니다. 그래서 이것은 좋은 방법이 아닙니다.

수동으로 URL을 생성하지 않고 올바른 URL을 사용하지 않으려면 com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay) 정적 방법 PortalUtil을 사용해야합니다. 그러면 모든 필요한 작업이 수행됩니다. 비록 레이아웃뿐만 아니라 ThemeDisplay을 제공해야합니다.

1

Liferay 6.1.20 이상에서는 '링크 포틀릿 URL 대 페이지'를 사용하여 링크가 포털의 앤서 페이지로 진행되도록 할 수 있습니다. 포틀릿의 '보기 및 느낌'메뉴 항목에 있습니다. 나를 위해 이것은 잘 작동합니다.

건배

관련 문제