これが私が思いついた解決策です...ちょっとハックですが、うまくいきました。私が使用している CMS は Coldfusion ベースですが、メソッドは転送可能である必要があります...
別の複雑さ: 私たちの場合、編集可能なボタンをテンプレートの編集可能な領域とは別の場所に表示する必要がありました。基本的に、メイン コンテンツ エリアから簡単に編集できるようにするために、サイドバーに編集不可のボタンを配置しました。したがって、ユーザーがボタンを定義する場合、サイドバー ボタンをユーザー定義のボタンに置き換えます。そのため、mootools を使用して作成されたボタンを取得し、ページのサイドバーのボタンを置き換えてから、元のボタンを破棄するという追加の手順があります。
目標は、ユーザーが CMS のテキスト領域のどこかにショートコードを入力することでした。次のようなものです。
[button id="override-button" title="XXX" href="YYY"][/button]
バックエンドはこれを DOM 要素に変換し、フロントエンドでは mootools を使用して必要な場所にボタンを配置し、元のマークアップを破棄します。
まず、DB出力でコードを検索しました...
<cfset find1='\[button'> <!-- open-->
<cfset find2='\]\[/button]'> <!-- close -->
次に、coldfusion で正規表現の置換を使用して、ボタンの最初のインスタンスをマークアップに置き換えました... (rs.body は、データベースから返された本文データを参照します)...
<cfset replace1 = "<button">
<cfset replace2 = "></button>">
<cfset rs.body=#REReplace(rs.body,find1,replace1,"ONE")#>
<cfset rs.body=#REReplace(rs.body,find2,replace2,"ONE")#>
したがって、結果のマークアップは次のようになります。
<button id="override-button" title="XXX" href="YYY"></button>
次に、mootools を使用してその DOM 要素を操作しました。前述のように、サイドバーには既に「open-form-button」という ID のボタンがあったため、これはそのボタンを取得し、テキストとリンクを上で定義した属性に置き換えてから、上で定義した要素を破棄します。
var overrideBtn = $('override-button');
var overrideBtn_title,overrideBtn_href = null;
if (overrideBtn) {
overrideBtn_title = overrideBtn.getProperty('title');
overrideBtn_href = overrideBtn.getProperty('href');
if (overrideBtn_title && overrideBtn_href)
{
$('open-form-button').set('text', overrideBtn_title);
$('open-form-button').setProperty('href',overrideBtn_href);
overrideBtn.dispose();
}
}
以上です。これが他の人にとってどれほど役立つかはわかりませんが、ジュリアンが私の解決策を投稿することを提案したので、途中で誰かに役立つことを願っています! 幸運を!