- Введение в валидацию формы загрузки файла в Joomla 4
- Проверка размера файла, который пытается загрузить пользователь на сайт с CMS Joomla 4
- Javascript
- Результат проверки размера файла, который пытается загрузить пользователь на сайт с CMS Joomla 4
Введение в валидацию формы загрузки файла в Joomla 4
Этот совет описывает проверку размера загрузки файлов для компонентов CMS Joomla 4, отличных от com_media
. Соответствующий элемент формы в форме редактирования из приведенного ниже кода выглядит следующим образом:
Максимальный размер загружаемого файла может быть установлен средой хостинга, см. $upload_mb
ниже, или вручную установлен произвольный предел, скажем, 1 Мб.
Проверка размера файла, который пытается загрузить пользователь на сайт с CMS Joomla 4
Следующий код находится в верхней части формы edit.php
. Файл camp_infosheet - это файл JavaScript, содержащий код проверки, см. Ниже:
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */ $wa = $this->document->getWebAssetManager(); $wa->useScript('keepalive') ->useScript('form.validate') ->useScript('com_mycomponent.camp_infosheet'); $max_upload = (int)(ini_get('upload_max_filesize')); $max_post = (int)(ini_get('post_max_size')); $memory_limit = (int)(ini_get('memory_limit')); $upload_mb = min($max_upload, $max_post, $memory_limit); $doc = Factory::getDocument(); $doc->addScriptDeclaration(" var infosheet_size_max = '{$max_upload}'; ");
И следующий код идет в теле edit.php
файла. Обратите внимание на пользовательский класс validate-infosheet_size
, используемый для запуска проверки:
<div class="controls"> <input type="file" name="jform[infosheet]" id="jform_infosheet" class="form-control w20rem required validate-infosheet_size" accept="text/plain,application/msword,text/rtf,application/pdf,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.oasis.opendocument.text" /><br> Максимальный размер загрузки: <strong><?php echo $max_upload; ?>Mb</strong> </div>
Javascript
Это содержимое файла JavaScript сценария проверки:
document.addEventListener('DOMContentLoaded', (event) => { document.formvalidator.setHandler('infosheet_size', function(value) { return infosheet_size(); }); }); function infosheet_size () { var infosheet = document.getElementById('jform_infosheet'); if (infosheet.files.length == 0) { return false; } // проверка размера файла var size = infosheet.files[0].size; if (size > (infosheet_size_max * 1024 * 1024)) { alert('Этот файл больше допустимого! Размер = ' + size); return false; } return true; }
Результат проверки размера файла, который пытается загрузить пользователь на сайт с CMS Joomla 4
Для проверки работы предложенного решения выберите файл размером более 2 МБ и попробуйте его загрузить на сайт с CMS Joomla 4, и появится диалоговое окно предупреждения, а затем это:
Текстовые константы для отображения на языке вашей локации проставьте самостоятельно. ;)
Перевод документации с английского:
https://docs.joomla.org/Joomla_4_Tips_and_Tricks:_Form_Validation_File_Size
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)