web-dev-qa-db-ja.com

オプションタブからcom_contentのカスタムフィールドを分離する

コンテンツプラグインとonContentPrepareFormトリガーを使用して、記事の編集ページにカスタムの追加フィールドを挿入します。

問題は、私のカスタムフィールドタブ記事の[オプション]タブ(layouts// joomla/edit/params)とバインドすることです。

つまり、フォーム<fields> onContentPrepareFormで注入され、「オプション」タブ(params/attribフォームレイアウト)と連動して「生成」されます。

Com_contentには、記事オプションタブ(およびその他のタブ)を表示/非表示にする設定があります。しかし、私のカスタムタブはこの表示/非表示もリッスンします。

私が欲しいのは、記事のオプションを「オプション」でコンポーネントのデフォルトに設定し、ユーザーに対して非表示にし、カスタムフィールドタブのみを表示することです。しかし、私は今のところ成功していません。

私が何を探すべきかについて誰か誰か知っていますか?

1
FFrewin

プラグインでそのすべての機能を取得することは難しいでしょう。 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ファイルをロードし、それらを自分のものに置き換えます。ある程度の距離があるとおっしゃっていたので、これはそれに基づいているだけかもしれません。

2
Jordan Ramstad