Tôi đang phát triển một thành phần tùy chỉnh để tạo, chỉnh sửa và lưu dữ liệu của các bản ghi duy nhất bao gồm cả hình ảnh. Tôi biết rằng trong quản trị viên/mô hình/biểu mẫu/record.xml phải có trường name="image" type="file" accept="image/*"
Nhưng tôi cần viết như thế nào và ở đâu mã php đơn giản để tải hình ảnh lên thư mục cụ thể, trong tập tin nào và như thế nào? Nơi để viết mã từ ví dụ bằng liên kết https://docs.j Joomla.org/How_to_use_the_filesystem_package ?
EDITED: Bây giờ tôi đã thêm vào admin/com_mycom/controls/record.php mật mã:
public function save($data = array(), $key = 'id')
{
$file = JRequest::getVar('image', null, 'files', 'array');
$filename = JFile::makeSafe($file['name']);
$src = $file['tmp_name'];
$dest = "media/com_mycom/img/".$filename;
if (JFile::upload($src, $dest)) {
//Redirect to a page of your choice
} else {
//Redirect and throw an error message
}
parent::save();
}
$ data = mảng (), $ key = 'id' Tôi đã nhận được từ hàm allowEdit ()
NHƯNG ĐƯỢC GIẢI QUYẾT ... Vì vậy, vấn đề nằm ở tên của đầu vào. JRequest :: getVar chứa 'hình ảnh' nhưng kiểu nhập = "tệp" có tên = " jform [image] ". Tôi đã tìm thấy mã:
$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$file = $files['image'];
thay vì
$file = JRequest::getVar('image', null, 'files', 'array');
và bây giờ tệp đang được tải lên nhưng tiếc là tên của nó không được cập nhật trong DB
Ok, tôi đã thêm vào dưới if (JFile::upload($src, $dest)) {
mã:
$thisID = JRequest::getVar('id');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$fields = array($db->quoteName('image') . " = " . $db->quote($filename));
$conditions = array($db->quoteName('id') . " = " . $thisID);
$query->update($db->quoteName('#__mycom'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->execute($query);
nhưng có cách nào đơn giản nhất để cập nhật tên tệp trong DB không?
Bạn nên thêm nó vào bộ điều khiển của mình, có lẽ là controllers/record.php
. Ghi đè hàm save
.
public function save($key = NULL, $urlVar = NULL)
{
// Upload your image
// Save item
parent::save();
}
CẬP NHẬT
Lỗi "Không thể di chuyển tệp"
Điều này đến từ sai $dest
giá trị. Đích đến phải là con đường đầy đủ.
Sai :
$dest = "media/com_mycom/img/".$filename;
Đúng :
$dest = JPATH_SITE."/media/com_mycom/img/".$filename;
Tôi muốn đề nghị bạn giới thiệu một phần quản trị viên của com_media
thành phần. Nó có tất cả các chức năng liên quan đến tải lên tập tin được phát triển.
Nó cũng bao gồm xử lý lỗi và kiểm tra khác liên quan đến hệ thống tập tin.