tengo un pequeño problema.
dejo en claro desde el principio que soy diseñador y mis nociones de programación snn mas bien básicas.
el siguiente código me ayuda a darle "lectura" a algunos archivos que tengo en formato xml.
Código:
al final despliego las noticias con el siguiente código.//obtencion de noticias: //Secciones: $secciones = Array(); $secciones[0] = "http://www.sitio.com/noticias/espanol/periodico/ciencia-tecnologia/"; $secciones[1] = "http://www.sitio.com/noticias/espanol/periodico/deportes/"; $secciones[2] = "http://www.sitio.com/noticias/espanol/periodico/gente/"; //para desplegar el nombre de cada noticia: $nombreSeccion = Array(); $nombreSeccion[0] = "Tecnología"; $nombreSeccion[2] = "Deportes"; $nombreSeccion[4] = "Gente"; //Array para guardar los titulos: $titulos = Array(); //Array para guardar los thumbnails: $thumbs = Array(); //Array para guardar los paths: $paths = Array(); $print=false; $tituloOK = false; $thumbOK = true; //contadores global: $contGeneral = 0; $contGeneralPaths = 0; $contGeneralThumbs = 0; //obtiene las 2 primeras noticias de cada secccion, en el orden en que aparecen arriba: foreach($secciones as $seccion => $value) { //abre el index.xml y obtiene las rutas de los archivos XML de cada noticia: //echo "<hr>abre ".$value."...<br>"; $cont=0; $contPaths=0; //auxiliar indice actual de Seccion: $seccionActualIndex++; $tituloOK = false; $parser=xml_parser_create(); xml_set_element_handler($parser,"start","stop"); //Specify data handler xml_set_character_data_handler($parser,"char"); //Open XML file $fp=fopen($value."index.xml","r"); //Read data while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //Free the XML parser xml_parser_free($parser); } //Function to use at the start of an element function start($parser,$element_name,$element_attrs) { global $titulos, $path, $thumb, $cont, $section, $print, $tituloOK, $paths, $contGeneralPaths, $contPaths, $secciones, $seccionActualIndex, $thumbOK; switch($element_name) { case "HEADLINE": //titulos: $tituloOK = true; $section = "titulo"; break; case "NEWSITEMREF"://path del XML de detalle: foreach ($element_attrs as $key => $value) { if (strpos($value,"xml") != false && $contPaths<=1) { $thumbOK = true; $paths[$contGeneralPaths]= $secciones[$seccionActualIndex-1].$value; $contGeneralPaths++; $contPaths++; //obtiene la ruta del thumnail del XML de detalle: $parser2=xml_parser_create(); xml_set_element_handler($parser2,"start2","stop"); //Specify data handler xml_set_character_data_handler($parser2,"char2"); //Open XML file //$fp=fopen($secciones[$seccionActualIndex-1].$value,"r"); $fp=fopen($secciones[$seccionActualIndex-1].$value,"r"); //Read data while ($data=fread($fp,4096)) { xml_parse($parser2,$data,feof($fp)) or die (sprintf("***XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser2)), xml_get_current_line_number($parser2))); } //Free the XML parser xml_parser_free($parser2); //<--- } } break; } } //Function to use when finding character data function char($parser,$data) { global $titulos, $path, $thumb, $cont, $print, $section, $tituloOK, $contGeneral; $la = $section; switch($section) { case "titulo": if ($tituloOK && $cont<=1) { //echo "<hr>".$data."<hr>"; $titulos[$contGeneral] = $data; $tituloOK = false; $contGeneral++; $cont++; } break; case "contenido": $contenido = $contenido.$data; break; } } function char2($parser,$data) { } function start2($parser,$element_name,$element_attrs) { global $thumbs, $contGeneralThumbs, $seccionActualIndex,$secciones, $thumbOK;; switch($element_name) { case "CONTENTITEM": foreach ($element_attrs as $key => $value) { if (strpos($value,"thumbnail") != false && $thumbOK==true) { $thumbs[$contGeneralThumbs]=$secciones[$seccionActualIndex-1].$value; $contGeneralThumbs++; $thumbOK=false; } } break; } } //Function to use at the end of an element function stop($parser,$element_name) { //echo "<hr />"; } //fin obtencion de noticias
Código:
lo cual funciona perfectamente, sin embargo por cuestiones de maquetación necesito agrupar las noticias de cada sección: Tecnología, Deportes y Gente dentro de un div cada una.<? //despliega noticias: $contDisplay=0; foreach($titulos as $titulo => $value) { if ($contDisplay==0 || $contDisplay==2 || $contDisplay==4) { echo "<div class='TitularSeccionNoticias'>".$nombreSeccion[$contDisplay].":</div>"; } ?> <div class="noticia"> <a href="noticias/?f=<?=$paths[$contDisplay]?>" ><img src="<?=$thumbs[$contDisplay]?>" alt="Cablemas.com" longdesc="Tecnologia"/></a> <p><?=$value?>...<p> <div class="CreditoAFP">AFP</div> </div> <? $contDisplay++; } ?>
he intentado abrir un div antes de mostrar el titulo pero no se donde cerrarlo.
agradezco de antemano su paciencia ante tanto código.
saludos.
NOTA: por un error de esos que no me explico confundí en el titulo css por xml :P