Форум программистов, компьютерный форум, киберфорум
DataLife Engine (DLE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/22: Рейтинг темы: голосов - 22, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
1

Рандомный вывод новостей

09.11.2014, 06:10. Показов 4186. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток, дорогие друзья форму CB! Мне очень нужна ваша помощь...
Перейду к делу.
Немного приставим что есть категория в которой N количество новостей и есть блок куда выводятся по 3 новости из этой категории. Вопрос - Как сделать вывод новостей из категории рандомным способом и чтобы эти новости заменялись через N время?

Друзья, я буду искренне признателен кто поможет в этом мне...
Если это сложно и долго, пишите в скайп: Sysarts
Заранее спасибо, друзья!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2014, 06:10
Ответы с готовыми решениями:

Вывод топа новостей
Доброго времени суток! Установил шаблон multifun в котором реализован топ новостей в правом...

Вывод новостей на DLE
Здраствуйте! Можно ли на DLE сделать так, чтобы на главной был блок с 4 категориями и в каждом...

Вывод новостей в Dle
Здравствуйте.Рыл форум и гугл что то не нашел инфы.У меня на Dle 9.7 выводит новости с помощью...

Автоматический вывод популярных новостей
Здравствуйте! Как сделать так чтобы в блоке автоматически выводились новости по наибольшему...

19
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
09.11.2014, 16:23 2
SystemArts,
Нужно модуль вывода новостей полностью перевести на ajax. и изменить запрос к бд.

Сначала, узнать кол-во новостей в таблице, после через функцию mt_rand() сделать выборку.

PHP
1
2
3
$num = $db->query("SELECT id FROM dle_post");
$num = mt_rand($db->num_rows($num));
$db->query("SLECT * FROM dle_post LIMIT ".$num."");
0
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
09.11.2014, 21:07  [ТС] 3
Значит нужно заказывать? Да, я так и думал что тут уже отдельный модуль нужен, а это уже платно.
Простите за тему, надеялся что есть простые решения которых я не знал
Спасибо за ответ!
0
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
10.11.2014, 03:34 4
SystemArts, с модулем могу помочь, недавно делал аналогичное. Помогу бесплатно.
1
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
10.11.2014, 04:56 5
Важно! Модуль должен быть помещен в /engine/ajax/

Код модуля:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
header('Content-Type: text/html; charset=cp1251'); //Если версия DLE UTF-8, эту строку нужно удалить или закомментировать! 
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
 
define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
 
include ENGINE_DIR . '/data/config.php';
 
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';
require_once ENGINE_DIR . '/classes/templates.class.php';
 
dle_session();
 
$cat_id = 1; #Вместо 1 нужно указать ID категории
 
$num = $db->query("SELECT id FROM " . USERPREFIX . "_post");
$to_sel = $db->num_rows($num) - 3;
$news = $db->query("SELECT * FROM " . USERPREFIX . "_post WHERE category = '{$cat_id}' LIMIT ".mt_rand(0,$to_sel).", 3");
$db->free($num);
while($post = $db->get_row($news)){
    
$title = $post['title']; //Название статьи
$date = $post['date']; //Дата
$short = $post['short_story'];//Краткая новость
$author = $post['autor'];//Автор
$name = $post['alt_name'];//Название статьи для ссылки
 
 
$cat = $db->query("SELECT * FROM " . USERPREFIX . "_category WHERE id = '".$post['category']."'");
$cat = $db->get_row($cat);
$cat = $cat['alt_name'];
 
if(isset($config['allow_alt_url']) && $config['allow_alt_url'] == '1') 
    $err = '0';
else 
    $err = '1';
if($err != 0 && $config['seo_type'] == 1)
 $link = '/'.$name;
if($err != 0 && $config['seo_type'] == 2 && $cat['parentid'] != 0){
    $cat1 = $db->query("SELECT * FROM " . USERPREFIX . "_category WHERE id = '".$cat['parentid']."'");
    $cat1 = $db->get_row($cat1);
 $link = $cat['alt_name'].'/'.$cat1['alt_name'].'/'.$name;
}else{
 $link = $cat['alt_name'].'/'.$name;
}
 
 
$story .= '
 
<div class="base shortstory">
    <div class="dpad">
        <h3 class="btl"><a href="'.$link.'">'.$title.'</a></h3>
        <div class="bhinfo">
            <span class="baseinfo radial">
                Автор: '.$author.' от '.$date.'
            </span>
        </div>
        <div class="maincont">
            '.$short.'
            <div class="clr"></div>
        </div>
    </div>
    <div class="mlink">
        <span class="argmore"><a href="'.$link.'"><b>Подробнее</b></a></span>
    </div>
</div>
 
'; //Это шаблон выводимой новости, его нужно сменить на свой!
 
}
 
echo $story;
В main.tpl перед </body> вставить:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script type="text/javascript">
(function($) {
$(function() {
    $.ajax({
url: "/engine/ajax/news3.php",
cache: false,
success: function(html){
$("#news").html(html);
}
        })
    })
})(jQuery)
function timed() {
$.ajax({
url: "/engine/ajax/news3.php",
cache: false,
success: function(html){
$("#news").html(html);
}
})
 
}
setInterval( timed , 60000)
</script>
Можете сразу раскидать файлы news.ajax.zip по папкам.

В main.tpl добавить между тегами <head> </head> добавить:
HTML5
1
<script type="text/javascript" src="{THEME}/js/news.update.jquery.js"></script>

Новости обновляются каждые 60 секунд, чтоб изменить время обновление отредактируйте
Javascript
1
setInterval( timed , 60000)
вместо 60000 укажите нужно вам число(1000 = 1 секунда).

Так же в коде скрипта нужно указать ID категории, из которой будут браться новости.

Для вывода новостей дайте нужному контейнеру ID news, например:
HTML5
1
<div id="news"></div>
1
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
10.11.2014, 06:08  [ТС] 6
Друг! Большое тебе спасибо! Я безумно рад!
Прости конечно, но можно пару фичей добавить в код?
Что нужно:
Вывод изображения, оно выводится но не берется из новости. В начале было - {imag-1}
И можно сделать так, чтобы новости обязательно были на выводе? те, в блоке обязательно было 3 новости.
(естественно если в категории находятся 3 или более новостей).
Еще раз прости за настырность и огромное спасибо!!!

Добавлено через 11 минут
p.s. Почему-то не перелинковывается на полную новость. ссылка получается в виде - домен/a/test-tovar
0
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
10.11.2014, 20:27 7
Цитата Сообщение от SystemArts Посмотреть сообщение
чтобы новости обязательно были на выводе? те, в блоке обязательно было 3 новости.
(естественно если в категории находятся 3 или более новостей).
В смысле, если в одной категории меньше чем 3 новости, то выводить из другой?

Добавлено через 23 минуты
Или же выводить из всех категорий?
0
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
10.11.2014, 21:19  [ТС] 8
Нет, нет, какие категории указаны из таких и нужно. Просто, иногда новостей нет, иногда они по 2 и даже по одной выводятся, нужно минимальное количество вывода 3 новости.
0
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
10.11.2014, 23:43 9
Лучший ответ Сообщение было отмечено SystemArts как решение

Решение

SystemArts, обновил код, исправил недочеты. news.ajax.zip

Не по теме:

Появятся вопросы, модернизировать скрипт, буду рад помочь. Если нужны будут другие модули пишите в лс.

1
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
11.11.2014, 00:05  [ТС] 10
N3stY, Хороший вы человек. Спасибо большое!
0
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
11.11.2014, 00:28 11
SystemArts, был рад помочь
1
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
11.11.2014, 03:16 12
стандартые функции дле не в теме уже?
параметр order="rand" limit="3" через custom тоже вариант

Кликните здесь для просмотра всего текста
order порядок сортировки новостей, может принимать следующие значения:

date - сортировка новостей по дате
rating - сортировка новостей по рейтингу
reads - сортировка новостей по количеству просмотров
comments - сортировка новостей по количеству комментариев
title - сортировка новостей по заголовкам новостей
rand - сортировка новостей в случайном порядке
1
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
11.11.2014, 03:22  [ТС] 13
Тоже тема. Я не знал об этом. И тебе, друг спасибо!
0
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
11.11.2014, 03:26 14
Официальная документация DLE поможет тебе еще не раз))
1
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
11.11.2014, 03:54  [ТС] 15
Помогает во многом, но я не подумал, что все же есть фича рандомного вывода...
0
(ノಠ益ಠ)ノ彡┻━┻
152 / 152 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
11.11.2014, 06:11 16
temkasky,
Этот метод не AJAX, и не обновляется пока не обновить страницу.
1
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
11.11.2014, 06:36 17
Да знаю я что не ajax)
Суть та в чем была?) что бы новости случайным образом выводились. Пользователь в любом случае больше чем на минуту-две на странице не задерживается. В итоге, контент будет меняться.

Ваш скрипт безусловно хорош! Ничего против вас не имею)
Просто зачем строить велосипед, если за тебя его уже придумали разработчики cms)
Я сторонник чистоты - меньше левого кода, лучше.
0
N3stY
11.11.2014, 06:43
  #18

Не по теме:

temkasky, ну велосипеды я и сам не приветствую, переписывать готовое и подгонять под нужные параметры затруднительно (смотря что писать:) ), но ТС хотел AJAX

Цитата Сообщение от SystemArts Посмотреть сообщение
сделать вывод новостей из категории рандомным способом и чтобы эти новости заменялись через N время?
Постарался выполнить все критерии :)

Допустим, длинная статья или большой выбор товаров в и-нет магазине, пока пользователь смотрит инфу, этот блок себе обновляет инфу спокойненько, и вдруг там появляется интересующая этого пользователя инфа, он радуется и жмякает на нее.
В итоге пользователь нашел что нужно, потратив меньше времени на поиски. Вот мое ИМХО на этот счет.

0
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
11.11.2014, 06:46 19
Полностью с вами согласен)
Так может вы и мне поможете?) тут
0
2 / 2 / 0
Регистрация: 09.11.2014
Сообщений: 11
11.11.2014, 14:28  [ТС] 20
Ребят, вы оба молодцы! Я узнал много нового
Скрипт я поставлю на один сайт, а метод с кастом на другой
2
11.11.2014, 14:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2014, 14:28
Помогаю со студенческими работами здесь

Не могу отредактировать вывод новостей
Я хочу вывести список анонсов в два столбца, и что бы в первом столбце были анонсы еще не...

Вывод новостей только из одной категории
Как в сайдбаре, в части &quot;популярное&quot; настроить вывод новостей только из категории &quot;1 Сезон&quot;....

Вывод ссылок на категории новостей и заголовка
Доброго времени суток! Дело в том, что я сейчас верстаю сайт на DLE, и этот сайт мой второй на...

Вывод новостей в определенную часть страницы
Как создать новости? Что нужно сделать, чтобы заставить их выводиться где мне надо?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru