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


7

私はカスタムコンポーネントを作成していますが、すべて問題ありません。新しい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>

事前に乾杯

ジョニー


繰り返しフォームのフィールドにはまだバグがあると思います。モーダルを閉じてから再度開くと、エントリが重複しますが、別のバグを発見した可能性があります。調べてみる価値があるかもしれません
Lodder 2014年

@Lodderわかりました。私は彼らがドキュメントにもっと詳細を追加したいと思っています。もっと詳細なものを見つけることができないようです。それが動作するためには、MVC内で追加のコードを記述する必要があるようです。
Jonnypixel 2014年

@Lodder私のコンポーネントのedit.phpファイル内に繰り返し可能なフィールドを追加する別の方法を提案できますか?
Jonnypixel 2014年

それを行う簡単な方法は他にありません。繰り返しフォームフィールドに使用している現在のコードを入力してください
Lodder

2
@Jonnypixelソリューションをスタンドアロンの回答として投稿できますか?
Valentin Despa 2014年

回答:


6

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

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

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

-


すごい仕事!できれば、ステージングリポジトリへの変更を反映したPRを作成する必要があります。あなたが実装した機能は歓迎すべき追加のようです。
Mathew Lenning 2014年

@MathewLenningありがとう。はい、どこから始めればいいですか?私はそのようなものを提出するためにどこに行くかさえわからない。joomlaのフォーラムとリポジトリは、あちこちにあるようです。あなたは私をリンクしたりtehの適切な場所に私を導くことができる場合、私はアカウントを作成し、貢献し始めるために幸せになる、私は:)を考える
Jonnypixel

貢献を始めるには少し手間がかかりますが、コツをつかむと、とても楽しいです(マニアックなプログラマータイプfun = ^ P)。これは、あなたが始めるのに役立つはずのチュートリアルです。docs.joomla.org/Git_for_Coders
Mathew

良くやった!元のrepeatable.jsをどのようにオーバーライドしますか?ご存知のように、元のものをハッキングすることは良い習慣ではありません。
Reza Baradaran、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.