it-swarm-vi.com

Làm thế nào để tạo một tính năng trường mẫu xml lặp lại?

Tôi đang xây dựng một thành phần tùy chỉnh và tất cả đều tốt. Tôi nghĩ rằng tôi sẽ sử dụng tính năng trường biểu mẫu xml lặp lại 3.2 mới. Mặc dù tôi có nó hoạt động nhưng tôi không biết cách lưu dữ liệu.

Nó cho phép tôi khởi chạy một phương thức và trong chế độ đó tạo ra tối đa 999 trường tùy chỉnh mà tôi chỉ định. Nhưng nút lưu màu xanh lá cây trong phương thức sẽ đóng chế độ và không thực sự áp dụng lưu?

Tui bỏ lỡ điều gì vậy?

-

<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>

Chúc mừng trước

Jonny

7
Jonnypixel

Ok đây là câu trả lời cho câu hỏi của riêng tôi và một vài quan sát và sửa lỗi.

Đầu tiên, khi sử dụng khối mã mẫu trong tệp thành phần xml tùy chỉnh của tôi, tôi đã bỏ qua việc thêm tên trường trong bảng cơ sở dữ liệu tùy chỉnh của mình.

Vì vậy, ví dụ: list_tem mẫu từ ví dụ xml

Cần phải đi vào cơ sở dữ liệu MYSQL trong bảng thành phần của tôi như vậy:

tên cột: list_tem mẫu loại cột: văn bản

Về cơ bản vì dữ liệu JSON của nó và nó phù hợp nhất với cột kiểu văn bản.

Kế tiếp...

Có một lỗi khi đóng Modal và sau đó mở lại, nó sẽ nhân đôi nội dung bạn thêm vào.

Để khắc phục điều này, tôi đã tìm thấy tệp repeatable.js nằm trong media/system/js và tạo một bản sao lưu của nó. Sau đó tôi đã dán phiên bản không nén vào js lặp lại và thấy rằng bằng cách thay đổi dòng này:

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

đến đây

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

Rằng nó thực sự sửa lỗi trùng lặp. Tôi đã thực hiện một số thử nghiệm để xem nếu nó làm đúng và nó thực sự là. Không có mất dữ liệu đang xảy ra và không có dữ liệu đang được sao chép nữa. Bạn có thể mở và đóng hộp phương thức bao nhiêu lần tùy thích và nó sẽ chỉ hiển thị cho bạn các lựa chọn bạn đã lưu.

Tôi đã thử điều này bằng cách đóng tệp xem và mở lại dữ liệu và một số phương pháp khác tất cả đều đang hoạt động.

Và cuối cùng!

Vì tôi muốn lặp lại nội dung của JSON trong chế độ xem của tôi dưới dạng bảng bên dưới nút chọn, tôi cũng đã thêm một vài điều để lặp lại/js để cho phép tôi có thể lưu và áp dụng sau khi nhấp vào nút lưu trong phương thức.

Điều này có nghĩa là khi tôi nhấp vào lưu trên các trường lặp lại theo chế độ, trang sẽ lưu và áp dụng cho phép tôi thu thập dữ liệu trực tiếp từ trường cột của bảng để hiển thị trên trang.

Tôi đã đạt được điều này bằng cách thêm một vài điều sau đây.

Một chức năng để có được view = thành phần tên xem từ url

 // 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;
  }

và sau đó thiết lập một varibale cho chế độ xem như vậy

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

và sau dòng 341

Tôi đã thêm cái này

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

Bây giờ nút Save phương thức thực hiện công việc của nó và sau đó j Joomla lưu mục đó và biết thành phần nào xem nó lưu nó vào và ở lại trên trang. Điều này cho phép tôi thu thập dữ liệu bảng nhưng cũng lưu nội dung trong trường hợp có thể lặp lại trong trường hợp người dùng nghĩ rằng họ đang lưu nó và vô tình bấm vào nhóm nút mặc định của mục.

Tôi hy vọng tôi có thể giúp ai đó với câu trả lời/bài viết của tôi. Nếu nó không thích hợp để đặt tất cả những thứ này chỉ cho tôi biết và tôi sẽ chuyển nó đi nơi khác.

-

6
Jonnypixel