Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Хэштег в функции generate_pagination

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
velo
phpBB 2.0.1
Сообщения: 252
Стаж: 16 лет 6 месяцев
Благодарил (а): 10 раз
Поблагодарили: 26 раз
Контактная информация:

Хэштег в функции generate_pagination

Сообщение velo »

Сам блок с пагинацией находится ниже других блоков, вывести его в первый раз не сложно, добавив в ссылку хэштег #blabla
Но при переходе по страницам, в браузере прыгаем вверх, что не есть хорошо, каждый раз приходится листать вниз.

Ну и вытекающий вопрос, как добавить хэштег при использовании функции generate_pagination?

PS Не в тот раздел, сорри, прошу перенести Для авторов (phpBB 3.0.x)
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Хэштег в функции generate_pagination

Сообщение rxu »

Изложите вопрос яснее, ничего не понял.
Изображение
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 11 лет 10 месяцев
Благодарил (а): 152 раза
Поблагодарили: 215 раз
Забанен: Бессрочно

Re: Хэштег в функции generate_pagination

Сообщение xisp »

rxu писал(а):Изложите вопрос яснее, ничего не понял.
Пагинация внизу, но когда жмёшь на какую- либо страницу, браузер показывает новую страницу с начала, сверху. А ему хочется, чтобы страница отобразилась снизу.
Странное желание, если честно. Придётся мотать страницу вверх, чтобы читать сообщения подряд.
phpBBex
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Хэштег в функции generate_pagination

Сообщение rxu »

xisp писал(а):Пагинация внизу
Она и сверху, и снизу.
xisp писал(а):А ему хочется, чтобы страница отобразилась снизу.
На последнее сообщение страницы переносила? Или к футеру? Т.е. начинать просмотр страницы снизу? К чему это?
Потому и попросил прояснить вопрос.
Изображение
velo
phpBB 2.0.1
Сообщения: 252
Стаж: 16 лет 6 месяцев
Благодарил (а): 10 раз
Поблагодарили: 26 раз
Контактная информация:

Re: Хэштег в функции generate_pagination

Сообщение velo »

Попробую поподробнее :)

На странице есть 2 блока, друг над другом, размер ну практически в размер просмотра страницы в браузере.
Второй блок многостраничный, используется ф-ция generate_pagination для переключения страниц.

Перейти при первом входе на страницу просто: page.php#list
просмотр у пользователя начинается сразу со второго(нижнего) блока, именно там и располагается якорь list

Однако, если пользователь начинает переходить по страницам, браузер перекидывает на просмотр страницы вверх, тем самым приходится каждый раз проматывать страницу в браузере вниз.

Если добавить в ссылку #list перед отправкой в функцию, получаем ссылку вида: page.php#list&start=20
что при наличии аргументов в строке не переводит обзор на якорь, а при их отсутствии делает ссылку неработоспособной.

Собственно нужно привести переключение страниц к виду: page.php?start20#list

Можно конечно изменить саму функцию, добавив в неё необязательный аргумент, и прибавлять, при его наличии в конец генерируемой ссылки этот хэштег, но может быть есть способ сделать это не ковыряя саму generate_pagination ?

Добавлено спустя 7 минут 9 секунд:
Так как раздел закрыт для гостей, приложу скрин, для понимания моего вопроса:
85df2cb8d509.jpg
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Хэштег в функции generate_pagination

Сообщение rxu »

Боюсь, что без правки generate_pagination() не обойтись. Ссылки на страницы генерируются только там.
Изображение
velo
phpBB 2.0.1
Сообщения: 252
Стаж: 16 лет 6 месяцев
Благодарил (а): 10 раз
Поблагодарили: 26 раз
Контактная информация:

Re: Хэштег в функции generate_pagination

Сообщение velo »

Собственно, оказалось всё достаточно просто :)

Если кому понадобится, вот новый код ф-ции generate_pagination()

(аргумент при вызове ф-ции можно добавлять с хэшем или без, т.е. '#anchor' и 'anchor' одинаково добавят #anchor в конец строки).

Код: Выделить всё

function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = false, $tpl_prefix = '', $hashtag = '')
{
	global $template, $user;

	// Make sure $per_page is a valid value
	$per_page = ($per_page <= 0) ? 1 : $per_page;

	$seperator = '<span class="page-sep">' . $user->lang['COMMA_SEPARATOR'] . '</span>';
	$total_pages = ceil($num_items / $per_page);

	if ($total_pages == 1 || !$num_items)
	{
		return false;
	}

	if ($hashtag != '')
	{
		$hashtag = (strpos($hashtag, '#') === false) ? '#' . $hashtag : $hashtag;
	}
			
	$on_page = floor($start_item / $per_page) + 1;
	$url_delim = (strpos($base_url, '?') === false) ? '?' : ((strpos($base_url, '?') === strlen($base_url) - 1) ? '' : '&');

	$page_string = ($on_page == 1) ? '<strong>1</strong>' : '<a href="' . $base_url . $hashtag .'">1</a>';

	if ($total_pages > 5)
	{
		$start_cnt = min(max(1, $on_page - 4), $total_pages - 5);
		$end_cnt = max(min($total_pages, $on_page + 4), 6);

		$page_string .= ($start_cnt > 1) ? ' ... ' : $seperator;

		for ($i = $start_cnt + 1; $i < $end_cnt; $i++)
		{
			$page_string .= ($i == $on_page) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . "{$url_delim}start=" . (($i - 1) * $per_page) . $hashtag .'">' . $i . '</a>';
			if ($i < $end_cnt - 1)
			{
				$page_string .= $seperator;
			}
		}

		$page_string .= ($end_cnt < $total_pages) ? ' ... ' : $seperator;
	}
	else
	{
		$page_string .= $seperator;

		for ($i = 2; $i < $total_pages; $i++)
		{
			$page_string .= ($i == $on_page) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . "{$url_delim}start=" . (($i - 1) * $per_page) . $hashtag .'">' . $i . '</a>';
			if ($i < $total_pages)
			{
				$page_string .= $seperator;
			}
		}
	}

	$page_string .= ($on_page == $total_pages) ? '<strong>' . $total_pages . '</strong>' : '<a href="' . $base_url . "{$url_delim}start=" . (($total_pages - 1) * $per_page) . $hashtag .'">' . $total_pages . '</a>';

	if ($add_prevnext_text)
	{
		if ($on_page != 1)
		{
			$page_string = '<a href="' . $base_url . "{$url_delim}start=" . (($on_page - 2) * $per_page) . $hashtag .'">' . $user->lang['PREVIOUS'] . '</a>&nbsp;&nbsp;' . $page_string;
		}

		if ($on_page != $total_pages)
		{
			$page_string .= '&nbsp;&nbsp;<a href="' . $base_url . "{$url_delim}start=" . ($on_page * $per_page) . $hashtag .'">' . $user->lang['NEXT'] . '</a>';
		}
	}
	if ($hashtag != '')
	{
		$template->assign_vars(array(
			$tpl_prefix . 'BASE_URL'		=> $base_url . $hashtag,
			'A_' . $tpl_prefix . 'BASE_URL'	=> addslashes($base_url . $hashtag),
			$tpl_prefix . 'PER_PAGE'		=> $per_page,

			$tpl_prefix . 'PREVIOUS_PAGE'	=> ($on_page == 1) ? '' : $base_url . "{$url_delim}start=" . (($on_page - 2) * $per_page) . $hashtag,
			$tpl_prefix . 'NEXT_PAGE'		=> ($on_page == $total_pages) ? '' : $base_url . "{$url_delim}start=" . ($on_page * $per_page) . $hashtag,
			$tpl_prefix . 'TOTAL_PAGES'		=> $total_pages,
		));	
	}
	else
	{
		$template->assign_vars(array(
			$tpl_prefix . 'BASE_URL'		=> $base_url,
			'A_' . $tpl_prefix . 'BASE_URL'	=> addslashes($base_url),
			$tpl_prefix . 'PER_PAGE'		=> $per_page,

			$tpl_prefix . 'PREVIOUS_PAGE'	=> ($on_page == 1) ? '' : $base_url . "{$url_delim}start=" . (($on_page - 2) * $per_page),
			$tpl_prefix . 'NEXT_PAGE'		=> ($on_page == $total_pages) ? '' : $base_url . "{$url_delim}start=" . ($on_page * $per_page),
			$tpl_prefix . 'TOTAL_PAGES'		=> $total_pages,
		));
	}
	return $page_string;
}
WORK: phpBB3 3.0.8 + Portal XL 5.0 + MODs + Custom,
PHP Version 5.3.3-7+squeeze25, Apache/2.2.9 (Debian), MySQL(i) 5.1.73-1+deb6u1-log
Закрыто

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