tra-loi-cau-hoi-phat-trien-web.com

Cách tạo trình tải lên hình ảnh đơn giản cho thành phần tùy chỉnh

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?

4
stckvrw

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;
4
Rene Korss

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.

1
SD.