Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/09/2009, 07:20
samu22
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 7 meses
Puntos: 16
Respuesta: Novato en rss

una cosa son los rss y otra los boletines de novedades.

si vas a utilizar rss tenes que mantener actualizados los registros, si te sirve te dejo una clase que hice hoy para un sitio

Código php:
Ver original
  1. <?php
  2. class feeds{   
  3.     public $rss_config;
  4.    
  5.     function __construct(){
  6.         $this->setConfig('host','localhost');
  7.         $this->setConfig('url','http://'.$this->rss_config['host'].'/feeds/');
  8.         $this->setConfig('limit',10);
  9.         $this->setConfig('autor','cortadoverde');
  10.         $this->setConfig('descripcion','generador de rss by ctv');
  11.         $this->setConfig('resource','articulos');
  12.     }
  13.     /**
  14.      * Especificar que rss crear
  15.      * @example setResource('articulos')
  16.      * @param $tipo
  17.      * @return unknown_type
  18.      */
  19.     function setResource($tipo){
  20.         $this->setConfig('resource',$tipo);
  21.     }
  22.  
  23.     function limitList($cant){
  24.         $this->setConfig('limit',$cant);
  25.     }
  26.    
  27.     function setAutor($autor){
  28.         $this->setConfig('autor',$autor);
  29.     }
  30.    
  31.     function setDescripcion($desc){
  32.         $this->setConfig('descripcion',$desc);
  33.     }
  34.    
  35.     function getResource(){
  36.         global $DbConn;
  37.         $resource_id = $this->__switchResource($this->rss_config['resource']);
  38.         $sql = 'SELECT * FROM post where tipo_id='.$resource_id.' ORDER BY fecha_ini DESC LIMIT '.$this->rss_config['limit'];
  39.         $res = $DbConn->query($sql);
  40.         while($arr = $DbConn->fetchAssoc($res)){
  41.             $ret[]=$arr;
  42.         }
  43.         return $ret;
  44.        
  45.     }
  46.    
  47.     function __switchResource($res){
  48.         global $DbConn;
  49.         $res = strtolower($res);
  50.         switch ($res){
  51.             case 'articulo':
  52.             case 'articulos':
  53.             case 'documentos':
  54.             case 'documentos ambientales':
  55.                         $sql = 'SELECT id FROM post_tipo where tipo="Articulo"';
  56.             break;
  57.             case 'campaña':
  58.             case 'campañas':
  59.             case 'campana':
  60.             case 'campanas':
  61.                         $sql = 'SELECT id FROM post_tipo where tipo="Campaña"';
  62.             break;         
  63.             case 'multimedia':
  64.             case 'media':
  65.             case 'campaña':
  66.             case 'archivos':
  67.                         $sql = 'SELECT id FROM post_tipo where tipo="multimedia"';
  68.             break;     
  69.             case 'pagina':
  70.             case 'paginas':
  71.                         $sql = 'SELECT id FROM post_tipo where tipo="Pagina"';
  72.             break;
  73.             default:
  74.                 $sql = 'SELECT id FROM post_tipo where tipo="Articulo"';
  75.             break; 
  76.         }
  77.         $ret = $DbConn->fetchAssoc($DbConn->query($sql));
  78.         return $ret['id'];
  79.        
  80.     }
  81.    
  82.     function createRssXML(){
  83.        
  84.         $xml = "<?xml version='1.0' encoding='iso-8859-1'?>
  85.                     <rss version='2.0'>";
  86.    
  87.         $xml .= '
  88.                 <channel>
  89.                     <title>'.$this->rss_config['titulo'].'</title>
  90.                     <link>'.$this->rss_config['url'].'</link>
  91.                     <description>'.$this->rss_config['descripcion'].'</description>
  92.                     <language>es-ES</language>
  93.                 ';
  94.        
  95.         //obtengo los datos
  96.         $conResource = $this->getResource();
  97.         foreach($conResource as $num => $item){
  98.             $cont = samucode($item['contenido']);
  99.             $cont = strip_tags($cont);
  100.             //$cont = htmlentities($cont);
  101.             $xml .= '
  102.                     <item>
  103.                         <title>'.$item['titulo'].'</title>
  104.                         <link>http://'.$this->rss_config['host'].'/post/ver/id/'.$item['id'].'</link>
  105.                         <description>'.mb_substr($cont,0,200).'</description>
  106.                     </item>';
  107.         }
  108.        
  109.         $xml .= '</channel>
  110.                 </rss>';
  111.        
  112.         $hand = fopen($this->rss_config['saveXml'],'w+');
  113.         fwrite($hand,$xml);
  114.         fclose($hand);
  115.                
  116.     }
  117.    
  118.    
  119.    
  120.    
  121.    
  122.     function setConfig($key,$value){
  123.         if(@array_key_exists($key,$this->rss_config)){
  124.             unset($this->rss_config[$key]);
  125.         }
  126.         $this->rss_config[$key]=$value;
  127.     }
  128. }
en la clase utilizo una global para la base de datos, podes cambiarlo por una conexion propia y va a andar

mode de uso
Código php:
Ver original
  1. $newFeed = new feeds();
  2. $newFeed->setResource('articulos');
  3. $newFeed->setConfig('saveXml','xml/articulos2.xml');
  4. $newFeed->createRssXML();

Definir saveXml ya que sino no se podra guardar el archivo