Сообщений: 12 Зарегистрирован: 04 Сентября 2011, 21:04:14 Сказали спасибо 0 раз Статус: offline
Опубликовано 04 Сентября 2011, 21:06:58
Собственно суть вопроса: возможно в конце каждой новости выводить ссылки на другие похожие новости по теме, либо просто на рандомные новости? Когда-то давно видел плагин для этих целей, но не могу вспомнить, где именно.
Но как быть если статья ранее была удалена? - получаем дырку.
Либо если находимся на первой либо последней странице - аналогично будет дырка.
Также касательно выборки, возможно ли ее сделать рандомной? Сейчас берем станицы по принципу +1 и -1 от той страницы, где находимся.
100% видел плагин для этих целей около 2 лет назад, но никак не могу его найти.
PS. И этот код работает только на простом фушионе. Под php fusion SF адаптировать его не удалось. Может есть кто знающий, кто поможет сделать? Можно на платной основе.
Сообщений: 1676 Откуда: Киев Зарегистрирован: 18 Ноября 2007, 18:49:13 Сказали спасибо 148 раз Статус: offline
ICQ статус
Опубликовано 06 Сентября 2011, 20:57:33
Вместо page_id='".($_GET['page_id']-1)."' пиши page_id<'".$_GET['page_id']."', и > вместо +1 соответственно - это вывод ссылок на предыдущую и следующие статьи.
Насчет похожих, то можно смотреть как в движке сделан поиск...
если кратко, то титл статьи которую читаем разбиваем на слова, примерный код:
$page_title = "Рада расширила список случаев использования армией оружия в мирное время"; //заголовок статьи которую читаем
$fswords = explode(' ', $page_title);
$swords = array();
for ($i=0;$i<sizeof($fswords);$i++) {
if (strlen($fswords[$i])>=3) { //берем только слова где больше 3 букв, отсеиваются на, в, для, к, от, что, по, из, во и т.д...
$swords[] = $fswords[$i];
}
}
unset($fswords);
далее генерируем строку для запроса
$title = "";
for ($i=0;$i<sizeof($swords);$i++) {
$title .= "page_title LIKE '%".$swords[$i]."%'".($i<sizeof($swords)-1?" OR":"");
}
Сгенерированная строка потом подставляется в запрос.
Так при заголовке статьи "Рада расширила список случаев использования армией оружия в мирное время"
строка будет выглядеть так:
page_title LIKE '%Рада%' OR page_title LIKE '%расширила%' OR page_title LIKE '%список%' OR page_title LIKE '%случаев%' OR page_title LIKE '%использования%' OR page_title LIKE '%армией%' OR page_title LIKE '%оружия%' OR page_title LIKE '%мирное%' OR page_title LIKE '%время%'
Сам запрос будет примерно таким:
$result = dbquery("SELECT * FROM ".$db_prefix."pages WHERE ".$fieldsvar." ORDER BY page_datestamp DESC LIMIT 5");
Ну а далее просто выводим названия страниц
Здесь только пример для заголовка статьи, но можно сделать поиск еще по содержанию статьи
Как пример расматривать можно файл search.php строки 317-391(если ничего неизменилос)
//locales
$l_name = 'Другие новости...';
$l_nonews = '<li>В этой категории нет других новостей.</li>';
//===
$cn_count = 25 ; //max news
$cn_ntrim = 100 ; //reduce news
//===
$news_now = $_GET['readmore'];
$see_cat = 0 ;
$result = dbquery("SELECT news_cat FROM ".DB_PREFIX."news WHERE news_id=$news_now LIMIT 0");
if ($data = dbarray($result)) { $see_cat = $data['news_cat']; }
opentable($l_name);
echo '<ul>';
$result = dbquery("SELECT news_subject,news_id,news_reads FROM ".DB_PREFIX."news WHERE news_cat=$see_cat AND news_id<>$news_now ORDER BY news_datestamp DESC LIMIT $cn_count");
if (dbrows($result)) {
while ($data = dbarray($result)) {
echo "<li><span class='small'>[".$data['news_reads']."]</span> <a href='".BASEDIR."news.php?readmore=".$data['news_id']."' title='".$data['news_subject']."'>".trimlink($data['news_subject'],$cn_ntrim)."</a></li>&qu
ot;;
}
}
else { echo $l_nonews; }
echo '</ul>';
closetable();
}
Вот собственно и всё - будет тебе счастье.
С параметрами:
$cn_count = 25 ; //max news
$cn_ntrim = 100 ; //reduce news
Играйся как считаешь нужным для себя.
Сообщений: 12 Зарегистрирован: 04 Сентября 2011, 21:04:14 Сказали спасибо 0 раз Статус: offline
Опубликовано 16 Сентября 2011, 10:01:50
А каким образом в последнем варианте кода выбираются новости для вывода? Как к примеру в этом варианте сделать вывод 5-ти новостей которые были до той, где мы сейчас находимся?
Сообщений: 12 Зарегистрирован: 04 Сентября 2011, 21:04:14 Сказали спасибо 0 раз Статус: offline
Опубликовано 16 Сентября 2011, 21:19:23
Может кто поможет подправить? В замен могу произвести регистрацию сайта в 2700 каталогах. Если что - связь через эту тему либо ЛС. Или пару USD в качестве благодарности переслать.
Сообщений: 305 Откуда: Киев Зарегистрирован: 23 Декабря 2008, 11:58:57 Сказали спасибо 17 раз Статус: offline
Опубликовано 18 Сентября 2011, 22:31:06
Держи файлом, во избежании каких либо глюков.
Код работает на все 100%
Выводит список только из той категории, в которой просматривается новость.
Выводит по мере убывания.
То есть, свежие новости выше, старые ниже.
Сообщений: 12 Зарегистрирован: 04 Сентября 2011, 21:04:14 Сказали спасибо 0 раз Статус: offline
Опубликовано 25 Сентября 2011, 12:14:39
Все с парсером мучаюсь, может кто поможет? - в замен зарегистрирую сайт в каталогах.
Нужно сам вывод ссылок на новости сделать по схеме:
Вывод двух передних, и трех задних новостей, т.е.:
К примеру находимся на странице:
http://test1.ru/news.php?readmore=500
Соответственно в похожих ссылках выводим:
http://test1.ru/news.php?readmore=501
http://test1.ru/news.php?readmore=502
http://test1.ru/news.php?readmore=499
http://test1.ru/news.php?readmore=498
http://test1.ru/news.php?readmore=497
Как быть в таком случае если находимся на самой первой или самой последней новости?
Если скажем на сайте самая последняя новость имеет адрес:
http://test1.ru/news.php?readmore=500
то тогда «временно» выводить три ссылки на предыдущие новости до тех пор, пока не будут добавлены еще новости.
А если скажем находимся на «первых» новостях:
http://test1.ru/news.php?readmore=1
http://test1.ru/news.php?readmore=2
http://test1.ru/news.php?readmore=3
то тогда выводим 5-ть последующих новостей. (.т.е. что бы не было «дырки»)
Сообщений: 1676 Откуда: Киев Зарегистрирован: 18 Ноября 2007, 18:49:13 Сказали спасибо 148 раз Статус: offline
ICQ статус
Опубликовано 25 Сентября 2011, 13:47:18
То что тебе нужно есть в фотоальбомах...
Старные новости (<500)
$pres = dbquery("SELECT photo_id FROM ".$db_prefix."photos WHERE photo_order='".($data['photo_order']-1)."' AND album_id='".$data['album_id']."'");
Новые новости (>500)
$nres = dbquery("SELECT photo_id FROM ".$db_prefix."photos WHERE photo_order='".($data['photo_order']+1)."' AND album_id='".$data['album_id']."'");
if (dbrows($pres)) $prev = dbarray($pres);
if (dbrows($nres)) $next = dbarray($nres);
если есть старые новости, то выводим их
if (isset($prev)) echo "<td width='1%' class='tbl2'><a href='".FUSION_SELF."?photo_id=".$prev['photo_id']."' title='".$locale['451']."'>название новости</a></td>\n";
если есть новые новости, то выводим их
if (isset($next)) echo "<td width='1%' class='tbl2'><a href='".FUSION_SELF."?photo_id=".$next['photo_id']."' title='".$locale['452']."'>название новости</a></td>\n";
Только надо немного править, данный код выведет только по 1 новости. Ну и название таблиц и полей надо изменить