2017-10-06 3 views
1

hereのようにアセットを事前にロードしようとしています。clientlibsファイルのパスを取得する

私は/apps/foundation/components/page/head.htmlでこれらを含めました:

<sly data-sly-use.appConfig="${'../../../utils/AppConfig.js'}"> 
    <link rel="preload" href="${appConfig.assetsURL}/etc/designs/myapp/jquery/jquery-3.1.1.min.js"> 
    <link rel="preload" href="${appConfig.mainStyle}/mainstyle.css"> 
    </sly> 

は今含める必要がある最後のファイルがページによって異なるパスを持つ、ページごとにまとめられclientlibs.jsclientlibs.cssです。最近の投稿(/content/recent-posts.html)のパスが問題である/etc/designs/myapp/posts/clientlibs.js

であるのに対し、ホームページ(/content/homepage.html)のために例えばclientlibs.jsへのパスは、私が作曲んか/etc/designs/myapp/homepage/clientlibs.jsですこれらのアセットのURL?

this gistのグローバル変数を使用しようとしましたが、運がありません。どちらも資産への正しい道を返しません。

答えて

1

clientlibsパスのページへのマッピングはアプリケーション固有のように見えるので、ページタイプと必要なclientlibを検出する方法を実装する必要があります。

clientlibカテゴリを使用して、ページタイプごとに正しいビットを組み立てることができます(https://docs.adobe.com/docs/en/aem/6-3/develop/the-basics/clientlibs.htmlとclientlibインクルードの実装方法は/libs/granite/sightly/templatesです)。

また、AEM 6.3を使用している場合は、編集可能なテンプレートを使用し、テンプレートレベルでclientlibを設定することを検討してください。

すでにclientlibカテゴリを使用すると、ちょうどclientlibの出力を書き換えたいあなたはURLを抽出するために、独自のヘルパーを作成することができます含まれている場合:

package apps.test; 

import javax.script.Bindings; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.apache.sling.scripting.sightly.pojo.Use; 

import libs.granite.sightly.templates.ClientLibUseObject; 

public class Test implements Use { 

    ClientLibUseObject obj = null; 
    Pattern pattern = Pattern.compile("(?:href|src)=\"(.*?)\""); 
    List<String> srcs = null; 

    public void init(Bindings bindings) { 
     obj = (ClientLibUseObject) bindings.get("clientLibUseObject"); 
    } 

    public List<String> getSrcs() { 
     if (srcs == null && obj != null) { 
      srcs = new ArrayList<>(); 
      String tmp = obj.include(); 
      Matcher matcher = pattern.matcher(tmp); 
      while (matcher.find()) { 
       srcs.add(matcher.group(1)); 
      } 
     } 
     return srcs; 
    } 
} 

をし、次にあなたのスクリプトでそれを呼び出す:

<link data-sly-use.clientLibUseObject="${'libs.granite.sightly.templates.ClientLibUseObject' @ categories='jquery,jquery-ui', mode='all'}" 
      data-sly-use.rewriter="${'Test' @ clientLibUseObject=clientLibUseObject}" 
      data-sly-repeat="${rewriter.srcs}" 
      rel="preload" href="${item}"/> 
+0

私は実際にテンプレートを使用していて、 'category'プロパティを使ってこのレベルでclientlibを設定しています。 ( '') しかし、リンクタグを作成する必要がある頭では、アセットのURLだけが必要です。スクリプトタグ全体ではありません。これは、カテゴリの小道具から資産のURLを取得するには、この再開を解決するようです。どのように私はこれを達成することができましたか? –

+0

@TiberiuMaxim:提案を追加 – Vlad

+0

Thx @vlad。私はこれを保留にしましたが、今すぐ再開しました。あなたの例を実行しようとすると、 'package org.apache.sling.scripting.sightly.pojo does not exist'が得られます。私は私のプロジェクトでこれをどのように追加するか分かりません。あなたはこの方向で助けてくださいできますか? –

関連する問題