Пропустить

Возможность задавать вид отображения вложенной картинки

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Re: Возможность задавать вид отображения вложенной картинки

Сообщение exec » 16.06.2010 17:37

Ещё один баг:
Неправильно показывает чекбокс у вложения, которое было только что залито кнопкой "Добавить файл", но само сообщение ещё не было отправлено.
Этот файл появляется в списке вложений unchecked, а должен быть checked. так как по умолчанию миниатюры создаются и thumbnail=1 у него

Добавлено спустя 2 часа 55 минут 3 секунды:
Нашёл, где это делается, исправил

Погоняю малость на предмет ещё каких скрытых багов и выложу резульат

Добавлено спустя 39 минут 57 секунд:
Не работает предпросмотр. Точнее, на него не влияют значения чекбоксов. А комментарии работают, однако. И где это задаётся?

exec
phpBB 1.2.1
 
Сообщения: 25
Зарегистрирован: 10.06.2010 0:08
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение exec » 17.06.2010 0:36

Всё, прошу критиковать

Замечания
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'],

function submit_post:
Обновить значение 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

6.Найти
		// 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

function parse_attachments
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;
		}

правильный checkbox для orphaned
в блоке
			else if (($add_file || $preview) && $upload_file)

8.Найти
						$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>
За это сообщение автора exec поблагодарили: 2
hardlock (29.08.2010 1:01), ZhAN (04.11.2010 20:38)

exec
phpBB 1.2.1
 
Сообщения: 25
Зарегистрирован: 10.06.2010 0:08
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение hardlock » 28.08.2010 22:39

Для того, чтобы можно было управлять чекбоксом при редактировании поста:
редактируем файл 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" />&nbsp; <!-- 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}
phpbb 3.0.9 / php 5.2.17 / Apache 2.0 (Unix) on FreeBSD 8.2-RELEASE-p3 / MySQL 5.1.55
Аватара пользователя
hardlock
phpBB 1.4.0
 
Сообщения: 36
Зарегистрирован: 25.01.2009 4:03
Откуда: zp.ua
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение hardlock » 28.11.2011 11:30

Обнаружил интересную особенность при работе данного мода. Не всегда отображалиь миниатюры. Долго искал причину и грешив в первую очередь на другие моды (highslide и т.д.), но при обновлении версии движка форума устанавливал моды заново и когда ставил этот мод решил не вставлять инструкции вида "Всегда удалять файл с миниатюрой". Проблема с неотображением миниатюр исчезла. Для проверки повставлял инструкции на место (сделав бэкап) и проблема снова на месте! Естественно вернул на место бэкап.

exec, подскажите, зачем каждый раз удалять миниатюры? Ведь это огромна нагрузка на диск сервера...
phpbb 3.0.9 / php 5.2.17 / Apache 2.0 (Unix) on FreeBSD 8.2-RELEASE-p3 / MySQL 5.1.55
Аватара пользователя
hardlock
phpBB 1.4.0
 
Сообщения: 36
Зарегистрирован: 25.01.2009 4:03
Откуда: zp.ua
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение Пчелкин » 28.11.2011 17:39

Потому что еще есть модераторы со своими мозгами и есть еще такое понятие - "потерянные вложения"...которых можно достичь, удалив сообщения с такими вложениями...вместо одной картинки вложение, будут потеряны три-четыре и останутся валятся на хосте...!!!
Фанат phpBB. В HTML - без проблем, в CSS - так себе, учусь, в php - баран, помогает только дедукция
Аватара пользователя
Пчелкин
phpBB 3.0.7-PL1
 
Сообщения: 4899
Зарегистрирован: 15.01.2010 14:57
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 288 раз.
Поблагодарили: 556 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение hardlock » 28.11.2011 17:44

Пчелкин, как раз всё удаляется корректно. Специально создавал пост с несколькими картинками (с миниатюрами). После удаления поста картинки и миниатюры тоже удалились корректно. А если выполнить все инструкции мода то картинки удаляются перед каждым просмотром... вернее при каждом обращении на скачивание.
phpbb 3.0.9 / php 5.2.17 / Apache 2.0 (Unix) on FreeBSD 8.2-RELEASE-p3 / MySQL 5.1.55
Аватара пользователя
hardlock
phpBB 1.4.0
 
Сообщения: 36
Зарегистрирован: 25.01.2009 4:03
Откуда: zp.ua
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение exec » 29.11.2011 11:15

Насколько я помню (с трудом припоминаю, 1.5 года назад было), основная идея была такой

При редактировании сообщения автор может выбирать (долго думать :D ) в каком виде он желает видеть картинку, как миниатюру или полноразмерную. При этом должно работать preview, т.е. миниатюра должна создаваться даже в процессе создания/редактирования, если к ней есть обращение (спасибо моду Создание картинок по мере необходимости).

Если автор все-же решит использовать полноразмерную, то хранить миниатюру нет необходимости*. И поэтому её желательно удалить. Чтобы упростить логику я выбрал, как мне показалось, самый прямой путь - удалять миниатюры ВСЕГДА ПРИ СОХРАНЕНИИ СООБЩЕНИЯ. Если потом миниатюра потребуется, она будет создана.

Возможно, что какой-то из 3-х пунктов (9,10,11)- лишний, но сейчас сообразить не могу увы, столько лет прошло, и я немного выпал из темы

Были ещё какие-то сомнения в корректности работы этого хака в определенных ситуациях (автор не отправляет сообщение, например), в результате чего миниатюра не значится в числе потерянных вложений, хотя на диске она лежит. Это нужно проверять.

* Тут меня больше беспокоил не объём миниатюр, они маленькие, а количество файлов. До некоторых пор это не должно вызывать проблем

exec
phpBB 1.2.1
 
Сообщения: 25
Зарегистрирован: 10.06.2010 0:08
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.

Re: Возможность задавать вид отображения вложенной картинки

Сообщение hardlock » 29.11.2011 11:40

exec, ну это я решаю просто - раз в полгода удаляю все фйлы "thumb_" и миниатюры создаются заново, по мере необходимости.
phpbb 3.0.9 / php 5.2.17 / Apache 2.0 (Unix) on FreeBSD 8.2-RELEASE-p3 / MySQL 5.1.55
Аватара пользователя
hardlock
phpBB 1.4.0
 
Сообщения: 36
Зарегистрирован: 25.01.2009 4:03
Откуда: zp.ua
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.

Пред.

Вернуться в Для авторов (phpBB 3.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы