2017-06-11 2 views
-1

文書やメディア表示ポートレットのルートフォルダとしてフォルダのいずれかを設定する方法DAMの表示ポートレットのルートフォルダを指すようにする方法 enter image description hereprogrammatically.PFAイメージによってプログラム的

+0

私は良いポインタを持っていますが、あなたがhttp://meta.stackexchange.com/questions/141823/why-is-cross-posting-wrong-on-an-external-siteで行動するまで待つことになります –

答えて

1

Liferayのメジャーバージョン

あなた質問はとタグ付けされています。Liferay 6Liferay 7 2つのリリースは大幅に異なります。この回答はLiferay 6.xを使用していると仮定しています。これは、OSGIモジュールではなく、DDM ポートレットを要求しているためです。

プログラムで任意のフォルダがドキュメントライブラリの表示にポートレットをJSP用のJavaServerページのフックを作成する必要がありますように、入力リソースをデフォルトにすることを設定します。具体的になる前にJSPフックを作成する方法を簡単に説明します。


あなたのプラグインSDKのフックフォルダに移動し、コマンド・ライン端子からフック

From Liferay's Knowledge base

を作成します。フックプロジェクトを作成するには、作成スクリプトを実行する必要があります。ここでは、スクリプトを実行するには従うべきフォーマットだ:LinuxおよびMac OS X上で

create.[sh|bat] [project-name] "[Hook Display Name]" 

、あなたは、この例では、いずれかのコマンドを入力したい:

./create.sh doc-lib-disp-hook "Document Library Display Hook" 

Windowsでは、次の例のようなコマンドを入力します。

create.bat doc-lib-disp-hook "Document Library Display Hook" 

Liferay IDEの新規プロジェクトウィザードと作成スクリプトは、プラグインSDKのフックフォルダにフックプロジェクトを生成します。 Plugins SDKはプロジェクト名に自動的に "-hook"を追加します。

これを動作させるには、Apache ANTがインストールされている必要があります。インストールが必要な場合は、次のマニュアルを参照してください。

フックは、あなたのLiferay IDEまたはLiferayの開発メーカー(またはEclipse)で開いて作成されたら。あなたのIDEで

  1. ファイル(左上隅)
  2. の下にある下向きの矢印をクリックしDOC-LIB-DISP-フック上の既存のソース
  3. ダブルクリックしてからLiferayのプラグイン・プロジェクトを選択します。プラグインのSDK Hookディレクトリにあるフォルダを開きます。

これに類似した名前(別名)が表示されます。

enter image description here


オーバーライドJSP

今、あなたはフックプラグインを正常に作成していることを、我々は必要なファイルを上書きする必要があります。私たちは、このフックのために必要であること、特に二つのファイル

  • HTML /ポートレット/ document_library_display/configuration.jsp
  • HTML /ポートレット/ document_library/

init.jsp我々は両方必要があります。これらのファイルの1つを実際にオーバーライドするだけで済みますが、この例を論理的に参照する必要があります。

は、JSPの実行以下の手順で上書きするには

あなたのMETA-INFフォルダの下
  1. オープンアップのLiferay-hook.xmlcustom_jspと呼ばれる新しいディレクトリを作成し概要モード
  2. 緑プラス記号(カスタムJSPラベルの右側にある)をクリックします。
  3. 上記の両方のファイルを検索して(ウィンドウにURLをコピーして貼り付けて)、[保存]をクリックします。

これで、次のディレクトリ構造があることに気付きました。

enter image description here

てみましょう最初のconfiguration.jspを開きます。これはスクリーンショットをとったGUIを生成するコードです。次のコードブロックを見つけます。

 <aui:field-wrapper label="root-folder"> 
      <div class="input-append"> 
       <liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" /> 

       <aui:button name="openFolderSelectorButton" value="select" /> 

       <% 
       String taglibRemoveFolder = "Liferay.Util.removeFolderSelection('rootFolderId', 'rootFolderName', '" + renderResponse.getNamespace() + "');"; 
       %> 

       <aui:button disabled="<%= rootFolderId <= 0 %>" name="removeFolderButton" onClick="<%= taglibRemoveFolder %>" value="remove" /> 
      </div> 
     </aui:field-wrapper> 

ブロック内に、設定したいルートフォルダ要素が表示されます。

<liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" /> 

フォルダのURLがすでに変数rootFolderNameにデフォルトで設定されて見ることができるように。その変数が最初に初期化される場所を見つける必要があります。

このファイルはまったく変更する必要はありません。私はそれを含めるとそれを開き、論理的に従うことができました。

あなたはrootFolderNameに気付いた場合configuration.jsのpファイルの任意の場所に初期化されません。したがって、init.jspというファイルは、ページの上部にインクルードされているため、調査する必要があります。そのファイルを開くと、次のブロックに気付くでしょう。

String portletResource = ParamUtil.getString(request, "portletResource"); 

if (layout.isTypeControlPanel()) { 
    portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(themeDisplay.getCompanyId(), scopeGroupId, PortletKeys.PREFS_OWNER_TYPE_GROUP, 0, PortletKeys.DOCUMENT_LIBRARY, null); 
} 

long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", DLFolderConstants.DEFAULT_PARENT_FOLDER_ID); 
String rootFolderName = StringPool.BLANK; 

if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { 
    try { 
     Folder rootFolder = DLAppLocalServiceUtil.getFolder(rootFolderId); 

     rootFolderName = rootFolder.getName(); 
    } 
    catch (NoSuchFolderException nsfe) { 
    } 
} 

このコードは基本的にはrootFolderNameを初期化しようとしています。 rootFolderIdがより高く0

  1. により、ポートレットの好みのいずれか、または
  2. リクエストパラメータ

を設定されている場合は、我々はそれに応じてrootFolderNameを設定します。


結論

あなたがプログラムで、デフォルトで任意のフォルダにrootFolderNameを設定したい場合は、いくつかのことをすることができます。一番簡単な方法は、フォルダのIDを取得し、プログラムのデフォルトのルートフォルダを設定します。この

long folderIdConstant = 999999L; // place folder id here 

long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", folderIdConstant); 

のようにコードを変更することであろう。今すぐビルドして展開してください。

関連する問題