Làm thế nào là nội dung Khóa khóa xử lý trong các thành phần tùy chỉnh?


7

Com_content của lõi mặc định có một hệ thống tích hợp, khi một bài viết cụ thể đang được chỉnh sửa bởi người dùng, nó sẽ bị "khóa", do đó không người dùng nào khác có thể chỉnh sửa nó cùng một lúc. Nếu người dùng đóng cửa sổ hoặc để phiên hết hạn mà không đóng đúng bài viết đó (ví dụ: nhấp vào "lưu" hoặc "hủy"), nội dung đó sẽ được "kiểm tra" và biểu tượng khóa được hiển thị trong phần phụ trợ bên cạnh, mà một siêu nhân sẽ phải mở khóa.

Câu hỏi của tôi là : làm thế nào mà nó được thêm vào một thành phần tùy chỉnh có các bảng nội dung riêng? Theo như tôi có thể tìm thấy, theo tôi, miễn là bạn sử dụng JTable để thao tác nội dung đó, thì đó là một tính năng tích hợp sẵn cho các phương thức trong lớp đó ... đúng không? Hay tôi cần sử dụng cái gì khác như JTableContent? Tôi có cần thêm một cái gì đó vào các bảng được sử dụng để lưu trữ nội dung (bất kỳ cột cụ thể nào không) không?

Câu trả lời:


3

Bạn đã đúng, nhưng bạn không cần phải đi xuống JTable, nếu bạn đang theo cách của Joomla và sử dụng JControllerFormlàm cơ sở cho trình điều khiển xem của bạn, vd

class MycomponentControllerMycontent extends JControllerForm {}

và sử dụng JModelAdminlàm cơ sở cho bạn các thành phần Model, vd

class MycomponentModelMycontent extends JModelAdmin {}

Mở rộng JControllerForm, cung cấp cho bạn một edit()phương thức tích hợp để thiết lập mô hình và bảng cho bạn và kiểm tra quyền truy cập vào bản ghi được đề cập cũng như liệu bảng có hỗ trợ kiểm tra hay không (bằng cách kiểm tra xem có checked_outtồn tại cột không). Nếu có, nó sẽ cố gắng checkout()ghi lại thông qua mô hình.

Bằng cách mở rộng JModelAdmin bạn thừa hưởng nó getItem(), checkIn()checkOut()phương pháp. Như đã đề cập, mô hình gọi checkout()( mà nó kế thừa từJModelForm ) và đảm bảo rằng ngoài checked_outcột, bảng của bạn cũng có một lệnh được gọi checked_out_time.

Tại thời điểm này, một trong hai điều sẽ xảy ra nếu một trong hai cột đó không tồn tại, JModelFormgiả mạo và trả về true(biểu thị công việc đã hoàn thành). Mặt khác, nó sẽ lấy người dùng hiện tại và sau đó tiến hành thử kiểm tra trước khi kiểm tra xem nó đã được kiểm tra cho người dùng khác chưa. Tại thời điểm này, nếu cuối cùng gọi việc JTablethực hiện checkOut()(nếu bạn không ghi đè nó bằng định nghĩa bảng của riêng bạn mà trong J3 thường không bắt buộc).

JTablethực hiện chính xác các kiểm tra cột giống nhau và nếu tất cả đều tốt (nghĩa là có ID hợp lệ) sẽ cập nhật các cột checked_outchecked_out_timecho bản ghi đang được chỉnh sửa.

Là một lưu ý phụ, khi bạn edit()một mục, getItem()được gọi, nó tải các bản ghi thông qua một JTable(tức là nó một getTable()tiếp theo load($pk). (Tại thời điểm này JTablecũng gây nên bạn onBeforeLoadonAfterLoad sự kiện dành cho các plugin đó là tốt đẹp)

Bản ghi được trả về phiên bản của bạn JModelAdmin, nó chuyển đổi nó thành một stdClassđối tượng cơ sở (nó đã từng là JObjectquá khứ). Nếu bản ghi (đối tượng bây giờ) chứa một paramscột / thuộc tính, nó chuyển đổi nó thành một JRegistryđối tượng để dễ dàng truy cập.

Vì vậy, bạn nhận được rất nhiều thứ tiện dụng miễn phí bằng cách sử dụng Joomla. :)


Ôi chao! Cảm ơn rất nhiều cppl! Đó là một câu trả lời rất chi tiết và rõ ràng, chỉ là điểm khởi đầu tôi cần đi trước khi biết tôi đang đứng trên mặt đất vững chắc. Rất nhiều đánh giá cao!
Isidro Baquero

2

Bạn đã đúng trong các giả định của bạn. Bạn cần bảng được thiết lập với logic liên quan để thực hiện những gì bạn đang cố gắng thực hiện.

Khi tôi đang học Joomla 3+, tôi đã sử dụng Trình tạo thành phần để tạo ra một thành phần cực kỳ đơn giản chỉ với một bảng và chỉ có tính năng Joomla mà tôi quan tâm khi học. Mã được tạo ra rất tốt và dễ theo dõi mà không cần tất cả các phức tạp của các thành phần thông thường được cài đặt.


Cảm ơn vì sớm phản hồi. Tôi đã tìm thấy cái này cho Joomla 1.5, không chắc nó có thay đổi quá nhiều cho 3.3 ... docs.j Joomla.org/J1.5:Using_the_JTable_group#Checkout.2FCheckin Và btw, tôi cũng đang sử dụng CC :)
Isidro Baquero

Điều đó có vẻ giống với điều tương tự, vì vậy tôi rất muốn chạy theo nó. Đó là một trong những điều "chỉ hoạt động", vì vậy tôi không quen thuộc với những điều phức tạp.
GDP
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.