Вторая задача решается легко: скачиваем себе всю папку вложений, выделяем все файлы со странными именами вроде 2_6528b86408e87fe6c87b7a551c8fac72 без расширения имени. Это файлы изображений в формате jpg, png, gif. И к ним в той же папке есть превью в jpg с теми же странными именами и префиксом "thumb_". Генерим на локальной машине в фотошопе или там в FastStone нужные превьюшки и с нужными именами. У меня было не много, чуть больше сотни таких файлов, и я прогнал из экшном Automate/Fit Image на уменьшение, ну и чуть подшарпил для красоты. И сохранил все жпегами. Потом добавляем к имени новых файлов префикс "thumb_" и удаляем расширение jpg, все это пакетно. Заменяем старые файлы превью на новые с теми же именами на сервере.
Первую проблему - старые картинки без превьюшек - тоже решил, решение на крохотном яваскрипте. Расскажу по порядку в деталях.
Изображения от второй версии форума хранятся в папке вложений с осмысленными именами, но так же не совпадающими с названием файла по базе {_file.DOWNLOAD_NAME}. Их характерные особенности таковы: расширение есть и всегда маленькими буквами, все символы в файле маленькими буквами, вместо пробела в названиях стоит подчеркивание "_", на конце файла четыре символа - подчеркивание и трехзначное число.
Берем все эти файлы и генерим на своем компе в фотошопе или FastStone или ACDSee или в чем хотите нужные превьюшки для них с теми же именами в отдельную папку. Причем превью png так же сохраняем в png, а gif - в gif, в моем решении я не загонял все превью в jpg.
Потом пакетно переименовываем все файлы в этой папке: добавляем префикс "thumb_" и убираем 4 символа справа в имени до расширения. Расширения jpg, gif. png оставляем как есть - главное все расширения маленькими буквами.
У меня таких файлов без превью от старого форума набралось 170 штук. И с одинаковыми именами, типа untitled_1, различающимися лишь 4 последними символами у меня не было к счастью.
Кладем эту папку на сервер, но не в каталог форума, а на уровень выше, рядом с папкой форума (форум может капризничать с правами доступа к папке внутри него).
И теперь делаем пару маленьких правочек в шаблонах стилей в файле attachment.html из папки styles/prosilver(subsilver и проч)/template:
Для стиля prosilver и базирующихся на нем в файле attachment.html находим блок аттачей файлов и дописываем к нему условие на JavaScript. Найти:
Код: Выделить всё
<!-- IF _file.S_FILE -->
<dl class="file">
<dt><!-- IF _file.UPLOAD_ICON -->{_file.UPLOAD_ICON} <!-- ENDIF --><a class="postlink" href="{_file.U_DOWNLOAD_LINK}">{_file.DOWNLOAD_NAME}</a></dt>
<!-- IF _file.COMMENT --><dd><em>{_file.COMMENT}</em></dd><!-- ENDIF -->
<dd>({_file.FILESIZE} {_file.SIZE_LANG}) {_file.L_DOWNLOAD_COUNT}</dd>
</dl>
<!-- ENDIF -->
Код: Выделить всё
<!-- IF _file.S_FILE -->
<script type="text/javascript">
var fileUrlUp = "{_file.DOWNLOAD_NAME}";
var fileLink = fileUrlUp.toLowerCase().replace(/\ /gi, "_");
var fileLinkar = fileLink.split('.');
var ext = fileLinkar[fileLinkar.length-1];
if(ext == 'png' || ext == 'jpg' || ext == 'gif') {
document.write('<dl class="thumbnail">');
document.write('<dt><a href="{_file.U_DOWNLOAD_LINK}"><img src="../../forum_files_thumb/thumb_'+fileLink+'" class="postimage" alt="{_file.DOWNLOAD_NAME}" title="{_file.DOWNLOAD_NAME} • ({_file.FILESIZE} {_file.SIZE_LANG}) • {_file.L_DOWNLOAD_COUNT}" /></a></dt>');
document.write('<!-- IF _file.COMMENT --><dd> {_file.COMMENT}</dd><!-- ENDIF -->');
document.write('</dl>');
} else {
document.write('<dl class="file">');
document.write('<dt><!-- IF _file.UPLOAD_ICON -->{_file.UPLOAD_ICON} <!-- ENDIF --><a class="postlink" href="{_file.U_DOWNLOAD_LINK}">{_file.DOWNLOAD_NAME}</a></dt>');
document.write('<!-- IF _file.COMMENT --><dd><em>{_file.COMMENT}</em></dd><!-- ENDIF -->');
document.write('<dd>• ({_file.FILESIZE} {_file.SIZE_LANG}) • {_file.L_DOWNLOAD_COUNT}</dd>');
document.write('</dl>');
}
</script>
<noscript>
<dl class="file">
<dt><!-- IF _file.UPLOAD_ICON -->{_file.UPLOAD_ICON} <!-- ENDIF --><a class="postlink" href="{_file.U_DOWNLOAD_LINK}">{_file.DOWNLOAD_NAME}</a></dt>
<!-- IF _file.COMMENT --><dd><em>{_file.COMMENT}</em></dd><!-- ENDIF -->
<dd>• {_file.FILESIZE} {_file.SIZE_LANG} • {_file.L_DOWNLOAD_COUNT}</dd>
</dl>
</noscript>
<!-- ENDIF -->
Для стиля subsilver и основанных на нем исправление attachment.html выглядит так, находим блок:
Код: Выделить всё
<!-- IF _file.S_FILE -->
<span class="genmed">
<!-- IF _file.UPLOAD_ICON -->{_file.UPLOAD_ICON} <!-- ENDIF -->
<a href="{_file.U_DOWNLOAD_LINK}">{_file.DOWNLOAD_NAME}</a> [{_file.FILESIZE} {_file.SIZE_LANG}]
</span><br />
<span class="gensmall">{_file.L_DOWNLOAD_COUNT}</span>
<!-- ENDIF -->
Код: Выделить всё
<!-- IF _file.S_FILE -->
<script type="text/javascript">
var fileUrlUp = "{_file.DOWNLOAD_NAME}";
var fileLink = fileUrlUp.toLowerCase().replace(/\ /gi, "_");
var fileLinkar = fileLink.split('.');
var ext = fileLinkar[fileLinkar.length-1];
if(ext == 'png' || ext == 'jpg' || ext == 'gif') {
document.write('<a href="{_file.U_DOWNLOAD_LINK}"><img src="../../forum_files_thumb/thumb_'+fileLink+'" class="postimage" alt="{_file.DOWNLOAD_NAME}" /></a><br />');
document.write('<span class="gensmall">{_file.DOWNLOAD_NAME} [ {_file.FILESIZE} {_file.SIZE_LANG} | {_file.L_DOWNLOAD_COUNT} ]</span>');
} else {
document.write('<span class="genmed">');
document.write('<!-- IF _file.UPLOAD_ICON -->{_file.UPLOAD_ICON} <!-- ENDIF -->');
document.write('<a href="{_file.U_DOWNLOAD_LINK}">{_file.DOWNLOAD_NAME}</a> [{_file.FILESIZE} {_file.SIZE_LANG}]');
document.write('</span><br />');
document.write('<span class="gensmall">{_file.L_DOWNLOAD_COUNT}</span>');
}
</script>
<noscript>
<span class="genmed">
<!-- IF _file.UPLOAD_ICON -->{_file.UPLOAD_ICON} <!-- ENDIF -->
<a href="{_file.U_DOWNLOAD_LINK}">{_file.DOWNLOAD_NAME}</a> [{_file.FILESIZE} {_file.SIZE_LANG}]
</span><br />
<span class="gensmall">{_file.L_DOWNLOAD_COUNT}</span>
</noscript>
<!-- ENDIF -->
При желании закрываем доступ к листингу нашей папки с превьюшками строчкой в файле .htaccess для этой папки: Options -Indexes. Все задача решена, решение работает целиком на клиенсткой машине и никак не затрагивает ни базы данных ни php-скриптов форума. Хотелось бы и в форуме как в gallery иметь возможность перегенерить сервером скопом все превьюшки, но пока таких экстеншнов нет, я все перерыл, прежде чем решать задачку самостоятельно на яваскрипте.