4

私は liferay を初めて使用しますが、これが非常に簡単であるとほぼ確信しています。速度マークアップを使用して、Liferay Web サイト内のページへのリンクを生成し、それらを別のページのポートレット内に埋め込むことができるようにしたいと考えています。

どうすればいいのか漠然とした考えがあるので、どこかに投稿されているのではないかと探し回ったのですが、何も見つかりませんでした。ちなみに、思いついたコードはポートレットのview.jsp内に入れたいと思っています。ここでは速度マークアップを使用しますが、それが jsp 内で許可されているかどうかはわかりません (確かなことはわかりません)。

返信するためにさらに情報が必要な場合はお知らせください。

4

2 に答える 2

4

ここでは速度マークアップを使用しますが、それが jsp 内で許可されているかどうかはわかりません (確かなことはわかりません)。

view.jspJSP ( )内で Velocity マークアップを使用する理由は何ですか? あなたが本当に速度に優れているという議論を除けば、それを行うことには何の利点もありません。

ただし、JSP 内に速度を埋め込むのに役立つリンクがあります。

注: 私の意見では、速度をポートレットの JSP 内に埋め込むことは良い方法ではありません

JSP の場合:

  • Layoutの静的メソッドを使用して取得できるオブジェクトが必要になりますLayoutLocalServiceUtil
  • レイアウトを取得したら、com.liferay.portal.util.PortalUtillikegetLayoutFriendlyURLなどの静的メソッドを使用getLayoutFullURLして URL を作成できます。

VMの場合 (これらは*.vmテーマ内のファイルになります):
JSP で説明されているのと同じすべての手順に従うことができます。あなたがする必要があることは次のとおりです。

  • のインスタンスはLayoutLocalService、次のコードを使用して見つけることができます (この回答から取得):

    #set($layoutLocalService = $serviceLocator.findService("com.liferay.portal.service.LayoutLocalService"))
    

    これで、速度変数$layoutLocalServiceを使用して、レイアウトを取得するためのサービス メソッドを呼び出すことができます。

  • 次に、テーマ内のファイルで使用可能なPortalUtil変数を使用して、クラスのメソッドを呼び出すことができます。$portalUtil*.vm

詳細については、次のファイルをチェックアウトできます (興味がある場合)。

  1. docroot/html/themes/_unstyled/templates/init.vm、これには、テーマで使用可能なすべての速度変数が含まれています。対象となる変数は$theme、、、、$theme_displayです。$layout$navItems
  2. docroot/html/themes/_unstyled/templates/portlet.vm、このファイルは個々のポートレットを表示するためのテンプレートです。
  3. docroot/html/themes/_unstyled/templates/navigation.vmには、ページ リンクを含むナビゲーション メニューを表示するためのコードが含まれています。
  4. docroot/html/themes/_unstyled/templates/portal_normal.vm、このファイルはliferayのページテンプレートを表し、これにはnavigation.vm&などの他のファイルが含まれていますportlet.vm.
于 2012-08-21T10:34:18.193 に答える
1

速度の場合:

さて、Velocity で Liferay ページのリンクを生成するには、Liferay ソース コードの次のファイルを見てください。

/portal-web/docroot/html/themes/_unstyled/templates/navigation.vm

そこには、デフォルトの Liferay テーマがサイトのナビゲーション構造をどのように生成するかが表示されます。ここでの生活を楽にするために、次のことを行います。

<nav class="$nav_css_class" id="navigation">
<h1>
    <span>#language("navigation")</span>
</h1>

<ul>
    #foreach ($nav_item in $nav_items)
        #if ($nav_item.isSelected())
            <li class="selected">
        #else
            <li>
        #end
            <a href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $nav_item.getName()</span></a>

            #if ($nav_item.hasChildren())
                <ul class="child-menu">
                    #foreach ($nav_child in $nav_item.getChildren())
                        #if ($nav_child.isSelected())
                            <li class="selected">
                        #else
                            <li>
                        #end
                            <a href="$nav_child.getURL()" $nav_child.getTarget()>$nav_child.getName()</a>
                        </li>
                    #end
                </ul>
            #end
        </li>
    #end
</ul>

そのため、Velocity は $nav_items というコレクションを調べ、各アイテムに対して getURL() メソッドを呼び出してリンクを生成します。

JSP の場合:

  1. LayoutLocalServiceUtil クラス、特に getLayouts() メソッドの 1 つを使用する必要があります。ニーズに最も適したものを選択する必要があります。
  2. これにより、レイアウト (ページ) のリストが返され、これらの各レイアウトで getFriendlyURL() を呼び出して URL を返すことができます。これはサイトへの相対 URL になるため、/my-site-home-page のようになります。 .

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-08-21T07:01:12.487 に答える