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

Параметр "сортировка по дате создание темы" в поиске

Проблемы с установкой или работой phpBB 3.1.x? Получите помощь здесь!
С 1 июля 2018 года phpBB Group прекращает поддержку phpBB версии 3.1.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.1 до 1 января 2019 года.
Подробнее: Окончание поддержки phpBB 3.1.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Параметр "сортировка по дате создание темы" в поиске

Сообщение Alecto »

Что-то не получается...
Пытаюсь вычислить параметр сортировки тем в поиске, упорядочивающий их по дате создания, а не ответа.
Пробовал через расширенный поиск, Показывать результаты как: темы, Поле сортировки: время размещения - они все равно сортируются по ответам.
Собственно нужен сам параметр сортировки а не перенастройка поиска.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Sheer »

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

ORDER BY  topic_time
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Alecto »

сорри, не уточнил.
мне не для SQL запроса надо, а в адрес поиска search.php?search_id=egosearch&sr=topics&sf=firstpost надо добавить параметр, чтобы найденные темы сортировались по времени создания, а они сейчас упорядочены по времени последнего ответа.
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2209
Стаж: 16 лет 4 месяца
Откуда: Павлодар
Благодарил (а): 5 раз
Поблагодарили: 153 раза

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение nissin »

Нужно написать расширение использующее следующее событие:

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

	/**
	* Event to modify the SQL parameters before pre-made searches
	*
	* @event core.search_modify_param_before
	* @var	string	keywords		String of the specified keywords
	* @var	array	sort_by_sql		Array of SQL sorting instructions
	* @var	array	ex_fid_ary		Array of excluded forum ids
	* @var	array	author_id_ary	Array of exclusive author ids
	* @var	string	search_id		The id of the search request
	* @since 3.1.3-RC1
	*/
Всё повторяется. nurlan.info
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Sheer »

... и использовать $event['sort_by_sql']
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Alecto »

вот так формируется адрес для поиска, но как приделать советуемое - не знаю, примеров не нашел.

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

	public function page_header_after($event)
	{
		$this->template->assign_vars(array(
			'USER_TOPICS_OWN_LINK'   => append_sid("{$this->phpbb_root_path}search.$this->php_ext", 'search_id=egosearch&sr=topics&sf=firstpost'),
			        ));
	}
Добавлено спустя 1 минуту 41 секунду:
нашел вот такой пример

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

		$sort_by_sql = array('a' => 'u.username_clean', 't' => (($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time'), 'f' => 'f.forum_id', 'i' => 't.topic_title', 's' => (($show_results == 'posts') ? 'p.post_subject' : 't.topic_title'));
чего с ним делать? заново собирать поисковый запрос? или можно добавить параметр к существующему в строке?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12446
Стаж: 12 лет 8 месяцев
Благодарил (а): 166 раз
Поблагодарили: 2479 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Татьяна5 »

Добавить ещё один элемент к существующему массиву (это не строка)
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Alecto »

нашел еще такие варинты, но ясности они ни грамма не внесли

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

	$sort_by_sql['t'] = 't.topic_last_post_time';
	$sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
	$sort_by_sql['s'] = ($show_results == 'posts') ? 'p.post_subject' : 't.topic_title';
так можно сделать?

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

$sort_by_sql['t'] = 't.topic_first_post_time';
и что с ним делать? или я таким образом уже меняю сортировку SQL запроса?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Sheer »

Если в коде своего расширения меняешь $event['sort_by_sql'] то да.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Alecto »

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

    public function page_header_after($event)
    {
        $sort_by_sql = $event['sort_by_sql'];
        $sort_by_sql['t'] = 't.topic_first_post_time';
        $this->template->assign_vars(array(
            'USER_TOPICS_OWN_LINK'   => append_sid("{$this->phpbb_root_path}search.$this->php_ext", 'search_id=egosearch&sr=topics&sf=firstpost'),
                    ));
        $event['sort_by_sql'] = $sort_by_sql;
    }
 
ничего лучше не сообразил.
по крайней мере ошибок дебагер не выдал.
хотя сортировка не изменилась.
Последний раз редактировалось Sheer 20.03.2015 23:17, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Sheer »

$sort_by_sql - строка, а не массив.

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

$sort_by_sql = 't.topic_first_post_time';
Да и sf=firstpost перебъет я думаю.

Зы. В бб-коде

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

 работает [code=php]
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Alecto »

заменил массив на ваш вариант

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

        $sort_by_sql = 't.topic_first_post_time'; 
выкинул из адресной строки, формируемой в функции

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

&sf=firstpost
- другая сортировка получилась, но на $sort_by_sql не реагирует, даже если убрать эту строку.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Sheer »

Фиг знает, надо код смотреть.

Отправлено спустя 4 минуты 17 секунд:
Sheer писал(а): строка, а не массив
Пардон, соврамши... массив

Отправлено спустя 3 минуты 53 секунды:
Хотя вот так

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

$sort_by_sql['t'] = 't.topic_first_post_time';
ты его меняешь, а надо дополнить.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 9 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Параметр "сортировка по дате создание темы" в поиске

Сообщение Алг »

Alecto писал(а): ничего лучше не сообразил.
по крайней мере ошибок дебагер не выдал.
хотя сортировка не изменилась.
ошибки в синтаксисе нет, поэтому дебаггер и не выдал. Но какой эффект ты хотел получить, вставляя строку

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

$event['sort_by_sql'] = $sort_by_sql; 
в событие page_header_after?

Отправлено спустя 2 часа 24 минуты 2 секунды:
Итак, в этих решениях минус на минус и ещё раз на минус почему-то не дал плюс
1. Надо изменить порядок сортировки ( по умолчанию для топиков идёт DESC
В строку формирования адреса добавить 2. Надо изменить поле сортировки, причем предложенного поля topic_first_post_time в природев таблице топиков не существует, будем исходить из того, что есть
строка в событии page_header_after

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

$event['sort_by_sql'] = $sort_by_sql;
, как я уже писала, не будет работать. Ты просто расширил ассоциативный массив $event, присвоив новый ключ. Как его обрабатывать движок не знает и просто проигнорирует
Для решения нашей задачи нужно подписаться на другое событие

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

            'core.search_modify_param_before'         => 'search_modify_param_before',
и определить функцию

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

    public function search_modify_param_before($event)
    {
        $topic_sort =$this->request->variable('sf','all');
        if ($topic_sort != 'firstpost')
        {
            return;
        }
        $sort_by_sql = $event['sort_by_sql'];
        $sort_by_sql['t'] = 't.topic_time';
        $event['sort_by_sql'] = $sort_by_sql;
    }
и вуаля
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов

Вернуться в «Поддержка phpBB 3.1.x»