pillinetwork hesabınızla giriş yapın.

CodeIgniter'da RSS Kütüphanesi ile Site Takibi

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
class 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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 p
GROUP BY p.id
ORDER BY p.id DESC
LIMIT 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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
echo '<?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.

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

/* fatigue yazdı. 31 Mayıs 2009 08:15. 4 yorum var */

Yorumlar

Epey basit görünüyor. teşekkür ettik.

Yakın bir zamanda asp için bir kütüphane hazırlamayı düşünüyorum. Bakalım tepkiler ne olacak göreceğiz.

/* if life="" then call BatsinBuDunya() */

code igniter php4 e destek verme kaygısıyla halen tam OO degil. Belki kohana daha iyi bir alternatif olabilir.

@bbayer : MVC çatıları, yazılım desenleri kullanarak oluşturulmuşlardır. CodeIgniter için "tam OO değil" demek doğru bir çıkarım değildir, çünkü yazdığınızdan OOP'nın PHP4 ile yapılamayacağı anlaşılmaktadır. Oysa PHP4 için destek verme kaygısı ile de OOP yapılabilir, CodeIgniter'da olduğu gibi.

Eğer düşünceniz MVC çatısı kullanmak isteyenler için alternatifler aramaksa, tavsiyem düzgün ve anlaşılır dokümante edilenlerden, sizin kolaylıkla çalışabileceğinizi seçmeniz yönünde olacaktır. CakePHP'de olabilir, Kohana'da olabilir, Zend'de olabilir, Symphony 'de olaiblir. İsim o kadar önemli değil.

MVC kavram olarak OOP zaten.. fakat MVC çatısını kullanırken , fonksiyonel programlamaya kaymaya başladığımı hissettiğimde rahatsız oluyorum.

şöyleki CI ile çalışırken takıldığım noktalardan biri try...catch mekanizmasının kullanılamamasıydı. php4'de gerçek manada bir exception handling olmadığı için örneğin bir database hatasını bazı değişkenleri kontrol etmeden anlayamıyordum, doğal olarak resmin bazı parçaları eksik kalıyordu. veya controller'lar için base controller sınıfları yazmak istediğimde CI beni hoş olmayan durumlara zorluyordu.

EAFP kod stilini benimsemiş biri olarak bu eksiklik beni Kohana'ya yöneltti. Tabi Kohana'dan daha olgun çatılarda var ama CI'dan türediği için ve hemen hemen aynı oldukları için Kohana'yı örnek verdim.

MVC'yi kavramaya başlamak için CI kesinlikle doğru seçim. Ama yazılım yeteneklerini geliştirmek için alternatiflere mutlaka göz atılmalı.

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork