Перейти к содержимому



Код вывода случайных новотей

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 18 Апрель 2009 - 13:38

Помогите переделать скрипт вывода случайных новостей =) Вот часть кода:

$lastnewsconf['news'] = 200; // Длина новости
$lastnewsconf['link'] = 30; // Обрезание титла новостей
$lastnewsconf['limit'] = 2; // Количество новостей
$lastnewsconf['hide_html'] = true;// Уберать все теги из текста новости (true - да, false - нет)
$lastnewsconf['only_hide_main'] = true;// Показывать только новости не опубликованые на главной (true - да, false - нет)
$lastnewsconf['category'] = ''; // Показывать категории, перечислите ID категорий через запятую без пробелов. Если нужно показвать все оставте поле пустым

$lastnews = dle_cache("randnews", $config['skin']);  //кешируем вывод

if (!$lastnews) {
//include(ENGINE_DIR.'/inc/parse.class.php'); //подключаем парсер
//$parse = new ParseFilter(Array(), Array());

if ($lastnewsconf['only_hide_main']) //нужно ли  Показывать только новости не опубликованые на главной
   $ln_allow_main = 'and allow_main=0';
else
   $ln_allow_main = '';

if ($lastnewsconf['category'])
   $ln_category = 'and category = '. str_replace(',',' or ', $lastnewsconf['category']);
else
   $ln_category = '';
$tpl->load_template('randnews.tpl'); //грузим шаблон
   
//меняем наш запрос и добавляем к нему рандомную функцию вывода из бд
	 $sql_result = $db->query ("SELECT *  FROM ". PREFIX . "_post WHERE approve='1' $ln_allow_main $ln_category ORDER BY rand()   LIMIT {$lastnewsconf['limit']}"); //rand() отвечает за случайный вывод
 while ( $row = $db->get_row ( $sql_result )) //выводим результат

Мне надо что бы выводило новости со всех категорий, кроме определённых, например кроме: 33,32,34,38,41. Как это сделать? У меня DLE 7.0

 

 

  • 0


#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Апрель 2009 - 18:06

$lastnewsconf['news'] = 200; // Длина новости
$lastnewsconf['link'] = 30; // Обрезание титла новостей
$lastnewsconf['limit'] = 2; // Количество новостей
$lastnewsconf['hide_html'] = true;// Уберать все теги из текста новости (true - да, false - нет)
$lastnewsconf['only_hide_main'] = true;// Показывать только новости не опубликованые на главной (true - да, false - нет)
$lastnewsconf['category'] = array(); // Не показывать категории, перечислите ID категорий в массиве. Если хотите выводить из всех категорий, оставьте массив пустым.

$lastnews = dle_cache("randnews", $config['skin']);  //кешируем вывод

if (!$lastnews) {
//include(ENGINE_DIR.'/inc/parse.class.php'); //подключаем парсер
//$parse = new ParseFilter(Array(), Array());

if ($lastnewsconf['only_hide_main']) //нужно ли  Показывать только новости не опубликованые на главной
   $ln_allow_main = 'and allow_main=0';
else
   $ln_allow_main = '';

if (isset($lastnewsconf['category']) && count($lastnewsconf['category']) > 0)
   $ln_category = "AND category NOT in(".implode(",", $lastnewsconf['category']);
else
   $ln_category = '';
   $tpl->load_template('randnews.tpl'); //грузим шаблон
  
//меняем наш запрос и добавляем к нему рандомную функцию вывода из бд
	 $sql_result = $db->query ("SELECT *  FROM ". PREFIX . "_post WHERE approve='1' {$ln_allow_main} {$ln_category} ORDER BY rand()   LIMIT {$lastnewsconf['limit']}"); //rand() отвечает за случайный вывод
while ( $row = $db->get_row ( $sql_result )) //выводим результат
Я изменил всего пару строчек:
$lastnewsconf['category'] = array(); // Не показывать категории, перечислите ID категорий в массиве. Если хотите выводить из всех категорий, оставьте массив пустым.
и
if (isset($lastnewsconf['category']) && count($lastnewsconf['category']) > 0)
   $ln_category = "AND category NOT in(".implode(",", $lastnewsconf['category']);

  • 0

#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 21 Апрель 2009 - 16:01

Если код будет выглядеть так, то статьи из категорий 33,32,34,38,41 не будут выводиться на сайте?
....
$lastnewsconf['category'] = array(33,32,34,38,41); // Не показывать категории, перечислите ID категорий в массиве. Если хотите выводить из всех категорий, оставьте массив пустым.
....
if (isset($lastnewsconf['category']) && count($lastnewsconf['category']) > 0) // если $lastnewsconf['category'] существует и число $lastnewsconf['category'] больше за 0, то что дальше?
   $ln_category = "AND category NOT in(".implode(",", $lastnewsconf['category']);
else
   $ln_category = '';
   $tpl->load_template('randnews.tpl'); //грузим шаблон
.....

Ещё вопрос к этой строчке:
if (isset($lastnewsconf['category']) && count($lastnewsconf['category']) > 0) // если $lastnewsconf['category'] существует и число $lastnewsconf['category'] больше за 0, то что дальше?
???
  • 0


#4 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 08 Май 2009 - 21:31

Хочу сделать рандомный вывод новостей. Точнее вот такое: есть новости с ID допустим 6, 8, 3, 4. Хочу сделать скрипт для вывода одной рандомной новости. С БД пока не работал, но думаю что скрипт очень даже легкий, и будет работать примерно так:
1) делает запрос в БД за новостями, типа
$bd = query (взять с той-то категории, краткие новости, с ИД: 6,8,3,4 );
2) С масива с этими новостями выбирает рандомно 1 из них
$bd = array(6,8,3,4); 
$r_new = $bd Rand();
3) выводит одну выбранную на сайте
echo "$r_new"

Написал куча бреда, звиняйте(((
Самое сложное пока это сделать правильно запрос. Может кто наведет примеры как делают запрос в ДЛЕ или как сделать запрос к категории, или что указывать в запросе?
  • 0


#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Май 2009 - 23:29

Banderas, запрос будет вида
SELECT * FROM `table` ORDER BY RAND() LIMIT 6

Выбрать 6 записей из таблицы table отсортированных в рандомном порядке.

Это значит, что у тебя к примеру в базе есть 1000 записей, данный запрос просто случайным образом их отсортирует и заберёт только первые 6.
  • 0

#6 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Май 2009 - 09:03

нет, мне надо определённые. А именно 623, 612, 611, 608, 607, 605. Может сделать типа такого?
$id = array(623, 612, 611, 608, 607, 605);
$bd = query (SELECT * FROM `table` $id)

  • 0


#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 10 Май 2009 - 14:40

Тогда уж так:
$id = array(623, 612, 611, 608, 607, 605); // есть массив
$id = implode(',', $id); // сливаем всё в одну строку через запятую.
$bd = query ("SELECT * FROM `table` id IN({$id})");

  • 0


Оформление форума – IPBSkins.ru