2011-01-27 75 views
18

Tôi muốn tạo một liên kết trong một portlet để tôi có thể điều hướng đến một trang khác trong cổng Web Liferay. Tôi đặt hàng để làm điều đó Tôi đang tìm kiếm một API (có thể là liferay cụ thể) mà cho một tên trang, sẽ trả về url của nó (nó có thể là friendlyURL là tốt).Lập trình có được url của một trang trong liferay

Trả lời

8

API để truy cập các trang trong Liferay là LayoutService. Tuy nhiên, tên trang không phải là duy nhất trong Liferay và hơn nữa chúng được quốc tế hóa. Vì vậy, bạn cần một số thuộc tính duy nhất cho một trang để truy xuất url của nó, bên cạnh tên của nó.

Nếu bạn thực sự chỉ có tên trang, bạn có thể sử dụng LayoutLocalServiceUtil.getLayouts (...) để lặp qua tất cả Bố cục và kiểm tra một số thuộc tính (trong trường hợp này là tên của nó).

+0

Tên không phải là duy nhất, nhưng thuộc tính FriendlyURL là duy nhất. – Jonny

+2

FriendlyURL không phải là AFAIK duy nhất. Hai trang (Bố cục) trong các Nhóm khác nhau có thể có cùng một URL thân thiện. Trên thực tế, họ sẽ, vì khi bạn tạo Nhóm mới, bạn thường tạo trang có URL thân thiện "/ home" trong đó. Điều là URL thân thiện của một trang (Bố cục) không chứa đường dẫn hoàn chỉnh (như "/ web/khách/nhà", "/ web/người dùng/nhà") nhưng chỉ là một phần của nó. – mvmn

+4

Sự kết hợp của groupId + friendlyURL là duy nhất mặc dù. –

12

Trang cổng thông tin trong Liferay thực sự được gọi là Layouts trong API và bảng DB. Chúng được xác định bởi trường plid, có thể thu được bằng cách sử dụng LayoutLocalServiceUtil và các API có liên quan cũng như từ một số cuộc gọi khác như themeDisplay.getLayout().

Tuy nhiên, để tạo Chuỗi chứa URL vào trang, bạn sẽ phải nối URL thân thiện với cổng, nhóm và bố cục (tức là /web/guest/home - web là URL cổng cho các trang công cộng, guest là URL thân thiện của nhóm khách theo mặc định và home là URL thân thiện của trang chủ/bố cục theo mặc định). Điều này có thể phức tạp, vì bạn phải kiểm tra xem đây là trang công khai hay riêng tư, v.v.

Và một khi bạn bắt đầu sử dụng máy chủ ảo có URL thân thiện cho các nhóm, mọi thứ thay đổi. Vì vậy, đây không phải là một cách tốt.

Để tránh tạo URL theo cách thủ công và có URL được bảo đảm chính xác, bạn nên sử dụng com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay) một phương pháp tĩnh là PortalUtil - nó sẽ thực hiện tất cả công việc cần thiết cho bạn. Mặc dù bạn cũng cần phải cung cấp ThemeDisplay và không chỉ Bố cục.

1

Ít nhất trong Liferay 6.1.20, người ta có thể sử dụng 'Liên kết các URL Portlet tới Trang' để làm cho các liên kết tiếp tục đến trang antoher trong cổng thông tin của bạn. Đó là mục trình đơn ´look và feel´ của portlet của bạn. Đối với tôi điều này hoạt động tốt.

cổ vũ

Các vấn đề liên quan