Zend - The PHP Company




XML

Add Code


News manager  

Type: class
Added by: memtv
Entered: 12/07/2006
Last modified: 09/12/2005
Rating: - (fewer than 3 votes)
Views: 2644
This class for manage site news.


<?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_USERDB_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





Search



This Category All Categories