Làm cách nào tôi có thể sử dụng Mô hình MVC để tải, thay đổi, sau đó lưu bản ghi?


7

Sau khi googling, vv Tôi đã đến đoạn mã dưới đây để Thêm Danh mục mới vào Joomla để tất cả các sự kiện plugin, v.v.

$basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
require_once $basePath.'/models/category.php';
$catmodel = new CategoriesModelCategory(array('table_path' => $basePath.'/tables'));

$myArrayOfData = array('id'=>'0','title'='my title'...);
$catmodel->save($myArrayOfData);

Như bây giờ, tôi sử dụng cùng một mã để cập nhật bản ghi, nhưng thay vì một bản sao mới của mảng dữ liệu để thêm, tôi sử dụng SQL để lấy bản ghi hiện tại dưới dạng một mảng, sau đó sửa đổi và lưu theo cùng một cách.

Điều này "hoạt động", nhưng dường như không phải là cách đúng đắn để làm điều đó, vì vậy tôi tò mò làm thế nào để tải Mô hình bằng cách sử dụng id của Danh mục, sau đó sử dụng các phương thức của nó để thay đổi / lưu. Tôi đã thử làm theo mã thực thi khi Thành phần Danh mục thực hiện nó, nhưng có quá nhiều thứ đang diễn ra để tôi hiểu được cách nó được thực hiện.

Câu trả lời:


3

Giả sử bạn có ID danh mục được lưu trữ trong $ id. Bạn có thể khởi tạo mô hình danh mục như bạn đã làm trước đây:

$basePath = JPATH_ADMINISTRATOR . '/components/com_categories';
require_once $basePath . '/models/category.php';
$catModel = new CategoriesModelCategory(array('table_path' => $basePath . '/tables'));
$id = 11;

Bây giờ bạn có hai phương pháp:

Phương pháp 1 - Không có đối tượng JTable

$item = $catModel->getItem($id);
$catModel->save('id' => $id, 'parent_id' => $item->parent_id, 'title' => 'My New Title'); // parent_id should be defined otherwise a warning will be displayed

Phương pháp 2 - Với đối tượng JTable

$catTable = $catModel->getTable();
$catTable->load($id);
$catTable->title = 'My New Title';

$catTable->check();
$catTable->store();

Ghi chú

Chỉ với phương pháp đầu tiên, onContentBeforeSaveonContentAfterSavecác sự kiện sẽ được kích hoạt.


Aha ... đang tải bảng! ... luôn luôn quá rõ ràng sau khi thực tế, lol ...
GDP

Tôi đang nhận được lỗi không phải đối tượng với mã này. Tôi đã cập nhật câu hỏi để kết hợp câu trả lời của bạn hiển thị ở đâu.
GDP

@GDP, tôi đã sửa đổi câu trả lời của mình. Bạn có thể kiểm tra nó và cho chúng tôi biết kết quả?
Farahmand

Tôi gặp lỗi CategoriesTableCategory::bind(*NULL*), nhưng câu trả lời đã sửa đổi của bạn đang sử dụng jTable, không phải Model như tôi đang tìm .... liệu điều này có kích hoạt các sự kiện plugin như onContentAfterSave không?
GDP

@GDP, tôi đã chỉnh sửa câu trả lời của mình và nó hoạt động ngay bây giờ. Các savephương pháp được sử dụng để hình thức ràng buộc dữ liệu; Tôi đã thay thế nó bằng checkstorephương pháp. Bây giờ bảng được gọi từ mô hình, vì vậy bạn cũng có mô hình thể loại trong tay của bạn.
Farahmand
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.