Здравствуйте дорогой читатель Блога RS! В прошлом посте мы писали функцию генерации rss файла. Сегодня же мы прикрутим этот генератор к нашей админ панели, что позволит одним щелчком мыши разместить новый пост в rss ленте. По сути у нас уже все готово, осталось немного подредактировать некоторые функции и обработчик.
Как обычно, хочу сказать пару слов для тех, кто пришел на мой блог в первые. Этот пост, как и большинство на этом блоге, является продолжением глобального цикла статей "Создать блог с нуля". Я описываю метод написание движка, если быть точнее пишу его вместе с Вами, и уже руки чешутся его поставить, и писать Вам посты уже из новой админ панели . Так вот, если Вы хотите научится на практике писать свой проект на php, видеть живой пример реализации нужного функционала на Вашем самописном сайте, то Вы попали туда куда нужно Переходите по ссылке выше и приступайте к изучению написанного мной материала. Я стараюсь пояснять каждую строчку написанного мной кода, и если что с удовольствием отвечу на Ваш вопрос, даже если он ( вопрос ) из ряда "что такое php?" или "что такое сайт?"
Если я Вас заинтриговал, то подпишитесь на RSS ленту блога через ридер, или же по почте.
Как видите сегодня много думать не придется
Открываем файл rss.php копируем функцию, и вставляем ее в файл, в самый низ, configpost.php. Вот полный код функции, с уже отредактированным путем к файлу
function rss($site)
{
$rssHEADER = mysql_query("SELECT * FROM page WHERE id='1'");//Вытаскиваем инфу о сайте
$myrowHEADER = mysql_fetch_array($rssHEADER);
//формируем шапку
$header = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n<rss version=\"2.0\">\n\t<channel>\n\t\t<title>".$myrowHEADER[title]."</title>\n\t\t<link>".$site."</link>\n\t\t<description>".$myrowHEADER[meta_d]."</description>\n\t\t<language>ru-ru</language>\n";//Шапка xml документа
$rssRESULT = mysql_query("SELECT id,date_b,title,text FROM blog WHERE rss='1' ORDER BY id DESC LIMIT 5");//Вытаскиваем 5 постов из БД
$myrow = mysql_fetch_array($rssRESULT);
if($myrow != "")//если есть посты которые нужно поместить в rss ленту
{
do
{
//приобразуем дату из БД в вид ГГГГ-ММ-ДД ( у нас в БД вот такой вид ДД/ММ/ГГГГ ЧЧ:ММ )
$datePOST = explode(" ",$myrow[date_b]);//делим дату на массив. В первом элементе массива будет ДД/ММ/ГГГГ а во втором ЧЧ:ММ
$dateMS = $datePOST[1];//сохраняем минуты и сек в отдельной переменной
$datePOST = explode("/",$datePOST[0]);//Делим первый элемент массива на другой массив. В новом массиве будет 3 элемента. Первый содержит ДД, второй ММ и третий ГГГГ
$dateUNIX = strtotime($datePOST[0]."-".$datePOST[1]."-".$datePOST[2]);//Формируем дату в виде ДД-ММ-ГГГГ после чего превращаем ее в целое число
$datePOST = date("D, d M Y ",$dateUNIX);//превращаем дату в вид Thu, 16 Feb 2012 (пример)
$datePOST = $datePOST.$dateMS.":01 GMT";//пристыковываем к дате еще и время (пример Thu, 16 Feb 2012 04:43:01 GMT)
$link = $site."index.php?blog=".$myrow[id];//генерируем ссылку
$txt = explode("<p>[end]</p>",$myrow[text]);//отделяем анонс от текста поста
$txt = strip_tags($txt[0]);//чистим анонс от html кода
//генерируем xml код
$xmlcode .= "\t\t<item>\n\t\t\t<title>".$myrow[title]."</title>\n\t\t\t<link>".$link."</link>\n\t\t\t<description>".$txt."</description>\n\t\t\t<pubDate>".$datePOST."</pubDate>\n\t\t</item>\n";
}
while($myrow = mysql_fetch_array($rssRESULT));
$end = "\t</channel>\n</rss>";//закрываем теги xml документа
$result = $header.$xmlcode.$end;//склеиваем части xml кода
$rssFILE = fopen("../rss/rss.xml", "w+");//открываем файл rss ленты
fwrite($rssFILE,$result);//записываем в него полученный xml код
fclose($rssFILE);//закрываем rss ленту
}
}
Открываем файл configpost.html и добавляем новую строчку в таблице. Вот код шаблона
<p align="right"><a href="index.php?page=all_content">К списку постов</a></p><br/>
<form action="index.php?page=cfgpost&id=[_id]" method="post" name="form">
<table width="700px" cellpadding="5" cellspacing="0" border="0" align="center">
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Видим пост в ленте новостей?</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="viewindex">
[_cfgvi]
</select>
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Разрешить комментировать пост?</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="viewcomm">
[_cfgcomm]
</select>
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Разместить в файле sitemap.xml?</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="sm">
[_cfgsm]
</select>
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="xmlsmup">
[_cfgsmup]
</select>
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="xmlsmpr">
[_cfgsmpr]
</select>
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Разместить пост в RSS ленте?</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="viewrss">
[_cfgrss]
</select>
</td>
</tr>
<tr>
<td valign="top" colspan="2" align="center">
<br/><br/><input type="submit" value="Сохранить настройки">
</td>
</tr>
</table>
</form>
<br/><br/>
Как видите все тоже самое, что мы проделывали в посте "Привязываем генератор sitemap.xml к движку". Я вообще подумывал дать Вам, что то вроде домашнего задания, ведь данный пост почти, что дубль поста по ссылке выше.
Прошу обратить внимание на атрибут name нового тега select. И на новое код слово [_cfgrss]
Что нам тут необходимо добавить? Сразу после
...
//--Приоритетность URL---
//-----Разместить в файле sitemap.xml?----
пишем
//-----Разместить пост в RSS ленте?----
$vrssQUEtxt = array("Нет","Да");//Вариант для человека
$vrssQUEint = array(0,1);//Вариант для скрипта
$vrss = queCFG($myrow_index[rss],$vrssQUEtxt,$vrssQUEint);//формируем option для пункта "Разместить пост в RSS ленте?"
//-----Разместить пост в RSS ленте?----
Если Вы читали предыдущие несколько постов, то Вы скорее всего узнаете такие строчки. Объяснять второй ( а может и третий ) раз не буду. Тут есть комментарии должно быть все понятно.
Осталось добавить строчку кода, которая заменит новое код-слово на тег option. Сразу после
...
$sm_read = str_replace("[_cfgsmpr]",$smpr,$sm_read);//приоритет
пишем
$sm_read = str_replace("[_cfgrss]",$vrss,$sm_read);//rss лента
Собственно это все изменения в данной функции
Я дам Вам полный код обработчика, и поясню новые строчки
//ОБРАБОТЧИК
//определяем переменные
if(isset($_POST['viewindex']))$viewindex = $_POST['viewindex'];
if(isset($_POST['viewcomm']))$viewcomm = $_POST['viewcomm'];
if(isset($_POST['sm']))$sm = $_POST['sm'];
if(isset($_POST['xmlsmup']))$xmlsmup = $_POST['xmlsmup'];
if(isset($_POST['xmlsmpr']))$xmlsmpr = $_POST['xmlsmpr'];
if(isset($_POST['viewrss']))$viewrss = $_POST['viewrss'];
//обращение к БД
if(isset($viewindex) AND isset($viewcomm) AND isset($sm) AND isset($xmlsmup) AND isset($xmlsmpr) AND isset($viewrss))//если переменная форма была заполнена и отправленна
{
$smCONFIGresult = mysql_query("SELECT sm,xmlsm,rss FROM blog WHERE id='$id'");//Выводим из базы данных некоторые данные для проверки
$smCONFIG = mysql_fetch_array($smCONFIGresult);
$newXMLconfig = $xmlsmup."|".$xmlsmpr;//Склеиваем инфу об обновление и приоритете в одну переменную ( monthly|0.2 )
$addrss = $smCONFIG[rss];
$newCONFIG = mysql_query ("UPDATE blog SET viewindex='$viewindex',viewcomm='$viewcomm',sm='$sm',xmlsm='$newXMLconfig',rss='$viewrss' WHERE id='$id'");//обнавляем настройки
if($smCONFIG[sm] != $sm OR $smCONFIG[xmlsm] != $newXMLconfig) sitemap($server_root);//Если настройки карты сайты изменились, то записываем их в файл
if($addrss != $viewrss) rss($server_root);//если пункт был изменен, то запускаем функцию rss()
header("location: ".getenv('HTTP_REFERER'));//Переносим пользовотеля на страницу с списком настроек
exit;
}
//ОБРАБОТЧИК
Первым делом я добавил строчку которая позволит из post переменной создать обычную переменную. Далее я изменил условие запуска обработчика. Так же изменением подвергся запрос в базу данных. Теперь нам необходимо помимо предыдущей информации вывести из базы данных содержимое колонки rss.
Переменная addrss будет содержать в себе информацию о колонке rss до обновления этой колонки обработчиком. Необходимо это для того чтобы определить, была ли изменена, администратором, информация о содержимом rss ленты.
Строчка обнавление базы данных так же подверглась изменениям ( добавилось rss='$viewrss' )
На по следок идет строчка кода, ради которой создавалась переменная addrss
if($addrss != $viewrss) rss($server_root);//если пункт был изменен, то запускаем функцию rss()
Из кода понятно, что если введенные администратором данные не совпадают с данными в базе данных, значит необходимо запустить функцию генерации rss ленты. Весь этот пост, точный аналог поста "Привязываем генератор sitemap.xml к движку", так что черпая информацию от туда и глядя на код в этом посте, можно разобраться как все работает
Вот как все это приблизительно выглядит
Если у Вас есть какие либо вопросы, то пользуйтесь формой ниже. Что бы не пропускать следующие посты подпишитесь на RSS ленту блога через ридер, или же по почте
Пост получился коротким, но зато у нас теперь в админ панели есть еще один пункт настроек постов.
Всего Вам наилучшего, у меня все!
Исходник |
______
P.S.: Иногда просто хотеть, даже если имеются средства на это, уехать в какую то другую страну мало! Вы например знаете как оформляется виза по приглашению в латвию? Вот и я не знал, пока не почитал. Что самое занятное, для каждой отдельно взятой страны свои заморочки с документами, поэтому не знающему человеку необходимо сначала посетить сайт, на подобие finskayaviza.ru, что бы вооружится знаниями без которых очень трудно разобраться...
$result_index = mysql_query("SELECT viewindex,viewcomm,sm,xmlsm,rss FROM blog WHERE id='$id'");
$myrow_index = mysql_fetch_array($result_index);
Забыл вытащить информацию из колонки rss
Спасибо большое за ваш сайт, очень нужная и полезная информация.
У меня небольшой вопрос: я создал одну новость и решил добавить ее в ленту новостей. Она добавилась и все отлично. Но потом я передумал, и сделал настройку для новости, чтобы она не добавлялась в ленту. Но почему то rss.xml файл не обновлялся. Все делал по вашей статье.
Тогда я немного поэкспериментировал и получил вот что (это кусок вашей функции rss():
...
//генерируем xml код
$xmlcode .= "\t\t<item>\n\t\t\t<title>".$myrow[title]."</title>\n\t\t\t<link>"
.$link."</link>\n\t\t\t<description>".$txt
."</description>\n\t\t\t<pubDate>".$datePOST."</pubDate>\n\t\t</item>\\n";
}
while($myrow = mysql_fetch_array($rssRESULT));
$end = "\t</channel>\n</rss>";//закрываем теги xml документа
$result = $header.$xmlcode.$end;//склеиваем части xml кода
$rssFILE = fopen("../rss/rss.xml", "w+");//открываем файл rss ленты
fwrite($rssFILE,$result);//записываем в него полученный xml код
fclose($rssFILE);//закрываем rss ленту
При таком коде у меня не обновлялось, а вот при таком все получилось:
...
//генерируем xml код
$xmlcode .= "\t\t<item>\n\t\t\t<title>".$myrow[title]."</title>\n\t\t\t<link>"
.$link."</link>\n\t\t\t<description>".$txt
."</description>\n\t\t\t<pubDate>".$datePOST."</pubDate>\n\t\t</item>\n";
}
while($myrow = mysql_fetch_array($rssRESULT));
}
$end = "\t</channel>\n</rss>";//закрываем теги xml документа
$result = $header.$xmlcode.$end;//склеиваем части xml кода
$rssFILE = fopen("../rss/rss.xml", "w+");//открываем файл rss ленты
fwrite($rssFILE,$result);//записываем в него полученный xml код
fclose($rssFILE);//закрываем rss ленту
}
Не уверен ошибка ли это, но кстати в site.xml у меня тоже не обновлялось. И мой вариант и там решил проблему. У вас все обновляется с вашим вариантом?
Спасибо.
Вообще по идеи строчка:
if($addrss != $viewrss) rss($server_root);//если пункт был изменен, то запускаем функцию rss()
призвана определить, нужно ли пересоздать rss ленту, или нет.
Данная строчка вроде выполняла свое предназначение. По крайней мере я не помню чтобы у меня были с rss лентой какие либо проблемы.
if($addrss != $viewrss) rss($server_root);
и никаких новостей больше нет, кроме основной информации о сайте. Ошибок это никаких не вызывало, заметил только потому, что у меня 1 новость пока и я играю с ее настройками, чтобы полностью протестировать.
http://site.ru/rss/rss.xml