答えて
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. レール、単純なプライベートメッセージングシステム</p> <p>を作成しようとしているのid属性コントローラで
- 4. ConfigurationElementCollectionでカスタム属性を持つ方法MyCollectionを実装する際に</p> <pre><code><MyCollection default="one"> <entry name="one" ... other attrubutes /> ... other entries </MyCollection> </code></pre> <p>を、以下のような構成のための
- 5. <select> JQueryでカスタムhtml属性を取得
- 6. ジェネリック型のためのカスタムデシリアライザの作成方法私はFooのためのカスタム・ジャクソンのデシリアライザを書きたい</p> <pre><code>class <T> Foo<T> { .... } class Bar { Foo<Something> foo; } </code></pre> <p>:
- 7. <nativehr> 0x80070057</nativehr><nativestack></ nativestack> SharepointリストにChoiceフィールドを作成する場合
- 8. layout_weight属性の<include>タグ
- 9. <HTML>タグのクラス属性?
- 10. UITextViewは何から..私は<em>起因</em>へと<em>は属性が有効になっ</em>の編集許可オプションで<em>テキスト</em>セットで<code>UITextView</code>テキストビューを使用してアプリケーションを作成した属性付きテキスト
- 11. Scrapping:<abbr>タグで属性を取得する方法
- 12. 子要素の属性をJAXBでフィールドにバインドする方法は?以下のXML</p> <pre><code><mappings> <map> <source srcAttr="oof">foo</source> <target trgAttr="rab">bar</target> </map> <map> ... </code></pre> <p>考える
- 13. どのようにHTML5スクリプト属性は、「データ・メイン」動作しますか?あなたが読むことができる</p> <pre><code><script data-main="scripts/main" src="scripts/require.js"></script> </code></pre> <p>とそのドキュメントに:例requireJSについては
- 14. ビューでDjangoのquerysetから特定の属性を取得する方法は?</p> <pre><code>file_s = Share.objects.filter(shared_user_id=log_id) </code></pre> <p>は今、私はDjangoのビューでfile_sからfiles_id属性を取得したい:
- 15. C#XML要素私は特に例えば<code><EmpTypeHeader></code>で<code>EmpList</code>タグの数と<code><EID>.</code></p> <p>を取得する必要がありますXMLノードに
- 16. のJavaFX:カスタムのチェックボックスtreetablecell私は<code>CheckBox</code>を使用して、私のカスタム<code>TreeTable</code><code>CellFactory</code>を作成しようとしている変更
- 17. HTMLコンテンツ編集可能なDIV:私は、ユーザーがそこに任意のコンテンツを入力することができます<strong>のcontentEditable</strong></p> <p><code><div class="editable" contenteditable="true"></div></code></p> <p>であるdiv要素を持っているテキストイベント
- 18. どのよう<strong><em>COL</em></strong>のような動的に設定するか、有効な属性に何らかの方法でそれを変換する方法はあり動的属性
- 19. タイプの「可能性」のSFINAEテストを書く方法はありますか?このタイプ<code>T</code>はジレンマがある。この</p> <pre><code>for (auto && v : vs) {} // vs is T const & </code></pre> <p>のように巡回できない場合
- 20. 空の構造体をC#で新しくすることは何ですか?</p> <pre><code>struct EmptyResult { } </code></pre> <p>インスタンスタイプ<code>EmptyResult</code>の変数を作成した結果がどのようなものです:あなたは、構造体を宣言した場合は
- 21. JavaFX ListViewをアイテムの高さにするにはどうすればよいですか?</p> <pre><code>new ListView<>(FXCollections.observableArrayList("1", "2", "3")) </code></pre> <p>が、私はそれが3行でリストビューを作成することを期待する:私は、ListViewコントロールを作成する場合
- 22. Heredoc <<<または<<?
- 23. モデルをプリロードせずにリンクを作成するにはどうすればよいですか?</p> <pre><code><a {{action showComment comment href=true}}>Show</a> </code></pre> <p><code>/comments/45</code>のように見えるのリンクを生成します。
- 24. のpostgresql:私は、ディレクトリを作成し、そこに<code>somedb</code>のpg_dumpのを置くシェルスクリプトを使用しています。この</p> <p><code>localhost:5432:somedb:someuser:somepass</code></p> <p>のように見える私のホームディレクトリに<code>.pgpass</code>ファイルを作成した
- 25. はこれが動作しない</p> <pre><code>attr_accessor :attr_list def attr_list [:x1, :y1, :x2, :y2] end </code></pre> <p>、私はこのようなメソッド呼び出しで構築あれば容易に行うことができる多数の属性を作成したいメソッド呼び出し
- 26. ScalaはScalaのコレクションに<code>toSeq</code>方法は<code>scala.collection.Seq</code>を返し、私も<code>Traversable</code>または<code>Iterable</code>を返すが、<code>scala.collection.immutable.Seq</code>にこれを変換する必要がある可能性が表示されますcollection.immutable.Seq
- 27. キー値のペアのリストからオブジェクトを作成しようとすると、どのようなデザインが良いでしょうか?私は、テキストファイルを解析する方法を持っていると<strong>リストを返す</em><strong>リスト</strong><em><strong></em>のキーと値のペアの</strong><em>を</strong>、およびkvpsからオブジェクトを作成する場合
- 28. カスタムの実装を定義する方法<set></set>
- 29. 複数の制約と一致を持つレコードをカウントするクエリを作成するにはどうすればよいですか?</p> <ol> <li>ファイル</li> <li>タグ</li> <li>join_File_Tags</li> <li>プロファイル</li> <li>join_Profile_Tags</li> </ol> <p>プロファイルとユーザーが見ることができるファイルのテーブルが決定join_Profile_Tags:
- 30. Javascript:外部スクリプトの生コードを読むことは可能ですか?</p> <pre><code><script src="foo.com/myscript.js"></script> </code></pre> <p>直接文字列か何かのように<code>myscript.js</code>の内容を読み取ることが可能であろう:
それは、例えば、@コンテキスト= 'styleString' 明示的を使用しての必要性を排除することができるカスタム属性を作成するには、確かに、素晴らしいことです。 –