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


7

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


Tôi tin rằng vẫn còn một lỗi với các trường mẫu lặp lại. Đóng sau đó mở lại phương thức gây ra các mục trùng lặp, tuy nhiên bạn có thể đã tìm thấy một lỗi khác. Mights có giá trị xem xét
Lodder

@Lodder ok tuyệt. Tôi chỉ muốn họ thêm chi tiết cho các tài liệu. Tôi dường như không thể tìm thấy bất cứ điều gì với nhiều chi tiết hơn. Nó gần giống như bạn phải viết thêm mã trong MVC để nó hoạt động.
Jonnypixel

@Lodder bạn có thể đề xuất một cách khác để thêm các trường lặp lại trong tệp edit.php thành phần của tôi không?
Jonnypixel

Không có cách dễ dàng khác để làm điều đó. Vui lòng cung cấp mã hiện tại bạn đang sử dụng cho các trường mẫu lặp lại
Tạm dừng

2
@Jonnypixel Bạn có thể vui lòng gửi giải pháp dưới dạng câu trả lời độc lập không?
Valentin Despa

Câu trả lời:


6

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 liệu nó có làm đúng hay không. 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 mình 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 có thể 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 vào 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.

-


Công việc tuyệt vời Nếu bạn có thể, bạn nên thực hiện một PR với những thay đổi của bạn đối với repo dàn dựng. Các chức năng bạn thực hiện có vẻ như là một bổ sung chào mừng.
Mathew Lenning

@MathewLenning cảm ơn. Có nhưng tôi phải bắt đầu từ đâu? Tôi không chắc chắn thậm chí đi đâu để gửi những thứ như vậy. Các diễn đàn và kho lưu trữ j Joomla có vẻ hơi nhiều nơi. Nếu bạn có thể liên kết tôi hoặc hướng dẫn tôi đến đúng nơi, tôi sẽ rất vui khi tạo một tài khoản và bắt đầu đóng góp, tôi nghĩ :)
Jonnypixel

Phải mất một chút công sức để bắt đầu đóng góp, nhưng một khi bạn đã hiểu rõ về nó, nó sẽ rất thú vị (kiểu lập trình viên vui nhộn = ^ P) Đây là một hướng dẫn sẽ giúp bạn bắt đầu. docs.j Joomla.org/Git_for_Coders
Mathew Lenning

công việc tốt! Làm thế nào để bạn ghi đè các bản gốc có thể lặp lại? như bạn biết đó không phải là một cách thực hành tốt để hack bản gốc.
Reza Baradaran
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.