Страница 3 из 6

View all posts in Topic

Добавлено: 17 авг 2014, 21:36
Татьяна5
rxu, там событий выше нужной строки нет

View all posts in Topic

Добавлено: 17 авг 2014, 21:51
rxu
Татьяна5, просто неясно, почему именно такое место расположения

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

// Make sure $start is set to the last page if it exceeds the amount
Ощущение, что случайно выбрано, тем более, что $config['posts_per_page'] первый раз встречается выше, в строке 366.
Давайте посмотрим на выбор места получше, чтобы и для других задач было применимо.

View all posts in Topic

Добавлено: 17 авг 2014, 22:02
HAMMER663
Вот в эту функцию validate_start нельзя событие как-то добавить? Конечно это конкретно под данный случай. В общем я пока еще не до конца разобрался с этими событиями :oops:

View all posts in Topic

Добавлено: 17 авг 2014, 22:48
rxu
Пока смотрю, может, и без доп. события как-то обойтись. @pagination должно быть возможно подключить сервисом, тогда можно переопределить всё, что нужно, в существующих событиях.

View all posts in Topic

Добавлено: 17 авг 2014, 23:23
rxu
В config/services.yml добавьте

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

            - @pagination
далее в список параметров конструктора в слушателе (соблюдаем тот же порядок, что и в конфиге)

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

\phpbb\pagination $pagination
и там же в конструкторе присваиваем

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

$this->pagination = $pagination;
После этого в слушателе можно переопределять и сам $start, и его валидатор вот так

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

$start = $this->pagination->validate_start($start, $this->config['posts_per_page'], $total_posts);
ну и параметр конфигурации тоже

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

$this->config['posts_per_page'] = 200;
Главное - выбрать правильное событие, возможно, core.viewtopic_get_post_data подойдет. Хотя, к этому моменту список постов уже отобран. Возможно, действительно нужно более раннее событие. Например, сразу после

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

// Go ahead and pull all data for this topic
$sql = 'SELECT p.post_id
	FROM ' . POSTS_TABLE . ' p' . (($join_user_sql[$sort_key]) ? ', ' . USERS_TABLE . ' u': '') . "
	WHERE p.topic_id = $topic_id
		AND " . $phpbb_content_visibility->get_visibility_sql('post', $forum_id, 'p.') . "
		" . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . "
		$limit_posts_time
	ORDER BY $sql_sort_order";

View all posts in Topic

Добавлено: 18 авг 2014, 10:21
Татьяна5
rxu писал(а):Ощущение, что случайно выбрано
Это из инструкции к моду
Подходит любое место с 405 (чуть выше рассчитывается $total_posts) до 604 строки (605 - генерируется пагинация)

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

$pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_posts, $config['posts_per_page'], $start);
rxu писал(а):Например, сразу после

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

// Go ahead and pull all data for this topic
$sql = 'SELECT p.post_id
   FROM ' . POSTS_TABLE . ' p' . (($join_user_sql[$sort_key]) ? ', ' . USERS_TABLE . ' u': '') . "
   WHERE p.topic_id = $topic_id
      AND " . $phpbb_content_visibility->get_visibility_sql('post', $forum_id, 'p.') . "
      " . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . "
      $limit_posts_time
   ORDER BY $sql_sort_order";
964 строка, на пагинацию то событие не повлияет (или её можно заново сгенерировать в слушателе?)

View all posts in Topic

Добавлено: 18 авг 2014, 11:09
rxu
Думаю можно генерировать, через объект pagination, о чем я писал выше.

View all posts in Topic

Добавлено: 18 авг 2014, 15:17
rxu
Если у кого-то есть возможность проверить это - проверьте плиз, я пока не смогу.
если сработает - сделаю ПР на событие.

View all posts in Topic

Добавлено: 18 авг 2014, 15:34
HAMMER663
Дома вечером смогу проверить

View all posts in Topic

Добавлено: 18 авг 2014, 18:34
HAMMER663
Сервис - @pagination я вставил, но мод отказывается работать.