XML
|
|
|
|
<?php // +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2006 The GHHT |
// | license: LGPL |
// | version: 0.1 |
// +----------------------------------------------------------------------+
// | Author: GHHT (GholamHossein Tavasoli) <ghht.com@gmail.com> |
// +----------------------------------------------------------------------+
/****** (-_-) Help (-_-) ***************************************************/
/*
news.xml preliminary code
<?xml version="1.0" encoding="utf-8"?>
<site_news>
</site_news>
this file must be set in this path: NEWS_PATH
*/
/*
news table structure
+-------------------------------------------------+
| id | type | show_date | expire_date |
+-------------------------------------------------+
| char(14) | TINYINT | DATE | DATE |
+-------------------------------------------------+
id construct by complex date and time in this format: yearmonthsayhourminutesecond
for example : if your news creat in 22:12:32 2/5/2006 news id is 20060502221232
in this way news id is unique
type archived news == 1,trash news == 2
show_date news show in this date
expire_date news do not show in this date
*/
/* Constant */ define("DB_HOST", "localhost");
define("DB_USER", "root"); define("DB_PASS", "toor"); define("DB_NAME", "newsdb");
define("TABLE_NAME", "news"); define("NEWS_PATH", $_SERVER['DOCUMENT_ROOT']."/news");
class news{
private $root_xml_news;
private $news_xml;
private $a_n_c;
public $db;
function __construct(){
$this->db = mysql_connect(DB_HOST,DB_USER, DB_PASS);
$this->a_n_c = mysql_num_rows(mysql_query("select id from ".DB_NAME.".".TABLE_NAME, $this->db));
$this->init_news();
}
function __destruct(){
mysql_close($this->db);
}
//return all news count Or array of all news id
public function all_news($state = false){
if(!$state)
return $this->a_n_c;
else {
$result = mysql_query('select id from '.DB_NAME.'.'.TABLE_NAME, $this->db);
for($i = 0; $temp = mysql_fetch_row($result); $i++)
$arr[$i] = $temp;
return $arr;
}
}
//return archive news count Or array of archive news id
public function ar_news($state = false){
$q = 'select id from '.DB_NAME.'.'.TABLE_NAME.' where expire_date < curdate() && type = 1';
$res = mysql_query($q, $this->db);
if(!$state)
return mysql_num_rows($res);
else{
for($i = 0; $temp = mysql_fetch_row($res); $i)
$arr[$i] = $temp;
return $arr;
}
}
//return trash news count Or array of trash news id
public function tr_news($state = false){
$q = 'select id from '.DB_NAME.'.'.TABLE_NAME.' where expire_date < curdate() && type = 2';
$res = mysql_query($q, $this->db);
if(!$state)
return mysql_num_rows($res);
else{
for($i = 0; $temp = mysql_fetch_row($res); $i)
$arr[$i] = $temp;
return $arr;
}
}
//return futire news count Or array of future news id
public function fu_news($state = false){
$q = 'select id from '.DB_NAME.'.'.TABLE_NAME.' where show_date > curdate()';
$res = mysql_query($q, $this->db);
if(!$state)
return mysql_num_rows($res);
else{
for($i = 0; $temp = mysql_fetch_row($res); $i++)
$arr[$i] = $temp;
return $arr;
}
}
//return curent news count Or array of curent news id
public function cu_news($state = false){
$q = 'select id from '.DB_NAME.'.'.TABLE_NAME.' where show_date <= curdate() && expire_date > curdate()';
$res = mysql_query($q, $this->db);
if(!$state)
return mysql_num_rows($res);
else{
for($i = 0; $temp = mysql_fetch_row($res); $i++)
$arr[$i] = $temp;
return $arr;
}
}
//Loading and initialize news
private function init_news(){
$this->news_xml = new DOMDocument();
$this->news_xml->load(NEWS_PATH.'/news.xml');
$this->root_news_xml = $this->news_xml->documentElement;
}
public function get_titre_news($id){
$news = $this->root_news_xml->getElementsByTagName('news');
for($i = 0; $i < $this->a_n_c; $i++)
if($news->item($i)->getElementsByTagName('id')->item(0)->nodeValue == $id)
return $news->item($i)->getElementsByTagName('titre')->item(0)->nodeValue;
}
public function get_body_news($id){
$news = $this->root_news_xml->getElementsByTagName('news');
for($i = 0; $i < $this->a_n_c; $i++)
if($news->item($i)->getElementsByTagName('id')->item(0)->nodeValue == $id)
return $news->item($i)->getElementsByTagName('body')->item(0)->nodeValue;
}
private function add_news($id, $titre, $body){
$dom = new DOMDocument("1.0","UTF-8");
$root = $dom->createElement("news");
$dom->appendChild($root);
$news_titre = $dom->createElement('titre', $titre);
$news_body = $dom->createElement('body', $body);
$root->appendChild($news_titre);
$root->appendChild($news_body);
$dom->save(NEWS_PATH.'/'.$id.'.xml');
}
public function insert_news($id, $titre, $body, $show_date, $expire_date, $type){
//stage 1
$this->add_news($id, $titre, $body);
//stage 2
$news = new DOMDocument();
$news->load(NEWS_PATH.'/news.xml');
$root = $news->documentElement;
$news_node = $news->createElement('news');
$news_id = $news->createElement('id', $id);
$news_titre = $news->createElement('titre', $titre);
$news_node->appendChild($news_id);
$news_node->appendChild($news_titre);
$next_n_node = $root->getElementsByTagName('news')->item(0);
$root->insertBefore($news_node, $next_n_node);
$news->save(NEWS_PATH.'/news.xml');
//stage 3
$q = 'insert into '.DB_NAME.'.'.TABLE_NAME.' values("'.mysql_real_escape_string($id).
'", "'.mysql_real_escape_string($show_date).
'", "'.mysql_real_escape_string($expire_date).
'", "'.mysql_real_escape_string($type).'")';
mysql_query($q, $this->db);
}
//give an array of ids
function delete_news($id){
foreach ($id as $del){
//stage 1:
unlink(NEWS_PATH.'/'.$del.'.xml');
//stage 2:
$news = new DOMDocument();
$news->load(NEWS_PATH.'/news.xml');
$root = $news->documentElement;
for($i = 0; $i < $this->all_news_co; $i++){
$id_node = $root->getElementsByTagName('news')->item($i)->getElementsByTagName('id')->item(0)->nodeValue;
if($id_node == $del){
$root->removeChild($root->getElementsByTagName('news')->item($i));
break;
}
}
//stage 3:
$q = 'delete from '.DB_NAME.'.'.TABLE_NAME.' where id = "'.mysql_real_escape_string($del).'"';
mysql_query($q, $this->db);
}
$news->save(NEWS_PATH.'/news.xml');
}
function update_news($id, $titre, $body, $show_date, $expire_date, $type){
$this->delete_news($id);
$this->insert_news($id, $titre, $body, $show_date, $expire_date, $type);
}
} ?>
|
|
|
Usage Example
|
|
|
Rate This Script
|
|
|
|