Технический сбой

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

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


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

вопрос
Решил сделать на сайте раздел аналогичный разделу "Все новости пользователя", но только чтобы он выводил те новости рейтинг которых больше определенного значения. Для этого в файле 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 - -

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

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

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

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

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

rewenas
Юзер

rewenas - -

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

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

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

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

TeraMoune
Эксперт

TeraMoune - -

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

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

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

rewenas
Юзер

rewenas - -

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

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

наверх