Возможность задавать вид отображения вложенной картинки
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
ZhAN
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 18 лет 2 месяца
- Откуда: Киев
- Благодарил (а): 2 раза
- Поблагодарили: 4 раза
Возможность задавать вид отображения вложенной картинки
При показе сообщения отображаются те "аттачи", которые явно вставлены в сообщение в виде бб-тегов [attachment=N][/attachment], а остальные показываются в конце сообщения.
Например у меня на форуме "Максимальная ширина миниатюр: 200px". Этот размер миниатюр меня более чем устраивает, когда загружаются фотографии и т.п. контент.
Но в некоторых случаях (например когда в какойнить инструкции нужно показать принт-скрин элементов интерфейса, который по размерам больше 200 точек) миниатюры сильно мешают. Хочется иметь возможность нужные вложения-картинки вставлять в тело сообщения так, чтобы они отображались полноразмерно.
Решения которые приходят в голову:
1. Использовать тег [img][/img]. В качестве url изображения подставить ссылку на полноразмерную вложенную картинку (/download/file.php?id=айди_аттача&mode=view). Картинка в теле сообщения отображается как нужно, но в конце сообщения показывается миниатюра этойже картинки (она ведь не вставлена как [attachment]
2. заливать картинки кудато в другое место и вставлять как обычный [img][/img]. Мне это неудобно и не решение это.
3. сделать мод, который например добавит новый ббтег [attachment-image] который будет показывать прицепленную картинку в полном размере, и даст понять что её не нужно показывать в конце сообщения.
Вопрос собственно по реализации п.3. У кого какие мысли есть? Или возможно предложите другие решения?
-
MAzZY
- Бывший член :)
- Сообщения: 2925
- Стаж: 21 год 4 месяца
- Благодарил (а): 79 раз
- Поблагодарили: 69 раз
- Забанен: Бессрочно
Re: Возможность задавать вид отображения вложенной картинки
-
Shredder
- Former team member
- Сообщения: 2266
- Стаж: 17 лет 9 месяцев
- Благодарил (а): 283 раза
- Поблагодарили: 584 раза
Re: Возможность задавать вид отображения вложенной картинки
Для тех, кто хочет этого избежать, существует простое решение - в overall_header.html найтиЕсли вставлять скриншот в полном размере, то он будет растягивать всю таблицу форума
Код: Выделить всё
// ]]>
</script>Код: Выделить всё
// Resizeimg
window.onload = resizeimg;
function resizeimg()
{
if (document.getElementsByTagName)
{
for (i=0; i<document.getElementsByTagName('img').length; i++)
{
im = document.getElementsByTagName('img')[i];
if (im.width > 540)
{
im.style.width = '540px';
eval("pop" + String(i) + " = new Function(\"pop = window.open('" + im.src + " ','fullscale','width=400,height=400,scrollbars=1,resizable=1'); pop.focus();\")");
eval("im.onclick = pop" + String(i) + ";");
if (document.all) im.style.cursor = 'hand';
if (!document.all) im.style.cursor = 'pointer';
im.title = '{L_IMAGE_FULLSIZE}';
}
}
}
}Значение 540 пикселей в двух местах - это я для себя там поставил, на самом деле можно менять на любое значение, начиная с какого разрешения хочешь уменьшить и до какого.
Добавлено спустя 6 минут 6 секунд:
За отмену показа картинки в конце сообщения при использовании бб-кода [attachment] овечает вот это место в functions_content.phpZhAN писал(а):1. Использовать тег . В качестве url изображения подставить ссылку на полноразмерную вложенную картинку (/download/file.php?id=айди_аттача&mode=view). Картинка в теле сообщения отображается как нужно, но в конце сообщения показывается миниатюра этойже картинки (она ведь не вставлена как [attachment]
Код: Выделить всё
$unset_tpl = array_unique($unset_tpl);
// Needed to let not display the inlined attachments at the end of the post again
foreach ($unset_tpl as $index)
{
unset($attachments[$index]);
}
}-
ZhAN
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 18 лет 2 месяца
- Откуда: Киев
- Благодарил (а): 2 раза
- Поблагодарили: 4 раза
Re: Возможность задавать вид отображения вложенной картинки
подразумевается что в полном размере будут вставляться только те избранные скриншоты, которые не превышают разумные размеры и вполне могут без последствий для отображения показываться в полном размере.
Shredder,
да, у вас аналогичная задача. Хорошо сформулирована. Будем искать решение вместе.
-
Shredder
- Former team member
- Сообщения: 2266
- Стаж: 17 лет 9 месяцев
- Благодарил (а): 283 раза
- Поблагодарили: 584 раза
Re: Возможность задавать вид отображения вложенной картинки
Open
includes/functions_posting.php
Find
Код: Выделить всё
// Do we have to create a thumbnail?
$filedata['thumbnail'] = ($cat_id == ATTACHMENT_CATEGORY_IMAGE && $config['img_create_thumbnail']) ? 1 : 0;Код: Выделить всё
// Do we have to create a thumbnail?
$full_size_image = request_var('full_size_image', false);
$filedata['thumbnail'] = ($cat_id == ATTACHMENT_CATEGORY_IMAGE && $config['img_create_thumbnail'] && !$full_size_image) ? 1 : 0;styles/prosilver/template/posting_attach_body.html
Find
Код: Выделить всё
<dd>
<input type="file" name="fileupload" id="fileupload" maxlength="{FILESIZE}" value="" class="inputbox autowidth" />
<input type="submit" name="add_file" value="{L_ADD_FILE}" class="button2" onclick="upload = true;" />
</dd>Код: Выделить всё
<dd>
<input type="file" name="fileupload" id="fileupload" maxlength="{FILESIZE}" value="" class="inputbox autowidth" />
<input type="submit" name="add_file" value="{L_ADD_FILE}" class="button2" onclick="upload = true;" /><br />
<input type="checkbox" name="full_size_image" id="full_size_image" /> {L_DO_NOT_CREATE_THUMBNAIL}
</dd>styles/subsilver2/template/posting_attach_body.html
Find
Код: Выделить всё
<tr>
<td class="row1"><b class="genmed">{L_FILENAME}</b></td>
<td class="row2"><input type="file" name="fileupload" size="40" maxlength="{FILESIZE}" value="" class="btnfile" /></td>
</tr> Код: Выделить всё
<tr>
<td class="row1"><b class="genmed">{L_FILENAME}</b></td>
<td class="row2"><input type="file" name="fileupload" size="40" maxlength="{FILESIZE}" value="" class="btnfile" /><br />
<input type="checkbox" class="radio" name="full_size_image" />{L_DO_NOT_CREATE_THUMBNAIL}</td>
</tr> language/ru/common.php
Find
Код: Выделить всё
'DISPLAY_TOPICS' => 'Показать темы за',Код: Выделить всё
'DO_NOT_CREATE_THUMBNAIL' => 'Не создавать превью для загружаемой картинки',Под кнопкой "добавить файл" появляется соответствующий чекбокс. Но это позволяет выбирать только между миниатюрой и полноразмерным изображением, исключительно на уровне загрузки на сервер (т.е. только однажды).
И это не работает с модом мультизагрузки изображений (точнее работает, но не так как хотелось бы).
-
qwinter
- phpBB 1.2.0
- Сообщения: 12
- Стаж: 16 лет 8 месяцев
- Откуда: Саратов
Re: Возможность задавать вид отображения вложенной картинки
Код: Выделить всё
<!-- IF postrow.S_HAS_ATTACHMENTS -->
<dl class="attachbox">
<dt>{L_ATTACHMENTS}</dt>
<!-- BEGIN attachment -->
<dd>{postrow.attachment.DISPLAY_ATTACHMENT}</dd>
<!-- END attachment -->
< </dl>
<!-- ENDIF -->
-
Shredder
- Former team member
- Сообщения: 2266
- Стаж: 17 лет 9 месяцев
- Благодарил (а): 283 раза
- Поблагодарили: 584 раза
Re: Возможность задавать вид отображения вложенной картинки
Всё бы хорошо, вот только это больше похоже на сломанный оригинальный код форума, неспроста сделанный изначально для чего-то именно таким. Иные могут прикрепить вложение и даже не удосужиться проверить свой отправленный пост - многие так и делают. И ты никогда уже не узнаешь, что оно там есть, только место хостинга будет забивать и всё. К тому же это убъёт уже существующие не-инлайновые аттачи.
-
ZhAN
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 18 лет 2 месяца
- Откуда: Киев
- Благодарил (а): 2 раза
- Поблагодарили: 4 раза
Re: Возможность задавать вид отображения вложенной картинки
спасибо за предложенное решение.
Из недостатков:
- необходимо ооочень внимательно создавать сообщение
- невозможно изменить отображение уже после создания сообщения (зачастую большие сообщения пишутся в несколько заходов)
- если вдруг захочется пересоздать все миниатюры (например изменив им размер) используя мод в подписи, тоже будут проблемы (потеряются данные что именно эти файлы нужно показывать без миниатюр)
з.ы. недостатки не всмысле "покритиковать", а в смысле "констатировать и не забыть"
-
qwinter
- phpBB 1.2.0
- Сообщения: 12
- Стаж: 16 лет 8 месяцев
- Откуда: Саратов
Re: Возможность задавать вид отображения вложенной картинки
Ну так сделай выбор показывать или нет этот кусок кода в сообщенииShredder писал(а):qwinter
Всё бы хорошо, вот только это больше похоже на сломанный оригинальный код форума, неспроста сделанный изначально для чего-то именно таким. Иные могут прикрепить вложение и даже не удосужиться проверить свой отправленный пост - многие так и делают. И ты никогда уже не узнаешь, что оно там есть, только место хостинга будет забивать и всё. К тому же это убъёт уже существующие не-инлайновые аттачи.
P.S. мод это уже сломанный код)))
-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
Идея в том, что если поменять в таблице _attachments поле thumblail=1 на thumbnail=0 , то вместо миниатюры, вставленной ббкодом attachment, будет отображаеться полноразмерная картинка.
Осталось только это реализовать чекбоксом в редакторе, где-то рядом с кнопкой "Удалить файл"
Разумеется, миниатюры должны создаваться всегда, независимо от параметра в ACP.
Понимаю, что это идёт вразрез с "линией архитектора".
И ещё бы убрать миниатюры для невставленных вложений, хотя это не столь критично
Сам это сделать вряд ли смогу, так как PHP "читаю со словарём"
Спасибо
-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
У меня только в одном затык:
каким образом значение чекбокса с именем thumb_list из /style/subsilver2/template/posting_attach_body.php:
Код: Выделить всё
<!-- BEGIN attach_row -->
...
<input type="checkbox" name="thumb_list[{attach_row.ASSOC_INDEX}]" <!-- IF attach_row.S_THUMBNAIL -->checked="checked"<!-- ENDIF --> /> {L_SHOW_THUMB}</td>Очень много исправлений приходится внести в posting.php, /include/functions_posting.php и /include/message_parser.php
Пока не преодолел
Если кого это интересует и есть возможность поучаствовать, дайте знать. Приведу этот длинный список исправлений, и будем допиливать вместе.
-
MIT
- Former team member
- Сообщения: 2500
- Стаж: 17 лет 6 месяцев
- Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
- Благодарил (а): 3 раза
- Поблагодарили: 351 раз
Re: Возможность задавать вид отображения вложенной картинки
В таблицу засовывать надо руками, а в распоряжение значение можно получить, запросив его из POST-массива:exec писал(а):каким образом значение чекбокса с именем thumb_list (...) может попасть в таблицу _attachments.thumbnail
Код: Выделить всё
$_POST['thumb_list']-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
Спасибо за оперативность!
С получением этого значения проблем нет - если ручками поменять в БД, то чекбокс в редакторе отображается как надо
проблема с отправкой - после отпраки значения в БД сбрасываются в 0
я сейчас попробую всё в кучку собрать и здесь напечатать, но там их штук 12-13
Это хирургические исправления, по аналогии с тем что было в исходнике
Добавлено спустя 36 минут 31 секунду:
Хотелось бы допилить attachments чтобы устранить техническое преимущество внешних хостингов картинок перед встроенными возможностями PHPBB
добавил пояснения, где понял сам что делаю
-------------------------------------------------------------------------------------------------------------------------
1. Добавить чекбокс в шаблон
root/style/subsilver2/template/posting_attach_body.php
Найти
Код: Выделить всё
<!-- 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}]" <!-- IF attach_row.S_THUMBNAIL -->checked="checked"<!-- ENDIF --> /> {L_SHOW_THUMB}</td>
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'],
Найти
Код: Выделить всё
// 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';Найти
Код: Выделить всё
$attach_sql = array(
'post_msg_id' => $data['post_id'],
'topic_id' => $data['topic_id'],
'is_orphan' => 0,
'poster_id' => $poster_id,
'attach_comment' => $attach_row['attach_comment'],
Код: Выделить всё
'thumbnail' => $attach_row['thumbnail'],
root/posting.php
5. Читать поле thumbnail при вызове редактора
Найти
Код: Выделить всё
// 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/message_parser.php
function get_submitted_attachment_data
6. Найти
Код: Выделить всё
// 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
Код: Выделить всё
set_var($this->attachment_data[$pos]['attach_comment'], $_POST['attachment_data'][$pos]['attach_comment'], 'string', true);
Код: Выделить всё
set_var($this->attachment_data[$pos]['thumbnail'], $_POST['attachment_data'][$pos]['thumbnail'], 'int');
Код: Выделить всё
// 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
Код: Выделить всё
set_var($this->attachment_data[$pos]['attach_comment'], $_POST['attachment_data'][$pos]['attach_comment'], 'string', true);
Код: Выделить всё
set_var($this->attachment_data[$pos]['thumbnail'], $_POST['attachment_data'][$pos]['thumbnail'], 'int');
10. Найти
Код: Выделить всё
// 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];
}
}
Код: Выделить всё
// At second parse thumbnail parameter
$actual_thumb_list = request_var('thumb_list', array(0));
foreach ($actual_thumb_list as $thumb_key => $thumb)
{
if (!isset($this->attachment_data[$thumb_key]))
{
continue;
}
if ($this->attachment_data[$thumb_key]['thumbnail'] != $actual_thumb_list[$thumb_key])
{
$this->attachment_data[$thumb_key]['thumbnail'] = $actual_thumb_list[$thumb_key];
}
}
Найти
Код: Выделить всё
if ($row['thumbnail'])
{
phpbb_unlink($row['physical_filename'], 'thumbnail');
}
Код: Выделить всё
//if ($row['thumbnail'])
{
phpbb_unlink($row['physical_filename'], 'thumbnail');
}
root/include/acp/acp_attachments.php
12. Всегда удалять файл с миниатюрой
Найти
Код: Выделить всё
if ($row['thumbnail'])
{
phpbb_unlink($row['physical_filename'], 'thumbnail');
}
Код: Выделить всё
//if ($row['thumbnail'])
{
phpbb_unlink($row['physical_filename'], 'thumbnail');
}
root/includes/functions_admin.php
13. Всегда удалять файл с миниатюрой
Найти
Код: Выделить всё
if ($file_ary['thumbnail'])
Код: Выделить всё
// if ($file_ary['thumbnail'])
С этим текстом ещё одна проблема, наверное также связанная с недопониманием и недоделками:
если в "Добавить вложения" выбрать файл и сразу всё сообщение отправить, то вонзикает sql_error из-за thumbnail=NULL:
Код: Выделить всё
SQL ERROR [ mysqli ]
Column 'thumbnail' cannot be null [1048]
SQL
UPDATE phpbb_attachments SET post_msg_id = 1, topic_id = 1, is_orphan = 0, poster_id = 2, attach_comment = '', thumbnail = NULL WHERE attach_id = 18 AND is_orphan = 1 AND poster_id = 2
BACKTRACE
FILE: includes/db/mysqli.php
LINE: 163
CALL: dbal->sql_error()
FILE: includes/functions_posting.php
LINE: 2223
CALL: dbal_mysqli->sql_query()
FILE: posting.php
LINE: 1108
CALL: submit_post()Добавлено спустя 16 минут 58 секунд:
Эти изменения напрашиваются сами собой по аналогии с переменной attach_comment/comment_list, которая лежит рядом и является комментарием к приложенному файлу
-
MIT
- Former team member
- Сообщения: 2500
- Стаж: 17 лет 6 месяцев
- Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
- Благодарил (а): 3 раза
- Поблагодарили: 351 раз
Re: Возможность задавать вид отображения вложенной картинки
Что бы не возникало, надо задать значение по умолчанию (ALTER TABLE MODIFY COLUMN) или всегда определять значения в INSERT`ах.exec писал(а):вонзикает sql_error из-за thumbnail=NULL
-
exec
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 16 лет 3 месяца
- Поблагодарили: 2 раза
Re: Возможность задавать вид отображения вложенной картинки
Т.е п.4 не нужен.
Осталось только разобраться с основной проблемой: почему после редактирования и оправки сообщения в базу данных пишутся не значения чекбоксов, а нули.
Добавлено спустя 1 час 15 минут 47 секунд:
MIT
действительно так, спасибоВ таблицу засовывать надо руками, а в распоряжение значение можно получить, запросив его из POST-массива:

