答えて
EDIT:必要なクラスimpl
が入ってくるバンドルからエクスポートされないため、この時点では実行できないように見えます。Radu Cotescuがコメント内でそれを指摘してくれてありがとうございます。
以下、私の元の回答を残します。誰かが本当に必要か、githubの上のスリングレポをフォークし、追加/独自のプラグインを展開するか、単に必要なimpl
パッケージをエクスポートしてみると、あなた自身のコードベース
にプラグインを追加することができますし、単にたい場合Sightlyのソースコードでは、プラグインと呼ばれるもののリストを見ることができます。これは目に見えるブロックステートメントのそれぞれの実装を提供します。 https://github.com/apache/sling/tree/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/plugin
これは単なる推測です、と私はまだそれを試していないが、それはあなたがorg.apache.sling.scripting.sightly.impl.plugin.PluginComponent
を拡張し、Plugin
OSGiサービスで独自のクラスを提供することができるかもしれように思える:それらはここで見つけることができます。私は、既存のプラグインの1つをコピーして、新しい名前で動作させることができるかどうかを確認します。たぶんTextPlugin
、それはかなりまっすぐ進むようです。
うまくいけば、これはいくつかの楽しみにつながる方向にあなたを指します:)
をおそらく
@Component
@Service(Plugin.class)
@Properties({
@Property(name = Plugin.SCR_PROP_NAME_BLOCK_NAME, value = "foo"),
@Property(name = Plugin.SCR_PROP_NAME_PRIORITY, intValue = 9)
})
public class FooPlugin extends PluginComponent {
@Override
public PluginInvoke invoke(final Expression expression, PluginCallInfo callInfo, final CompilerContext compilerContext) {
return new DefaultPluginInvoke() {
@Override
public void beforeChildren(PushStream stream) {
String variable = compilerContext.generateVariable("fooContent");
stream.emit(new VariableBinding.Start(variable,
compilerContext.adjustToContext(expression, MarkupContext.TEXT, ExpressionContext.TEXT).getRoot()));
stream.emit(new OutVariable(variable));
stream.emit(VariableBinding.END);
Patterns.beginStreamIgnore(stream);
}
@Override
public void afterChildren(PushStream stream) {
Patterns.endStreamIgnore(stream);
}
};
}
}
このような何かが、その後、見た目のファイルにそれを使用
<div data-sly-foo="${properties.jcr:description}">This text should get replaced</div>
I私が試してみるとこの答えが更新されます。
メモ:実際のシナリオでこれを実行しようとしている場合は、この方法で解決しようとしている問題を解決するためのより良い方法があります。視覚的なチームは、目に見えるものをするために必要なものすべてを私たちに提供しようとしました。
私はこれをいつか戻してみましたが、うまくいきませんでした。どういうわけか、FooPluginはpluginregistryでは利用できません。プラグインfooが存在しないというエラーが表示されることになります。とにかく、私たちはいくつかの理由でこのアプローチ(カスタムattrの作成)を追求しませんでした。 – awd
新しい 'data-sly- *'ブロック要素をサポートするカスタムプラグインを登録することはできません。 OSGiはDI用に使用されていますが、 'impl'パッケージはエクスポートされないため、バンドルの外側には表示されません。 –
ああ、それは良い点@RaduCotescuです。私の答えを更新し、あなたをアップしました:-) –
いいえ、独自のブロック要素を作成することはできません。その実装は仕様[0]に準拠していないためです。新しいプラグインを追加するだけではなく、同じHTML要素で複数のブロックが使用されているときにブロック要素の優先順位が設定されます。これが可能であれば、提供されたプラグインを無効にすることはできません。
しかし、新しいブロック要素が必要と思われる場合は、明確に定義されたユースケースで仕様にプルリクエストを送信してください。さらに、Apache Sling開発メーリングリスト[1]でユースケースについて話し合うと助けになるでしょう - あなたが必要とするのは他の開発者も考えていることかもしれません。その場合、コラボレーションは最適な解決策を見つけるのに間違いなく役立ちます問題に
[0] - https://github.com/Adobe-Marketing-Cloud/sightly-spec/blob/1.2/SPECIFICATION.md
[1] - https://sling.apache.org/project-information.html#mailing-lists
私たちはユースケースを別の方法で解決しましたが、今後は間違いなくそれを見ていきます。私はAngularの属性ディレクティブのようなものを考えていました。 – Alfeu
もちろん、お客様のニーズに合わせてテンプレートエンジンを拡張したいというユースケースもあります。エンジンをよりダイナミックかつフレキシブルにするためにAPIを閉じる理由コアの内容をロックアウトしたままにしておくことはできますが、顧客のニーズに合わせて拡張し調整することができます。私は、仕様の有効なユースケースとなる一般的なものについて話しているわけではありませんが、それよりも...既存のプラグインのフィルターを作成することはできません。私は非常に気に入っていますが、何らかの形で拡張する可能性のないテンプレートエンジンを使用したことはありません。 – d33t
- 1. HTML5タグ<meter>属性
- 2. <include>タグoverride属性
- 3. クラスセレクタを介してwidth属性を取得するにはどうすればよいですか?クラスの</p> <pre><code><div class="one" > <img src="1.png" class="two"> <div> <div class="three" > <img src="2.png" class="two"> <div> </code></pre> <p>と属性<code>width</code>を取得する方法
- 4. 保存ブラウザは</p> <p><em>example.com</em></p> <p>、あなたがウェブサイトを持っていると仮定src属性
- 5. レール、単純なプライベートメッセージングシステム</p> <p>を作成しようとしているのid属性コントローラで
- 6. ConfigurationElementCollectionでカスタム属性を持つ方法MyCollectionを実装する際に</p> <pre><code><MyCollection default="one"> <entry name="one" ... other attrubutes /> ... other entries </MyCollection> </code></pre> <p>を、以下のような構成のための
- 7. mapstructリスト<Object1>リスト<Object2>属性が異なる
- 8. <select> JQueryでカスタムhtml属性を取得
- 9. センターを作成<ul><li></li></ul>タグ
- 10. ジェネリック型のためのカスタムデシリアライザの作成方法私はFooのためのカスタム・ジャクソンのデシリアライザを書きたい</p> <pre><code>class <T> Foo<T> { .... } class Bar { Foo<Something> foo; } </code></pre> <p>:
- 11. ロボットフレームワークは、私がこの</p> <pre><code>{"_embedded":[ {"attr_name":"attr_value_1"}, {"attr_name":"attr_name_2"} ] } </code></pre> <p>のようなデータを持っていると私は最初の属性<code>attr_value_1</code>を取得したいJSONリスト
- 12. Googleタグマネージャの変数カスタム<a>属性値
- 13. カスタムXHTMLプラグインの作成は、私がこの</p> <p>私のplugin.xmlのコードのようなカスタムXHTMLプラグインを作成した
- 14. <c:if>タグでのvar属性とscope属性の使用
- 15. <nativehr> 0x80070057</nativehr><nativestack></ nativestack> SharepointリストにChoiceフィールドを作成する場合
- 16. <HTML>タグのクラス属性?
- 17. 「src」属性のAngularJSバインド<img>タグ
- 18. layout_weight属性の<include>タグ
- 19. UITextViewは何から..私は<em>起因</em>へと<em>は属性が有効になっ</em>の編集許可オプションで<em>テキスト</em>セットで<code>UITextView</code>テキストビューを使用してアプリケーションを作成した属性付きテキスト
- 20. <script>タグの属性を変更する方法
- 21. Scrapping:<abbr>タグで属性を取得する方法
- 22. 子要素の属性をJAXBでフィールドにバインドする方法は?以下のXML</p> <pre><code><mappings> <map> <source srcAttr="oof">foo</source> <target trgAttr="rab">bar</target> </map> <map> ... </code></pre> <p>考える
- 23. どのようにHTML5スクリプト属性は、「データ・メイン」動作しますか?あなたが読むことができる</p> <pre><code><script data-main="scripts/main" src="scripts/require.js"></script> </code></pre> <p>とそのドキュメントに:例requireJSについては
- 24. <head>と<table>タグに属性としてのbgColorを追加するのはなぜですか?
- 25. ビューでDjangoのquerysetから特定の属性を取得する方法は?</p> <pre><code>file_s = Share.objects.filter(shared_user_id=log_id) </code></pre> <p>は今、私はDjangoのビューでfile_sからfiles_id属性を取得したい:
- 26. のJavaFX:カスタムのチェックボックスtreetablecell私は<code>CheckBox</code>を使用して、私のカスタム<code>TreeTable</code><code>CellFactory</code>を作成しようとしている変更
- 27. C#XML要素私は特に例えば<code><EmpTypeHeader></code>で<code>EmpList</code>タグの数と<code><EID>.</code></p> <p>を取得する必要がありますXMLノードに
- 28. は、私はあなたが<em>domain.com</em>、それは<em>domain.com.ipaddress.com</em></p> <p>にリダイレクトされます場合はここではメインのコードだとChromeの拡張機能を作成していたURL
- 29. HTMLコンテンツ編集可能なDIV:私は、ユーザーがそこに任意のコンテンツを入力することができます<strong>のcontentEditable</strong></p> <p><code><div class="editable" contenteditable="true"></div></code></p> <p>であるdiv要素を持っているテキストイベント
- 30. ハスケル:私は<code>Int</code>は頂点のインデックス番号であると<code>[Vertex]</code>がこの頂点に隣接する頂点であるカスタム再帰的なデータ型</p> <pre><code>data Vertex = Vertex Int [Vertex] </code></pre> <p>を持って再帰的なデータ型
それは、例えば、@コンテキスト= 'styleString' 明示的を使用しての必要性を排除することができるカスタム属性を作成するには、確かに、素晴らしいことです。 –