در اینجا به طور مختصر مراحل ایجاد ماژول جوملا برای آپلود تصویر با استفاده از PHP و AJAX را شرح میدهم. برای سادگی، ما ابتدا یک ماژول ساده ایجاد میکنیم که فرم آپلود تصویر را در آن قرار دهیم.
مراحل ایجاد یک ماژول جوملا برای آپلود تصویر
-
ساخت ساختار فایلهای ماژول برای ایجاد یک ماژول، باید یک دایرکتوری در پوشه
modules
ایجاد کنید و سپس فایلهای لازم را در آن قرار دهید.- به مسیر زیر بروید:
/modules/mod_imageupload
- به مسیر زیر بروید:
-
ساخت فایلهای مورد نیاز:
در پوشه
mod_imageupload
، چند فایل اصلی خواهیم داشت:mod_imageupload.php
(فایل اصلی ماژول)helper.php
(برای کدهای کمکی و پردازش)tmpl/default.php
(نمایش فرم آپلود و پروگرس بار)mod_imageupload.xml
(فایل نصب و تنظیمات ماژول)
1. فایل mod_imageupload.php
:
این فایل عملکرد اصلی ماژول را بر عهده دارد. در آن فرم آپلود به همراه پردازشها را قرار میدهیم.
<?php
// دسترسی مستقیم به فایل ممنوع است
defined('_JEXEC') or die;
// شامل فایل helper
require_once dirname(__FILE__) . '/helper.php';
// دریافت خروجی از helper
$uploadForm = modImageUploadHelper::getUploadForm();
require JModuleHelper::getLayoutPath('mod_imageupload');
2. فایل helper.php
:
در این فایل، میتوانید منطق پردازش فایل را بنویسید، مثلا بررسی فایل و آپلود آن. برای اینکه کار با این ماژول راحتتر باشد، همه کدهای اصلی آپلود را در اینجا قرار میدهیم.
<?php
// دسترسی مستقیم به فایل ممنوع است
defined('_JEXEC') or die;
class modImageUploadHelper {
public static function getUploadForm() {
// بررسی ارسال فایل و آپلود
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
$uploadDir = JPATH_ROOT . '/images/uploads/';
$maxFileSize = 5 * 1024 * 1024; // حداکثر حجم فایل 5MB
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
$file = $_FILES['image'];
// بررسی نوع فایل
if (!in_array($file['type'], $allowedTypes)) {
return 'فرمت فایل مجاز نیست.';
}
// بررسی اندازه فایل
if ($file['size'] > $maxFileSize) {
return 'حجم فایل بیش از حد مجاز است.';
}
// ساخت نام تصادفی برای فایل
$fileName = uniqid('img_') . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
$uploadPath = $uploadDir . $fileName;
// انتقال فایل به پوشه مقصد
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
return 'فایل با موفقیت آپلود شد!';
} else {
return 'خطا در آپلود فایل!';
}
}
// اگر فایل آپلود نشد، فرم را باز میگرداند
return null;
}
}
3. فایل tmpl/default.php
:
در اینجا فرم HTML و کد AJAX را قرار میدهیم. این کد مشابه همان کدی است که قبلاً برای آپلود تصویر طراحی کرده بودیم، اما در قالب ماژول جوملا.
<?php
// دسترسی مستقیم به فایل ممنوع است
defined('_JEXEC') or die;
?>
<div class="container mt-5">
<h2 class="text-center mb-4">فرم آپلود تصویر</h2>
<!-- نمایش پیغام آپلود -->
<?php if ($uploadForm): ?>
<div class="alert alert-info"><?php echo $uploadForm; ?></div>
<?php endif; ?>
<!-- فرم آپلود -->
<form id="uploadForm" enctype="multipart/form-data" method="POST">
<div class="mb-3">
<label for="name" class="form-label">نام و نام خانوادگی:</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-3">
<label for="image" class="form-label">انتخاب تصویر:</label>
<input type="file" class="form-control" id="image" name="image" accept="image/*" required>
</div>
<button type="submit" class="btn btn-primary">ارسال</button>
</form>
<!-- نمایش پروگرس بار -->
<div id="progressWrapper" style="display: none;">
<p>در حال آپلود: <span id="progressText">0%</span></p>
<div id="progressBar" class="progress">
<div id="progress" class="progress-bar" role="progressbar" style="width: 0;"></div>
</div>
</div>
</div>
<!-- اسکریپتهای جاوااسکریپت -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$("#uploadForm").submit(function(event) {
event.preventDefault();
// نمایش پروگرس بار
$("#progressWrapper").show();
var formData = new FormData(this);
$.ajax({
url: "<?php echo JURI::root() . 'modules/mod_imageupload/helper.php'; ?>", // مسیر پردازش فایل
type: "POST",
data: formData,
contentType: false,
processData: false,
xhr: function() {
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", function(e) {
if (e.lengthComputable) {
var percent = (e.loaded / e.total) * 100;
$("#progress").width(percent + "%");
$("#progressText").text(Math.round(percent) + "%");
}
});
return xhr;
},
success: function(response) {
alert("آپلود با موفقیت انجام شد!");
console.log(response);
$("#progressWrapper").hide();
},
error: function(xhr, status, error) {
alert("خطا در آپلود فایل!");
$("#progressWrapper").hide();
}
});
});
});
</script>
4. فایل mod_imageupload.xml
:
این فایل، فایل نصب و پیکربندی ماژول است که برای نصب ماژول در جوملا استفاده میشود.
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" method="upgrade">
<name>mod_imageupload</name>
<author>نام شما</author>
<creationDate>2024-12-28</creationDate>
<copyright>کپیرایت</copyright>
<license>GPLv2 or later</license>
<version>1.0.0</version>
<description>ماژول آپلود تصویر</description>
<files>
<file plugin="mod_imageupload">mod_imageupload.php</file>
<file>helper.php</file>
<folder>tmpl</folder>
</files>
<languages>
<language tag="en-GB">language/en-GB/en-GB.mod_imageupload.ini</language>
<language tag="fa-IR">language/fa-IR/fa-IR.mod_imageupload.ini</language>
</languages>
</extension>
5. نصب و استفاده از ماژول در جوملا
- ماژول را با استفاده از فایل XML در بخش Extension Manager در جوملا نصب کنید.
- پس از نصب، ماژول را از بخش Module Manager فعال کرده و به یک موقعیت (Position) مناسب در قالب جوملا خود متصل کنید.
توضیحات:
- این ماژول فرم آپلود را در هر موقعیتی که به آن وصل شود نمایش میدهد.
- فایلها در مسیر
images/uploads/
ذخیره میشوند. شما میتوانید این مسیر را متناسب با نیاز خود تغییر دهید. - برای حفظ امنیت، حتماً بررسیهایی مانند محدودیت نوع فایل و اندازه فایلها انجام میدهیم.
این مراحل به شما کمک میکند که یک ماژول ساده برای آپلود تصویر در جوملا ۵ ایجاد کنید.
ثبت نظرات