Rss, “Really Simple Syndication” kelimelerinin baş harflerinin bir araya gelmesi ile oluşmuş bir site takip formatıdır. Bir sitedeki tüm değişikliklerin Rss formatına alınmasının ardından, başka siteler ya da kullanıcılar tarafından takip edilebilirliği artar. Ziyaretöiler sürekli yeni bir şey var mı? diyerek sitenize gelmeyi bir süre sonra unuturlarsa, bu opsiyon sayesinde sitedeki yeniliklerden anında haberdar olurlar.

CodeIgniter, standart paketine dahil olan RSS kütüphanesi ile kullancıların kolaylıkla sitedeki yenilikleri takipçilerine aktarmalarına olanak sağlar. Rss kütüphanesi kullanarak bir blog sitesine eklenen her yeni yazıyı takip amacıyla bir Rss.xml oluşturalım.

Controller dosyamızı aşağıda kodlarını yazdığım gibi hazırladıktan sonra application/controllers dizini altına rss.php ismi ile kaydedelim.

<?phpclass Rss extends Controller {function Rss(){parent::Controller();}function index(){$this->load->library(‘parser’);$this->load->model(‘rss_model’,’Rss’);$this->load->helper(‘xml’);$this->load->helper(‘file’);$this->load->helper(‘directory’);$array = array(‘tr’ => array(‘feed_name’ => ‘CodeIgniter Türkiye | www.codeigniter.gen.tr’,’description’ => ‘CodeIgniter Türkiye`den Haberler’));$data[‘encoding’] = ‘utf-8’;$data[‘feed_name’] = $array[‘tr’][‘feed_name’];$data[‘feed_url’] = ‘http://www.codeigniter.gen.tr’;$data[‘page_description’] = $array[‘tr’][‘description’];$data[‘page_language’] = “tr”;$data[‘creator_email’] = ‘admin at codeigniter dot gen dot tr’;$data[‘posts’] = $this->Rss->get_rss_feed();$string = $this->parser->parse(‘rss_view’, $data, TRUE);$path= ‘./rss/’;//tanımlı path’e yazma yetkisi (777) vermeyi unutma!if (write_file($path.”/rss.xml”,$string)){header(“Content-Type: application/rss+xml”);$this->load->view(‘rss_view’, $data);}}}

Bu kodun index metodunda ilk önce parser kütüphanemizi yüklüyoruz. Böylelikle model yardımı ile veritabanından çektiğimiz verileri rss`in kullandığı xml formatına uygun olarak hazırlıyoruz. Eğer yazdığımız xml dokümanını dizin altına kayıt etmek istiyorsak, sondaki if kalıbını kullanmamız gerekir. Böylelikle sitemiz kullanıcıları bu dosya yenilendikçe sitedeki yeniliklerden haberdar olurlar. Xml dosyasının kayıt edildiği yere yazma yetkisi vermeyi unutmayınız! Bu kodda izinverilen dizin, $path değişkeni ile tanımlı kökteki rss dizinidir.

Model dosyamız ise aşağıdaki kodlardan oluşur ve application/model dizini altında rss_model.php ismi ile kayıtlıdır:

<?php if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);class Rss_model extends MY_Model {function Rss_model(){parent::MY_Model();}function get_rss_feed(){$query = $this->db->get(‘SELECT *FROM posts pGROUP BY p.idORDER BY p.id DESCLIMIT 0,10’);if($query->num_rows() > 0) {return $query->result();} return FALSE;}}

Model doyamızda veritabanındaki posts tablosundan post id numarasında göre grupladığımız değerleri, en son girilen en önce gelmek kaydı ile ilk 10 değeri çekiyoruz. Çektiğimiz dizini, Controller dosyamıza gönderiyoruz.

Controller dosyamız içinde kullandığımız, aşağıda kodunu bulacağınız view dosyası ise application/view dizini altında rss_view.php ismi ile kayıtlıdır.

<?phpecho ‘<?xml version=”1.0″ encoding=”utf-8″?>’ . “”;?><rss version=”2.0″xmlns:dc=”http://purl.org/dc/elements/1.1/”xmlns:sy=”http://purl.org/rss/1.0/modules/syndication/”xmlns:admin=”http://webns.net/mvcb/”xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”xmlns:content=”http://purl.org/rss/1.0/modules/content/”><channel><title><?php echo $feed_name; ?></title><link><?php echo $feed_url; ?></link><description><?php echo $page_description; ?></description><dc:language><?php echo $page_language; ?></dc:language><dc:creator><?php echo $creator_email; ?></dc:creator><dc:rights>Copyright <?php echo gmdate(“Y”, time()); ?></dc:rights><admin:generatorAgent rdf:resource=”http://www.gama.com.tr/” /><?php foreach($posts as $entry): ?><item><title><?php echo xml_convert($entry->title); ?></title><link><?php echo base_url().’post/show/’.$entry->url ?></link><guid><?php echo base_url().’post/show/’.$entry->url ?></guid><description><![CDATA[<?php echo substr(xml_convert(strip_tags($entry->metin)),0,350);?>]]></description><pubDate><?php echo $entry->ilk_tarih;?></pubDate></item><?php endforeach; ?></channel></rss>

View dosyasından da takip edebileceğiniz gibi Controller dosyasından $data dizini ile aktarılan değişkenler burada işlenerek ekrana bastırıldığı gibi, rss.xml isimli dosya içine de yazdırılmaktadır. Foreach komutu ile çevrime alınan posts değişkeni, model dosyası ile veritabanından çektiğimiz değişkendir ve sizin veritabanı yapınıza uygun olarak, çevrim içindeki değişkenleri değiştirmeniz gereklidir.

Sitemiz içine yerleştireceğimiz aşağıdakine benzer bir link yardımı ile site ziyaretçileri sitemizdeki değişikliklerden bundan sonra haberdar olacaklardır.

<a href=”<?=base_url()?>rss”> Rss dosyasına erişim için tıklayınız.</a>