Здесь совсем немного кода, привожу здесь содержание всех файлов, очень надеюсь, что кто нибудь переделает это дело для применения в сайтах на modx. Обидно, что сниппет [[news]] с содержанием <?php include ("news/index.php");?> нормально вывел ссылки на новости в левой колонке сайта, а вот дальше сделать так чтобы при нажатии на эти ссылки новости открывались где положено в шаблоне никак не получается. Итак поехали:
1. config.php
<?
$NewsGrabberFullTextFile="news/news2.php";
$YourSiteTitle="Бизнес форум";// Название Вашего сайта - будет отображаться в теге TITLE при выводе полного текста новости
$showImg=1;//Отображение картинок в списке новостей. Поставьте 1 если хотите, чтобы картинки отображались и 0 если картинки не нужны
// Тематика новостей
// Раскоментируйте строку с нужной Вам тематикой
//$tema="russia"; // В России
//$tema="world"; // В мире
//$tema="mideast"; // Ближний Восток
//$tema="america"; // Америка
//$tema="economy"; // Экономика
$tema="business"; // Бизнес
//$tema="finance"; // Финансы
//$tema="politic"; // Политика
//$tema="most"; // Масс-Медиа
//$tema="culture"; // Культура
//$tema="kino"; // Кино
//$tema="sport"; // Спорт
//$tema="science"; // Прогресс
//$tema="internet"; // Интернет
//$tema="digital"; // Технологии
//$tema="game"; // Игры
//$tema="mil"; // Оружие
?>
2. full_news.php
<?
if(!isset($date, $det)){exit();}
include("config.php");
// ДЛЯ РАБОТЫ НА СЕРВЕРЕ
$y=date("Y",$date);
$m=date("m", $date);
$d=date("d",$date);
$url="
http://lenta.ru/news/$y/$m/$d/$det/index.htm";
include ("work.php");
$ctrl="$d.$m.$y, ".date("H.i.s", $date);
$begin=strpos($string,"<HEAD>");
$end=strpos($string,"<link");
$head=substr($string,$begin+7,$end-$begin-7);
$head=trim($head);
$head=str_replace("Lenta.ru:","$YourSiteTitle - Новости:",$head);
$head="\n<!-- newsgrabber by
http://coder.nw74.com -->\n".$head."\n";
$begin=strpos($string, "<img src=
http://pix.lenta.ru/news/");
$end=strpos($string,"Ссылки по теме");
$dl=$end-$begin;
$string=substr($string,$begin, $dl);
$string=strip_tags($string,’<img><p><h2>’);
$string=str_replace("<p>","
",$string);
$string=str_replace("<P></P>","",$string);
$string=str_replace("<P class=links>","",$string);
$string=str_replace("<H2>","<H2 class=\"news_zag\">",$string);
$begin=strpos($string,">");
$end=strpos($string, "<H2");
$end=$end-2;
$dl=$end-$begin-8;
$r_str=substr($string, $begin+2, $dl);
$string=str_replace($r_str,"",$string);
$string="<div align=\"center\">".$string;
$string=str_replace("</H2>","</H2></div><div align=\"justify\"",$string);
$string=$string."</div>";
?>
3. work.php
<?
$ch = curl_init();
$timeout = 15; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$string = curl_exec($ch);
curl_close($ch);
?>
4.index.php
<?
include("config.php");
// // Для локального тестирования
// $url="lenta.ru.htm";
// $url="internet.htm";
// $url="game.htm";
// include("../russia/local_testing.php");
// Работа на сервере
$url="
http://www.lenta.ru/".$tema."/";
include("work.php");
// Получение списка новостей
$begin=strpos($string,"</h3>");
$string=substr($string,$begin);
$end=strpos($string,"Все новости за текущее число");
$string=substr($string,0,$end);
// echo htmlspecialchars($string)."
";
$mas=explode("<div class=\"item\">",$string);
// $mas=explode("<p class",$string);
for($i=0; $i<count($mas); $i++)
{
// ОПРЕДЕЛЕНИЕ ССЫЛКИ
$begin=strpos($mas[$i],"<a href=/news/");
$end=strpos($mas[$i],"/>");
$link=substr($mas[$i],$begin+8,($end-$begin)-7);
$mas[$i]=str_replace("
","",$mas[$i]);
$mas[$i]=str_replace("</a>","",$mas[$i]);
$mas[$i]=str_replace("</div>","",$mas[$i]);
$begin=strpos($mas[$i], "<a href=/news/");
$end=strpos($mas[$i],"/>");
$strrep=substr($mas[$i],$begin,($end-$begin));
$mas[$i]=str_replace($strrep,"",$mas[$i]);
$mas[$i]=str_replace("/>","",$mas[$i]);
if($i==0)
{
$begin=strpos($mas[$i],"<div class=\"main-time\">");
$mas[$i]=substr($mas[$i],$begin);
$mas[$i]=str_replace("<div class=\"main-time\">","",$mas[$i]);
$mas[$i]=substr($mas[$i],0,strpos($mas[$i],"полный текст новости"));
$str=substr($mas[$i],11,strpos($mas[$i],"<h2>")-12);
$mas[$i]=str_replace($str,"",$mas[$i]);
$mas[$i]=substr($mas[$i],0,strpos($mas[$i],"</h2>"));
$mas[$i]=str_replace("<h2>","",$mas[$i]);
}
if(strstr($mas[$i],"<img src=
http://img.lenta.ru/news/") and $i>0)
{
$begin=strpos($mas[$i],"<img src=
http://img.lenta.ru/news/");
$end=strpos($mas[$i],">");
$st=substr($mas[$i],$begin,($end-$begin));
$mas[$i]=str_replace($st,"",$mas[$i]);
$mas[$i]=str_replace(">","",$mas[$i]);
}
if(strstr($mas[$i],"</td></tr></table>"))
{
$begin=strpos($mas[$i],"</td></tr></table>");
$mas[$i]=substr($mas[$i],0,$begin);
}
$mas[$i]=str_replace("</TD><TD width=50% valign=top>","",$mas[$i]);
$mas[$i]=str_replace("</TD><TD width=50% valign=top>","",$mas[$i]);
$mas[$i]=iconv(’windows-1251’, ’utf-8’, $mas[$i]);
// echo htmlspecialchars($mas[$i])."
---
--".htmlspecialchars($link)."--
";
$data=substr($link,6,10);
$data=explode("/",$data);
if(isset($data[1], $data[2]))
{
$data=mktime(0,0,0,$data[1],$data[2],$data[0]);
$det=substr($link,16);
$det=str_replace("/","",$det);
$link="$NewsGrabberFullTextFile?date=$data&det=$det";
if(isset($showImg) && $showImg==0){$mas[$i]=strip_tags($mas[$i]);}
echo"<a href=\"$link\"> $mas[$i]</a>
";
}
}
?>
5. проклятый news2.php (чуствую что в нем собака порылась;)
<?php
include("full_news.php");
$head=iconv(’windows-1251’, ’utf-8’, $head);
echo $head;
$string=iconv(’windows-1251’, ’utf-8’, $string);
echo $string;
?>
Гуру помогите пожалуйста адаптировать это дело. Создавал сниппет с содержанием 5 пункта - не работает ни фига. Понятное дело, этот вывод работает только при нажатии на ссылку. Как сделать, чтобы результат по ссылке выводился в шаблон?
Напоследок файл readme.txt
1) Отредактируйте файл config.php
а) Выберите нужную категорию новостей, соответствующую тематике Вашего сайта. Для этого нужно удалить символы // в начале строки (раскомментировать строку). Например, Ваш сайт посвящен играм. Чтобы отображать новости раздела игры необходимо привести строку
//$tema="game"; // Игры
к виду
$tema="game"; // Игры
ВНИМАНИЕ!!! Все остальные строки этого блока должны быть закоментированы
б) Пропишите в переменной $NewsGrabberFullTextFile путь к странице, на которой вы собираетесь выводить полный текст новости относительно главной страницы сайта. Например $NewsGrabberFullTextFile="news.php".
в) Пропишите в переменной $YourSiteTitle название Вашего сайта - оно будет отображаться на странице с полным текстом новости в теге TITLE.
г) Если хотите, чтобы картинки все-таки отображались в списке новостей - измените значение переменной $showImg=0 на $showImg=1.
2) Вставьте в то место страницы, где Вы планируйте отображать список новостей строку :
<? include ("lentaru_newsgrabber/index.php");?>
3) Для отображения тегов title и description в файле, указанном в переменной $NewsGrabberFullTextFile, нужно заменить строки:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
на
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<?
include("lentaru_newsgrabber/full_news.php");
echo $head;
?>
Переменная $head содержит уже сформированные теги title и description
4) Вставьте в то место страницы, где должен отображаться текст новости строку:
<? echo $string;?>
Если все сделано правильно, то на главной странице должен отображаться список новостей на заданную тему, а на странице, указанной в переменной $NewsGrabberFullTextFile должен отображаться полный текст новости.