Возможность задавать вид отображения вложенной картинки
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
Неправильно показывает чекбокс у вложения, которое было только что залито кнопкой "Добавить файл", но само сообщение ещё не было отправлено.
Этот файл появляется в списке вложений unchecked, а должен быть checked. так как по умолчанию миниатюры создаются и thumbnail=1 у него
Добавлено спустя 2 часа 55 минут 3 секунды:
Нашёл, где это делается, исправил
Погоняю малость на предмет ещё каких скрытых багов и выложу резульат
Добавлено спустя 39 минут 57 секунд:
Не работает предпросмотр. Точнее, на него не влияют значения чекбоксов. А комментарии работают, однако. И где это задаётся?
-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
Замечания
1. Установить мод Создание картинок по мере необходимости
2. Если картинка маленькая настолько, что для неё миниатюра не будет создана, то она не будет отображаться в превью, если выставить ей чекбоксом thumbnail=1. Однако, благодаря пункту 1, значение thumbnail будет автоматически сброшено в 0 после первого просмотра отправленного сообщения. Не знаю пока как преодолеть это программно, но проблему можно было бы обойти, всегда создавая миниатюры даже для маленьких картинок. Проблема останется только в том случае, если миниатюру создать невозможно.
3. Убрать бы чекбокс для вложений, не являющихся картинками
Изменения по ходу дела:
1. Исправлено неудачное описание действий в п.14, которое может привести к лишнему закрывающему тэгу </td>
root/posting.php
1.Найти
Код: Выделить всё
// Do not change to SELECT *
$sql = 'SELECT attach_id, is_orphan, attach_comment, real_filename
Код: Выделить всё
// Do not change to SELECT *
$sql = 'SELECT attach_id, is_orphan, attach_comment, real_filename, thumbnail
root/include/functions_posting.php
function posting_gen_attachment_entry:
Добавить значение чекбокса в шаблон:
2.Найти
Код: Выделить всё
$template->assign_block_vars('attach_row', array(
'FILENAME' => utf8_basename($attach_row['real_filename']),
'A_FILENAME' => addslashes(utf8_basename($attach_row['real_filename'])),
'FILE_COMMENT' => $attach_row['attach_comment'],
'ATTACH_ID' => $attach_row['attach_id'],
'S_IS_ORPHAN' => $attach_row['is_orphan'],
'ASSOC_INDEX' => $count,
Код: Выделить всё
'S_THUMBNAIL' => $attach_row['thumbnail'],
Обновить значение thumbnail в таблице
3.Найти
Код: Выделить всё
// update entry in db if attachment already stored in db and filespace
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . "
SET attach_comment = '" . $db->sql_escape($attach_row['attach_comment']) . "'
WHERE attach_id = " . (int) $attach_row['attach_id'] . '
AND is_orphan = 0';
Код: Выделить всё
// update entry in db if attachment already stored in db and filespace
$attach_sql = array(
'attach_comment' => $db->sql_escape($attach_row['attach_comment']),
'thumbnail' => $attach_row['thumbnail'],
);
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $attach_sql) . '
WHERE attach_id = ' . (int) $attach_row['attach_id'] . '
AND is_orphan = 0';
root/include/functions_content.php
Активировать чекбоксы в preview
4.Найти
Код: Выделить всё
$row['attach_comment'] = $attachments[$attach_ids[$row['attach_id']]]['attach_comment'];
Код: Выделить всё
$row['thumbnail'] = $attachments[$attach_ids[$row['attach_id']]]['thumbnail'];
root/include/message_parser.php
function get_submitted_attachment_data
5.Найти
Код: Выделить всё
// Regenerate already posted attachments
if (sizeof($not_orphan))
{
// Get the attachment data, based on the poster id...
$sql = 'SELECT attach_id, is_orphan, real_filename, attach_comment
Код: Выделить всё
// Regenerate already posted attachments
if (sizeof($not_orphan))
{
// Get the attachment data, based on the poster id...
$sql = 'SELECT attach_id, is_orphan, real_filename, attach_comment, thumbnail
Код: Выделить всё
// Regenerate newly uploaded attachments
if (sizeof($orphan))
{
$sql = 'SELECT attach_id, is_orphan, real_filename, attach_comment
Код: Выделить всё
// Regenerate newly uploaded attachments
if (sizeof($orphan))
{
$sql = 'SELECT attach_id, is_orphan, real_filename, attach_comment, thumbnail
7.Найти
Код: Выделить всё
// First of all adjust comments if changed
$actual_comment_list = utf8_normalize_nfc(request_var('comment_list', array(''), true));
foreach ($actual_comment_list as $comment_key => $comment)
{
if (!isset($this->attachment_data[$comment_key]))
{
continue;
}
if ($this->attachment_data[$comment_key]['attach_comment'] != $actual_comment_list[$comment_key])
{
$this->attachment_data[$comment_key]['attach_comment'] = $actual_comment_list[$comment_key];
}
}
Код: Выделить всё
// parse thumbnail checkboxes
$actual_thumb_list = request_var('thumb_list', array(''));
foreach ($this->attachment_data as $key => $val)
{
$this->attachment_data[$key]['thumbnail'] = 0;
}
foreach ($actual_thumb_list as $key => $val)
{
$k = (int)$actual_thumb_list[$key];
if (!isset($this->attachment_data[$k])) continue;
$this->attachment_data[$k]['thumbnail'] = 1;
}
в блоке
Код: Выделить всё
else if (($add_file || $preview) && $upload_file)Код: Выделить всё
$new_entry = array(
'attach_id' => $db->sql_nextid(),
'is_orphan' => 1,
'real_filename' => $filedata['real_filename'],
'attach_comment'=> $this->filename_data['filecomment'],
Код: Выделить всё
'thumbnail' => $filedata['thumbnail'],
9.Найти
Код: Выделить всё
if ($row['thumbnail'])
Код: Выделить всё
//if ($row['thumbnail'])
root/includes/functions_admin.php
Всегда удалять файл с миниатюрой
10.Найти
Код: Выделить всё
if ($file_ary['thumbnail'])
Код: Выделить всё
// if ($file_ary['thumbnail'])
root/include/acp/acp_attachments.php
Всегда удалять файл с миниатюрой
11.Найти
Код: Выделить всё
if ($row['thumbnail'])
Код: Выделить всё
//if ($row['thumbnail'])
root/language/en/common.php
12.Найти
Код: Выделить всё
));
Код: Выделить всё
'SHOW_THUMB' => 'show thumbnail',
root/language/ru/common.php
13.Найти
Код: Выделить всё
));
Код: Выделить всё
'SHOW_THUMB' => 'показывать миниатюру',
Добавить чекбокс в шаблон
root/style/subsilver2/template/posting_attach_body.php
14.Найти
Код: Выделить всё
<!-- BEGIN attach_row -->
<tr>
<td class="row1"><b class="genmed">{L_FILENAME}</b></td>
<td class="row2"><a class="genmed" href="{attach_row.U_VIEW_ATTACHMENT}" target="_blank">{attach_row.FILENAME}</a></td>
Код: Выделить всё
<!-- BEGIN attach_row -->
<tr>
<td class="row1"><b class="genmed">{L_FILENAME}</b></td>
<td class="row2"><a class="genmed" href="{attach_row.U_VIEW_ATTACHMENT}" target="_blank">{attach_row.FILENAME}</a>
<input type="checkbox" name="thumb_list[{attach_row.ASSOC_INDEX}]" value="{attach_row.ASSOC_INDEX}" <!-- IF attach_row.S_THUMBNAIL -->checked="checked"<!-- ENDIF --> /> {L_SHOW_THUMB}</td>
-
hardlock
- phpBB 1.4.0
- Сообщения: 37
- Стаж: 17 лет 7 месяцев
- Откуда: zp.ua
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
редактируем файл posting_editor.html из соответствующего шаблона (root\styles\prosilver\template\posting_editor.html )
Найти:
Код: Выделить всё
<dd style="margin-top: 5px;">
<!-- IF S_INLINE_ATTACHMENT_OPTIONS --><input type="button" value="{L_PLACE_INLINE}" onclick="attach_inline({attach_row.ASSOC_INDEX}, '{attach_row.A_FILENAME}');" class="button2" /> <!-- ENDIF -->
<input type="submit" name="delete_file[{attach_row.ASSOC_INDEX}]" value="{L_DELETE_FILE}" class="button2" />
</dd>Код: Выделить всё
<input type="checkbox" name="thumb_list[{attach_row.ASSOC_INDEX}]" value="{attach_row.ASSOC_INDEX}" <!-- IF attach_row.S_THUMBNAIL -->checked="checked"<!-- ENDIF --> /> {L_SHOW_THUMB}
-
hardlock
- phpBB 1.4.0
- Сообщения: 37
- Стаж: 17 лет 7 месяцев
- Откуда: zp.ua
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
exec, подскажите, зачем каждый раз удалять миниатюры? Ведь это огромна нагрузка на диск сервера...
-
Пчелкин
- phpBB 3.3.0
- Сообщения: 11361
- Стаж: 16 лет 8 месяцев
- Благодарил (а): 1832 раза
- Поблагодарили: 1358 раз
Re: Возможность задавать вид отображения вложенной картинки
-
hardlock
- phpBB 1.4.0
- Сообщения: 37
- Стаж: 17 лет 7 месяцев
- Откуда: zp.ua
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
При редактировании сообщения автор может выбирать (долго думать
Если автор все-же решит использовать полноразмерную, то хранить миниатюру нет необходимости*. И поэтому её желательно удалить. Чтобы упростить логику я выбрал, как мне показалось, самый прямой путь - удалять миниатюры ВСЕГДА ПРИ СОХРАНЕНИИ СООБЩЕНИЯ. Если потом миниатюра потребуется, она будет создана.
Возможно, что какой-то из 3-х пунктов (9,10,11)- лишний, но сейчас сообразить не могу увы, столько лет прошло, и я немного выпал из темы
Были ещё какие-то сомнения в корректности работы этого хака в определенных ситуациях (автор не отправляет сообщение, например), в результате чего миниатюра не значится в числе потерянных вложений, хотя на диске она лежит. Это нужно проверять.
* Тут меня больше беспокоил не объём миниатюр, они маленькие, а количество файлов. До некоторых пор это не должно вызывать проблем
-
hardlock
- phpBB 1.4.0
- Сообщения: 37
- Стаж: 17 лет 7 месяцев
- Откуда: zp.ua
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза

