Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Шаблоны (TPL) » Как вывести все новости на одной странице и отсортировать их по популярности?

Как вывести все новости на одной странице и отсортировать их по популярности?


     08.01.2019    Шаблоны (TPL), Ламерские вопросы    149

вопрос
Доброго времени суток!
На главной странице есть блок, в который при помощи {custom} выводятся несколько популярных новостей. Рядом с блоком есть кнопка "Показать еще". Задача состоит в том, чтобы по нажатию этой кнопки у меня открывалась страница с перечнем всех новостей, отсортированных по популярности. Кроме того, необходимо, чтобы был не просто условный "топ 100" популярных новостей, а все новости, разделенные страницами. Нужно что-то вроде /lastnews, но я не знаю, как создать подобную страницу.
Как это сделать? Прошу вашей помощи.

Ответил: Videohom


Показать еще

В админке: Настройка системы / Настройки вывода новостей / Критерий сортировки при просмотре каталога / тут выбираем нужный критерий сортировки.

Если я правильно вас понял.

6 комментариев

futbik
Юзер

futbik - 8 января 2019 03:10 -

[static=имя страницы]{custom template="имя шаблона" available="static" navigation="yes" from="0" limit="10" order="reads" sort="desc" cache="yes"} [/static]

Добавь на любую статическую страницу.

https://dle-news.ru/extras/online/index.html?all2.html

hoaken
Юзер

hoaken - 8 января 2019 19:43 -

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

mayflowerr
Юзер

mayflowerr - 8 января 2019 21:08 -

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

В файл engine.php после блока с кодом генерации lastnews добавил аналогичный блок, заменив все названия на необходимые мне, и заменив метод сортировки:
elseif ($do == 'popular') {
			// ################ Show popular #################
		            $StopCat = "33,9";
            if ($StopCat) {            
                $StopCat = explode(",",$StopCat);
                if ($config['allow_multi_category']) {                    
                    $stop_list = "NOT category regexp '[[:<:]](" . implode ( '|', $StopCat ) . ")[[:>:]]' AND ";                
                } else {                    
                    $stop_list = "NOT category IN ('" . implode ( "','", $StopCat ) . "') AND ";                
                }            
            }

			if ($cstart) {
				$cstart = $cstart - 1;
				$cstart = $cstart * $config['news_number'];
			}

			if( $config['allow_alt_url'] AND $config['seo_control'] AND $_GET['cstart'] ) {
	
				if (substr ( $_SERVER['REQUEST_URI'], - 1, 1 ) != '/' OR $_GET['cstart'] == 1 ) {

					$re_url = explode ( "index.php", strtolower ( $_SERVER['PHP_SELF'] ) );
					$re_url = reset ( $re_url );
						
					$re_url .= "popular/";
						
					if(substr ( $_SERVER['REQUEST_URI'], - 1, 1 ) != '/' AND $_GET['cstart'] != 1 ) {
						$re_url .= "page/".intval($_GET['cstart'])."/";
					}
					
					header("HTTP/1.0 301 Moved Permanently");
					header("Location: {$re_url}");
					die("Redirect");
				}
			}
				
			$url_page = $config['http_home_url'] . "popular";
			$user_query = "do=popular";
			$metatags['description'] = "Популярные новости";
            $metatags['keywords'] = "Популярные, новости";
            $metatags['title']= "Популярные новости";
			
			if( $config['allow_alt_url'] ) $canonical = $url_page . "/"; else $canonical = $PHP_SELF."?do=popular";
			
			if (isset ( $_SESSION['dle_sort_popular'] )) $news_sort_by = $_SESSION['dle_sort_popular'];
			else $news_sort_by = "rating";
			if (isset ( $_SESSION['dle_direction_popular'] )) $news_direction_by = $_SESSION['dle_direction_populars'];
			else $news_direction_by = "DESC";
			
			$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 LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}approve=1 " . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
			$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}approve=1" . $where_date;		
		}

Туда же прикрутил сортировку по нужным мне категориям и добавил заголовки и ключевые слова.

Все то, что мне и требовалось, но возникла новая проблема:
При переходе на новую страницу ссылка меняется с сайт.ру/?do=popular на сайт.ру/popular/page/2/ и выдает ошибку, что страница не найдена. Пытаюсь сделать так же, как и lastnews (там ошибок нет), но не знаю где и что искать.

mayflowerr
Юзер

mayflowerr - 8 января 2019 21:38 -

Проблема решена.
В файл .htaccess добавил
RewriteRule ^popular(/?)+$ index.php?do=popular [L]
RewriteRule ^popular/page/([0-9]+)(/?)+$ index.php?do=popular&cstart=$1 [L]

Videohom
Юзер

Videohom - 9 января 2019 13:52 -

<a href="/index.php?do=lastnews" title="Все новости сайта">Показать еще</a>

В админке: Настройка системы / Настройки вывода новостей / Критерий сортировки при просмотре каталога / тут выбираем нужный критерий сортировки.

Если я правильно вас понял.

mayflowerr
Юзер

mayflowerr - 9 января 2019 21:04 -

Не правильно. Дело было не в ссылке на страницу, а в создании самой страницы (не статической, что очень важно). Я уже разобрался и описал свои действия выше.

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

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

наверх