Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Почему не корректно работает навигация по страницам созданного раздела?

Почему не корректно работает навигация по страницам созданного раздела?


     12.12.2022    навигация, запрос в бд, ошибка    Общие вопросы, Общие вопросы по PHP, MySQL    546

вопрос
Решил сделать на сайте раздел аналогичный разделу "Все новости пользователя", но только чтобы он выводил те новости рейтинг которых больше определенного значения. Для этого в файле engine/engine.php сделал следующие действия:

1 Найти и добавить ниже
 elseif ($do == 'lastnews') $nam_e = $lang['last_news']; 

 elseif ($do == 'allpopular') $nam_e = "Все новости пользователя ". $user." в топе"; 


2 Найти и добавить выше
 elseif ($subaction == 'allnews') { 

 elseif ($subaction == 'allpopular') {
												
			if ($cstart) {
				$cstart = $cstart - 1;
				$cstart = $cstart * $config['news_number'];
			}
			
			$url_page = $config['http_home_url'] . "user/" . urlencode ( $user ) . "/news-popular";
			$user_query = "subaction=allpopular&user=" . urlencode ( $user );
			
			if( $config['allow_alt_url'] ) $canonical = $url_page . "/"; else $canonical = $PHP_SELF."?subaction=allpopular&user=" . urlencode ( $user );
			
			if ($view_template == "rss") {
				
				$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name, e.allow_rss_turbo, e.allow_rss_dzen FROM " . PREFIX . "_post p {$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}p.autor = '{$user}' AND p.approve=1 AND e.allow_rss=1" . $where_date . " ORDER BY date DESC LIMIT 0," . $config['rss_number'];
			
			} else {
				
				if (isset ( $_SESSION['dle_sort_allnews'] )) $news_sort_by = $_SESSION['dle_sort_allnews'];
				if (isset ( $_SESSION['dle_direction_allnews'] )) $news_direction_by = $_SESSION['dle_direction_allnews'];
				
			$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p {$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}p.autor = '$user' AND p.approve=1 AND e.rating>250 " . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];  
                        $sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON ( p.id = e.news_id ) {$cat_join_count}WHERE {$stop_list}autor = '$user' AND approve=1 AND e.rating>250 ";
              
			}

} 


3 Добавил в файл .htaccess
 RewriteRule ^user/([^/]*)/news-popular(/?)+$ index.php?subaction=allpopular&user=$1 [L]
RewriteRule ^user/([^/]*)/news-popular/page/([0-9]+)(/?)+$ index.php?subaction=allpopular&user=$1&cstart=$2 [L]


Все работает. Ну почти все. Раздел allpopular есть и в нем выводятся те статьи пользователя которые удовлетворяют условию рейтинга. Но почему то: title у созданной страницы не отображается и не совсем корректно работает навигация по страницам, а именно: Если число новостей на страницу заданное в админ панеле равно например 2, а количество новостей удовлетворяющим условиям выборки равно например 5. То на первые 2 страницы можно перейти, а на третью нет ( подозреваю это происходит из за того что новость для показа на третьей странице остается одна, а в настройках кол-во новостей на странице стоит 2 Если новостей в выборке получается например 6 то мы спокойно попадаем на все 3 страницы.) В разделе сайта DLE из коробки, который я брал за пример, например allnews все работает корректно. Но вот почему так происходит? Где я что забыл? Всю голову уже себе сломал. Дайте пожалуйста наводку хотя бы в чем может быть тут дело?

Ответил: rewenas


В данном вопросе помог разобраться TeraMoune

4 комментария

TeraMoune
Эксперт

TeraMoune - 13 декабря 2022 05:31 -

Но почему то: title у созданной страницы не отображается

Ну так в "index.php?subaction=allpopular&user=$1" нету никаких параметров do. Тут есть только subaction. Вот у условия и должен проверятся subaction.

подозреваю это происходит из за того что новость для показа на третьей странице остается одна, а в настройках кол-во новостей на странице стоит 2 Если новостей в выборке получается например 6 то мы спокойно попадаем на все 3 страницы.

В чём-то другом, через плагины делается ?

Тестовый репозиторий установки плагинов: teramoune

rewenas
Юзер

rewenas - 13 декабря 2022 13:18 -

В чём-то другом, через плагины делается ?

Да делал все через плагины. Лишь только правки в .htaccess вносил напрямую. Странность какая то, статьи нужные условию в запросе есть и выводятся, навигация есть и количество страниц верно, а на последнюю страницу не хочет переходить, если кол-во новостей не кратно числу заданному в админке.

Тут есть только subaction. Вот у условия и должен проверятся subaction.

Моя не внимательность. И вроде же всё 10 раз пересмотрел. Но изменил все так же не выводит. Походу еще что то есть. Буду дальше смотреть

TeraMoune
Эксперт

TeraMoune - 13 декабря 2022 19:12 -

Странность какая то

А не забыл ли посчитать количество найденных строк ? И проставить сколько раз и какой позиции будет происходить изменение. Так-то elseif ($subaction == 'allnews') { встречается в файле 3 раза.

Тестовый репозиторий установки плагинов: teramoune

rewenas
Юзер

rewenas - 14 декабря 2022 00:46 -

А вот этот момент я как раз и не учел! Действительно никакой странности, когда важна последовательность. Спасибо за подсказку! Напиши пожалуйста еще раз свой яндекс кошелек. Можно в личку.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх