проработаны имена файлов. улучшен выизуальный вывод.

This commit is contained in:
2026-01-04 20:57:10 +05:00
parent 1068e20033
commit 4ff2b654b4
3 changed files with 92 additions and 34 deletions

View File

@@ -655,7 +655,20 @@ $is_dangerous = in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'exe',
// Условие: расширение разрешено, файл не опасен и проходит по размеру
if ($is_allowed_ext && !$is_dangerous && $file['size'] > 0 && $file['size'] <= $max_file_size_bytes)
{
$new_name = time() . '_' . rand(100, 999) . '.' . $ext;
// 1. Берем имя
$original_basename = pathinfo($file['name'], PATHINFO_FILENAME);
// 2. Очищаем (БЕЗ $this->, просто вызываем функцию)
$clean_name = prepare_fname($original_basename);
// 3. Если пусто - дефолт
if (empty($clean_name)) {
$clean_name = 'file';
}
// 4. Собираем имя
$new_name = $clean_name . '_' . time() . '.' . $ext;
if (move_uploaded_file($file['tmp_name'], $upload_path . $new_name)) {
$uploaded_files[] = $new_name;
$processed_hashes[] = $file_hash;
@@ -860,7 +873,26 @@ function commentPostEdit($comment_id)
{
if (!is_dir($upload_dir)) @mkdir($upload_dir, 0775, true);
$new_file_name = 'comm_' . time() . '_' . rand(1000, 9999) . '.' . $file_ext;
// --- НАЧАЛО ИЗМЕНЕНИЙ ---
// 1. Получаем оригинальное имя файла без расширения
$original_basename = pathinfo($fname, PATHINFO_FILENAME);
// 2. Очищаем имя через нашу исправленную функцию
$clean_name = prepare_fname($original_basename);
// 3. Защита от пустого имени
if (empty($clean_name)) {
$clean_name = 'file';
}
// 4. Формируем новое имя: чистое_имя + время + расширение
// Убираем старый префикс 'comm_' и rand(), чтобы было как в новых комментах
$new_file_name = $clean_name . '_' . time() . '.' . $file_ext;
// --- КОНЕЦ ИЗМЕНЕНИЙ ---
if (move_uploaded_file($tmp_name, $upload_dir . $new_file_name)) {
$current_files[] = $new_file_name;

View File

@@ -216,4 +216,19 @@
display: flex !important;
align-items: center !important;
height: 32px;
}
}
.comment-image-item .card-link-wrapper {
transition: all 0.2s ease-in-out;
display: block;
border-radius: 8px;
}
.comment-image-item .card-link-wrapper:hover {
transform: translateY(-2px); /* Легкий подъем вверх */
}
.comment-image-item .card-link-wrapper:hover img,
.comment-image-item .card-link-wrapper:hover .file-box {
box-shadow: 0 4px 12px rgba(0,0,0,0.15) !important;
border-color: #0d6efd !important; /* Цвет границы при наведении (синий) */
}

View File

@@ -70,25 +70,33 @@
{assign var="all_files" value=","|explode:$c.comment_file}
{assign var="img_exts" value=['jpg', 'jpeg', 'png', 'gif', 'webp']}
{* 1. Сначала выводим только ИЗОБРАЖЕНИЯ *}
{foreach from=$all_files item=file}
{assign var="f_name" value=$file|trim}
{if $f_name}
{assign var="ext_parts" value="."|explode:$f_name}
{assign var="f_ext" value=$ext_parts[$ext_parts|@count-1]|lower}
{if in_array($f_ext, $img_exts)}
<div class="comment-image-item">
<a href="{$ABS_PATH}uploads/comments/{$f_name}" target="_blank" class="d-block">
<img src="{$ABS_PATH}uploads/comments/{$f_name}"
class="img-fluid rounded border shadow-sm"
style="width: 100px; height: 100px; object-fit: cover;"
alt="Изображение" />
</a>
</div>
{/if}
{* 1. Сначала выводим только ИЗОБРАЖЕНИЯ *}
{foreach from=$all_files item=file}
{assign var="f_name" value=$file|trim}
{if $f_name}
{assign var="ext_parts" value="."|explode:$f_name}
{assign var="f_ext" value=$ext_parts[$ext_parts|@count-1]|lower}
{if in_array($f_ext, $img_exts)}
<div class="comment-image-item d-flex flex-column align-items-center justify-content-between h-100">
<a href="{$ABS_PATH}uploads/comments/{$f_name}" target="_blank" class="card-link-wrapper d-flex align-items-center justify-content-center mb-1" style="height: 100px;">
<img src="{$ABS_PATH}uploads/comments/{$f_name}"
class="img-fluid rounded border shadow-sm"
style="width: 100px; height: 100px; object-fit: cover;"
alt="Изображение" />
</a>
<div class="d-flex align-items-center">
<span class="badge bg-light text-secondary border fw-normal text-truncate d-inline-block"
style="max-width: 100px; font-size: 0.7rem; padding: 1px 4px; line-height: 1.2;"
title="{$f_name|regex_replace:'/_[0-9]+(?=\.[a-z0-9]+$)/i':''}">
{$f_name|regex_replace:"/_[0-9]+(?=\.[a-z0-9]+$)/i":""}
</span>
</div>
</div>
{/if}
{/foreach}
{/if}
{/foreach}
{* 2. Затем выводим все ОСТАЛЬНЫЕ файлы *}
{foreach from=$all_files item=file}
@@ -98,19 +106,22 @@
{assign var="f_ext" value=$ext_parts[$ext_parts|@count-1]|lower}
{if !in_array($f_ext, $img_exts)}
<div class="comment-image-item d-flex flex-column align-items-center">
<a href="{$ABS_PATH}uploads/comments/{$f_name}" target="_blank" class="text-decoration-none d-block text-center">
{* Блок с расширением *}
<div class="d-flex align-items-center justify-content-center bg-light text-dark rounded border shadow-sm mb-1"
style="width: 100px; height: 100px; font-weight: bold; text-transform: uppercase; font-size: 14px;">
<i class="bi bi-file-earmark-arrow-down me-1"></i>{$f_ext}
</div>
{* Название файла *}
<div class="text-muted small text-truncate" style="max-width: 100px;" title="{$f_name}">
{$f_name}
</div>
</a>
</div>
<div class="comment-image-item d-flex flex-column align-items-center justify-content-between h-100">
<a href="{$ABS_PATH}uploads/comments/{$f_name}" target="_blank" class="card-link-wrapper text-decoration-none d-block text-center mb-1">
<div class="file-box d-flex align-items-center justify-content-center bg-light text-dark rounded border shadow-sm"
style="width: 100px; height: 100px; font-weight: bold; text-transform: uppercase; font-size: 14px; transition: all 0.2s;">
<i class="bi bi-file-earmark-arrow-down me-1"></i>{$f_ext}
</div>
</a>
<div class="d-flex align-items-center">
<span class="badge bg-light text-secondary border fw-normal text-truncate d-inline-block"
style="max-width: 100px; font-size: 0.7rem; padding: 1px 4px; line-height: 1.2;"
title="{$f_name|regex_replace:'/_[0-9]+(?=\.[a-z0-9]+$)/i':''}">
{$f_name|regex_replace:"/_[0-9]+(?=\.[a-z0-9]+$)/i":""}
</span>
</div>
</div>
{/if}
{/if}
{/foreach}