web-dev-qa-db-ja.com

繰り返し可能なxmlフォームフィールド機能を作成する方法

カスタムコンポーネントを作成していますが、すべて問題ありません。新しい3.2繰り返し可能なxmlフォームフィールド機能を試してみようと思いました。私はそれを動かしていますが、データを保存する方法がよくわかりません。

これにより、モーダルを起動し、そのモーダル内で指定した最大999個のカスタムフィールドを作成できます。しかし、モーダルの緑の保存ボタンはモーダルを閉じ、実際に保存を適用しませんか?

何か不足していますか?

-

<field name="list_templates"
    type="Repeatable"
    icon="list"
    description="Main description"
    label="Main Label"
    default="">
    <fields name="params">
    <fieldset hidden="true" name="list_templates_modal" repeat="true">
            <field name="template"
                    label="Template Label"
                    size="30"
                    type="text" />
            <field name="location"
                    label="Location Label"
                    description="desc"
                    size="30"
                    type="filelist"
                    directory="media/editors/tinymce/templates"
                    exclude="index.html"
                    hide_default="true"
                    hide_none="true" />
            <field name="description"
                    label="Description Label"
                    size="30"
                    type="textarea" />
    </fieldset>
    </fields>

事前に乾杯

ジョニー

7
Jonnypixel

ここで、私自身の質問に対する回答と、いくつかの観察と修正を示します。

まず、カスタムxmlコンポーネントファイル内のサンプルコードブ​​ロックを使用するときに、カスタムデータベーステーブル内にフィールド名を追加するのを怠っていました。

したがって、例:xmlの例のlist_templates

次のように私のコンポーネントテーブル内のMYSQLデータベースに移動する必要があります:

列名:list_templates列タイプ:TEXT

基本的には、JSONデータとTEXT型の列に最もよく収まるためです。

次...

Modalを閉じてから再び開くと、追加したコンテンツが複製されるというバグがありました。

これを修正するために、media/system/js内にあるrepeatable.jsファイルを見つけ、そのバックアップコピーを作成しました。次に、コンパイルされていないバージョンを繰り返し可能なjsに貼り付け、次の行を変更することでそれを見つけました。

30 // Set original content for cancel            
31 origContent = getTrs().clone();

これに

30 // Set original content for cancel            
31 origContent = getTrs();

それが実際に複製のバグを修正すること。私はいくつかのテストを行って、それが正しいことを行っているかどうかを確認しました。データの損失は発生しておらず、データはもう複製されていません。モーダルボックスは何度でも開いたり閉じたりすることができ、保存した選択内容だけが表示されます。

私はビューファイルを閉じてデータを再度開くことでこれを試しましたが、他のいくつかの方法はすべて機能しています。

そして最後に!

ビュー内のJSONのコンテンツを選択ボタンの下のテーブルとしてエコーしたいので、モーダル内の保存ボタンをクリックした後に保存して適用できるように、repetable/jsにもいくつか追加しました。

これは、繰り返し可能なフィールドでモーダルで[保存]をクリックすると、ページが保存および適用され、テーブルの列フィールドから直接データを収集してページに表示できることを意味します。

これを実現するには、次の2つを追加します。

URLからview = componentnameviewを取得する関数

 // get the url values function

 function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

そして、そのようにビューの変数を設定します

var componentName = getUrlVars()["view"]; 

そして、341行目以降

これを追加しました

Joomla.submitbutton(''+componentName+'.apply'); 

これで、モーダルの[保存]ボタンが機能し、joomlaがアイテムを保存し、どのコンポーネントがその保存先を表示してページにとどまるかを確認します。これにより、テーブルデータを収集できますが、ユーザーが保存しようとしているのにアイテムのデフォルトのボタングループを誤って閉じてしまった場合に備えて、繰り返し可能なフィールドモーダル内のコンテンツも保存されます。

私は私の答え/投稿で誰かを助けることができると思います。これをすべて入れるのが適切でない場合は、私に知らせてください。他の場所に移動します。

-

6
Jonnypixel