KOBRETI
New member
Понеже знам колко е неприятно като не знаеш точно какво има в РСС-а, че да си го напишеш сам, а всички готови решения все нещо не са точно както искаш, реших да споделя скрипта, който съм си писал сам и си ползвам от доста време...
Целия скрипт можете да свалите от тук
Общо взето можете да го сложите нвсякъде, ако ще и някакъв готов ЦМС да е, само трябва да погледнете през cPanel точно в коя таблица и кои колони се намира съответната информация...
Сега част по част 🙂
Почваме със сдандартен код за линкване с базата данни
Правим заявка към базата за съответната информация. В случая дърпам последните 30 новини. За всеки случай четем колко записа са върнати.
Взимаме текущото време, за да укажем кога е генериран РСС-ът
В променливата $rss почваме да добавяме съдържание, в началото хедърите на РССа. Сега виждам, че е останал някакъв xsl, ама както и да е 🙂
Пишем общите неща за канала. В lastBuildDate пишем датата, която по-горе присвоихме. Вижте и как съм направил годините на копирайта, за да си се сменя автоматично всяка година...
Слагаме и изображение за канала
Тук спираме писането, и почваме да извличаме данните от базата. За всяка новина id, дата, заглавие
После от таблицата със снимките дърпам първата снимка към новината. Ако няма снимка, задавам служебна картинка
Тук си дърпам първите 300 символа от текста. Може малко да се подобри, за да не добавя многоточие, ако целия текст е под 300 знака.
Добавям в променливата $rss новините чрез цикъла
Затварям цикъла и дописвам футъра на рсс-а
Изписваме генерирания РСС
И ак някой се пита защо първо присвоявам на променлива, а пиша накрая, ето затова: записвам генерирания рсс във файл
В случая не ползвам пренаписване, така че ако пренаписвате, ще трябват малко промени...
Надявам се да е било полезно на някой. Ако имате въпроси, казвайте.
Целия скрипт можете да свалите от тук
Общо взето можете да го сложите нвсякъде, ако ще и някакъв готов ЦМС да е, само трябва да погледнете през cPanel точно в коя таблица и кои колони се намира съответната информация...
Сега част по част 🙂
Почваме със сдандартен код за линкване с базата данни
PHP:
<?php
$db_conn = mysql_connect ("localhost", "-------DB_USER--------", "--------DB_PASS---------");
if (!$db_conn) {
echo "Database connection error. Please try again later.";
exit;
}
mysql_select_db ("--------DB_NAME------------");
Правим заявка към базата за съответната информация. В случая дърпам последните 30 новини. За всеки случай четем колко записа са върнати.
PHP:
$query = 'SELECT * FROM novini ORDER BY nvn_data DESC LIMIT 0, 30';
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
Взимаме текущото време, за да укажем кога е генериран РСС-ът
PHP:
$n_dt = date('r', time());
В променливата $rss почваме да добавяме съдържание, в началото хедърите на РССа. Сега виждам, че е останал някакъв xsl, ама както и да е 🙂
PHP:
$rss = '
<?xml version="1.0" encoding="utf8"?><?xml-stylesheet type="application/rss+xml" href="http://rss1.mediafed.com/xsl/autosport/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
Пишем общите неща за канала. В lastBuildDate пишем датата, която по-горе присвоихме. Вижте и как съм направил годините на копирайта, за да си се сменя автоматично всяка година...
PHP:
<atom:link href="http://auto-kart.com/rss.xml" rel="self" type="application/rss+xml" />
<title>Българският картинг портал</title>
<description>Подробна информация за света на картинга</description>
<link>http://auto-kart.com</link>
<language>bg</language>
<copyright>(c) 2009-'.date("Y").' auto-kart.com</copyright>
<ttl>60</ttl>
<lastBuildDate>'.$n_dt.'</lastBuildDate>
Слагаме и изображение за канала
PHP:
<image>
<title>Българският картинг портал</title>
<url>http://auto-kart.com/img/img_header2.jpg</url>
<link>http://auto-kart.com</link>
</image>
';
Тук спираме писането, и почваме да извличаме данните от базата. За всяка новина id, дата, заглавие
PHP:
for ($i=0; $i < $num_rows; $i++) {
$row = mysql_fetch_array($result);
$n_id = sprintf("%03d",$row['nvn_id']);
$n_dt = date('r', strtotime($row['nvn_data']));
$n_title = stripslashes($row['nvn_zaglavie']);
После от таблицата със снимките дърпам първата снимка към новината. Ако няма снимка, задавам служебна картинка
PHP:
$p_query = 'SELECT * FROM novini_snimki WHERE nvs_novina='.$n_id;
$p_result = mysql_query($p_query);
$p_num_rows = mysql_num_rows($p_result);
if ($p_num_rows > 0) {
$p_row = mysql_fetch_array($p_result);
$p_pic = $p_row['nvs_snimka'];
} else {
$p_pic = "noimage.jpg";
}
$n_img = $p_pic;
Тук си дърпам първите 300 символа от текста. Може малко да се подобри, за да не добавя многоточие, ако целия текст е под 300 знака.
PHP:
$n_text = "<br />".substr(trim(strip_tags($row['nvn_tekst']), " "), 0, 300)."...";
Добавям в променливата $rss новините чрез цикъла
PHP:
$rss .= '
<item><guid isPermaLink="true">http://auto-kart.com/novina.php?id='.$n_id.'</guid>
<title>'.$n_title.'</title>
<description><![CDATA[<img width="100" alt="" src="http://auto-kart.com/novini/thumbs/'.$n_img.'">]]><![CDATA['.$n_text.']]></description>
<link>http://auto-kart.com/novina.php?id='.$n_id.'</link>
<pubDate>'.$n_dt.'</pubDate>
</item>
';
Затварям цикъла и дописвам футъра на рсс-а
PHP:
}
$rss .= "</channel></rss>";
Изписваме генерирания РСС
PHP:
echo $rss;
И ак някой се пита защо първо присвоявам на променлива, а пиша накрая, ето затова: записвам генерирания рсс във файл
PHP:
$myFile = "rss.xml";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $rss);
fclose($fh);
?>
В случая не ползвам пренаписване, така че ако пренаписвате, ще трябват малко промени...
Надявам се да е било полезно на някой. Ако имате въпроси, казвайте.