コンテンツプラグインとonContentPrepareFormトリガーを使用して、記事の編集ページにカスタムの追加フィールドを挿入します。
問題は、私のカスタムフィールドタブが記事の[オプション]タブ(layouts// joomla/edit/params)とバインドすることです。
つまり、フォーム<fields>
onContentPrepareFormで注入され、「オプション」タブ(params/attribフォームレイアウト)と連動して「生成」されます。
Com_contentには、記事オプションタブ(およびその他のタブ)を表示/非表示にする設定があります。しかし、私のカスタムタブはこの表示/非表示もリッスンします。
私が欲しいのは、記事のオプションを「オプション」でコンポーネントのデフォルトに設定し、ユーザーに対して非表示にし、カスタムフィールドタブのみを表示することです。しかし、私は今のところ成功していません。
私が何を探すべきかについて誰か誰か知っていますか?
プラグインでそのすべての機能を取得することは難しいでしょう。 Joomlaがフォーム/タブに使用するxmlフォームシステムは、それ自体を構築する方法がかなり複雑です。また、私の知る限り、XMLのどのフォームをロードするかを変更できる主要な「イベント」はありません(そのため、いくつかの名前を変更するか、別のフィールドを追加するJoomlaの更新によって、イベントが台無しになります)。
しかし、これが私の考えです。
//regex
$regex = '/\<input[^>]*\stype=\"hidden\"[^>]*\sname=\"jform\[params\]\[plugin\]\"[^>]*\sid=\"jform_params_plugin\"[^>]*\svalue=\"1\"[^>]*\s\/\>/i';
//check for match
if(preg_match($regex,$buffer)){
//bind an xml form
$xml = simplexml_load_file(PATH_TO_XML_FILE.'.xml');
if($form = JForm::getInstance((string)$xml->name,$xml->asXML())){
$arr = array();
//here you need to build an array to auto fill the data from the form,
//if you already had this working to an extent I am sure it will be fine.
$form->bind($arr);
}
$content = '';
//here you need to basically get the form fields into content as text to be added to
//the current output, there are many ways to do this.
//replace the current output of Joomla to add the extra fields
$buffer = preg_replace($regex,$content,$buffer);
JFactory::getDocument()->setBuffer($buffer, 'component');
}
説明すると、最初の正規表現は、ページの現在の出力でフォームフィールドを見つけることです(これは[オプション]タブのフィールドである場合があります)。一致が見つかった場合は、フィールドのxmlファイルをロードし、それらを自分のものに置き換えます。ある程度の距離があるとおっしゃっていたので、これはそれに基づいているだけかもしれません。