Просмотр полной версии : XML - Новостная лента
Мне нужен скрипт - новостное ленты работающей не с MySQL а с XML .
Скрипт вида :
1.Главная страница
[отображение новостей : название новости , кратное описание ]
http://avoreg.ru/pic_b/b0282148429d5f4649ed7fb173dcf37b.png
2.Открытая новость
[Полное описание + фото,переход между новостями]
http://avoreg.ru/pic_b/a2e7e5e868d17d033a3c7c1411e820f9.png
3.Админ панель
[отображение загруженных новостей - (удаление/редактирование)
Добавление новости:
Название новости
Краткое описание
Полное описание
Добавление изображения]
http://avoreg.ru/pic_b/ad1068f4699aa5551ad04b93918f852e.png
4.Редактирование
[отображение загруженных новостей - (удаление/редактирование)
Добавление новости:
Редактирование названия новости
Редактирование краткого описания
Редактирование полного описания
Выбор нового загружаемого изображения]
http://avoreg.ru/pic_b/6f534cff5b28a28e6db705dc6434bc0f.png
_______________________________________________
У кого есть скрипт подобного рода , работающий с XML
или же способен создать.
Буду рад каждому ответу .
спасибо .
Pashkela
22.12.2008, 03:22
Тут почитай:
http://www.linuxcenter.ru/lib/articles/programming/xml_news.phtml
http://www.realcoding.net/article/view/4182
Тут почитай:
http://www.linuxcenter.ru/lib/articles/programming/xml_news.phtml
___
спасибо большое - но там слишком просто .
Надо именно под мои требования :
Кто поможет - в знак благодарности дам 3 WMZ - это все что есть .
Если хочешь, могу сделать несложную структуру документа и класс, который будет располагать средствами обработки... Но без XSLT
Если хочешь, могу сделать несложную структуру документа и класс, который будет располагать средствами обработки... Но без XSLTзачем тут XSLT??
по сабжу - http://ua2.php.net/manual/ru/book.simplexml.php
Потому что в примерах, которые привел Pashkella юзается еще и XSLT
А SimpleXML я обычно не пользуюсь, пусть он простой и быстрый, но не совсем универсальный, а юзаю DOM.
-Hormold-
22.12.2008, 19:45
Для редактирования тебе их нужно заносить в файл или mysql.
Напиши в icq. Всё расскажу, возможно сделаю!
<?php
/************************************************** ***************************
* класс для работы с новостной лентой. автор - ss88 *
************************************************** ***************************
*/
class newsList
{
protected $newsList,//массив со всеми выбранными новостями
$xDoc,//xml-документ
$newsNodeList,
$newsCount,//количество новостей в базе
$newsPerPage,//кол-во новостей на страницу
$fileName,//имя файла базы
$maxId;//максимальный из присутствующих идентификаторов
//конструктор
function __construct($filename,$newsPerPage)
{
if(file_exists($filename))
$this->xDoc=new DOMDocument();
else
echo "Ошибка открытия файла";
$this->newsPerPage=$newsPerPage;
$this->fileName=$filename;
//открыть базу
$this->xDoc->load($this->fileName);
$this->xDoc->formatOutput=TRUE;
//получить корневую часть
$this->newsNodeList=$this->xDoc->getElementsByTagName("newsItem");
//чтение и инициализация
$this->initRead();
}
//получить весь список новостей
function getAllNews()
{
return $this->newsList;
}
//получить новость по идентификатору
function getById($id)
{
if($this->newsCount<1)
return NULL;
else
{
foreach($this->newsList as $oneItem)
if($oneItem['id']==$id)
return $oneItem;
return NULL;
}
}
//получить страницу
function getPage($pageNum)
{
if(($this->newsCount - $this->newsPerPage*($pageNum-1))>0)
{
$arPage=array();
for($i=$this->newsPerPage*($pageNum-1);isset($this->newsList[$i])&&($i<$this->newsPerPage*($pageNum-1)+$this->newsPerPage);$i++)
array_push($arPage,$this->newsList[$i]);
return $arPage;
}
else
return NULL;
}
//редактировать новость
function editItem($id,$bind)
{
if($item=$this->getById($id))
{
for($i=0;$i<$this->newsNodeList->length;$i++)
if(($this->newsNodeList->item($i)->childNodes->item(0)->nodeValue)==$id)
{
$oldNode=$this->newsNodeList->item($i);
if($i!=$this->newsNodeList->length-1)
$nextNode=$this->newsNodeList->item($i);
break;
}
$newNode=$this->makeNewNode($bind,$id);
$bigNode=$this->xDoc->getElementsByTagName("newsList")->item(0);
$bigNode->replaceChild($newNode,$oldNode);
$this->xDoc->save($this->fileName);
$this->initRead();
return $this->getById($id);
}
else
return NULL;
}
//добавить новость
function addItem($bind)
{
if(!is_array($bind))
return NULL;
else
{
$newNode=$this->makeNewNode($bind);
$bigNode=$this->xDoc->getElementsByTagName("newsList")->item(0);
$bigNode->appendChild($newNode);
$this->xDoc->save($this->fileName);
$this->initRead();
return $this->getById($this->maxId);
}
}
//удалить новость
function removeItem($id)
{
if($this->getById($id))
{
for($i=0;$i<$this->newsNodeList->length;$i++)
if(($this->newsNodeList->item($i)->childNodes->item(0)->nodeValue)==$id)
{
$delNode=$this->newsNodeList->item($i);
break;
}
$bigNode=$this->xDoc->getElementsByTagName("newsList")->item(0);
$bigNode->removeChild($delNode);
$this->xDoc->save($this->fileName);
}
else
return FALSE;
}
//сервисная защищенная функция для формирования nod'а
protected function makeNewNode($bind,$id=-1)
{
$newNode=$this->xDoc->createElement("newsItem");
$newNode->appendChild($this->xDoc->createElement("id",($id==-1)?($this->maxId+1):$id));
$newNode->appendChild($this->xDoc->createElement("name",$bind['title']));
$newNode->appendChild($this->xDoc->createElement("shortDescription",$bind['description']));
$newNode->appendChild($this->xDoc->createElement("extDescription",$bind['extDescription']));
$newNode->appendChild($this->xDoc->createElement("pictureFile",$bind['picture']));
$newNode->appendChild($this->xDoc->createElement("date",$bind['date']));
return $newNode;
}
//защищенная ф-ция. чтение и инициализация, всего, что связано с новостями
protected function initRead()
{
$this->newsList=array();
if(!$this->newsNodeList->length)
return;
else
{
$this->maxId=-1;
for($i=0; $i<$this->newsNodeList->length;$i++)
{
$xItem=$this->newsNodeList->item($i);
if($this->maxId<$xItem->childNodes->item(0)->nodeValue)
$this->maxId=$xItem->childNodes->item(0)->nodeValue;
$oneItem=array
(
"id"=>$xItem->childNodes->item(0)->nodeValue,
"title"=>$xItem->childNodes->item(1)->nodeValue,
"description"=>$xItem->childNodes->item(2)->nodeValue,
"extDescription"=>$xItem->childNodes->item(3)->nodeValue,
"picture"=>$xItem->childNodes->item(4)->nodeValue,
"date"=>$xItem->childNodes->item(5)->nodeValue
);
array_push($this->newsList,$oneItem);
}
$this->newsCount=count($this->newsList);
}
}
}
?>
Вот такой вот примерчик работы с новостями без БД. Конечно, он сделан на скорую руку и оптимальностью не блещет, но пригоден для использования. Для оптимизации (если, например, разведется несколько тысяч новостей) можно для чтения файла использовать более шустрый, нежели DOM, интерфейся, благо, парочка таких альтернатив имеется + нужно уже будет вычитывать не всю базу, а кусками, потому что ресурсы сервера нихрена не резиновые.
xml
<?xml version="1.0"?>
<newsList>
<newsItem><id>1</id><name>Edited Name Of First Item 666</name><shortDescription>
short decription of the first item
</shortDescription><extDescription>
extended decription of the first item
</extDescription><pictureFile>
1.jpg
</pictureFile><date>10.10.1666</date></newsItem>
<newsItem><id>2</id><name>Edited Name</name><shortDescription>
short decription of the SECOND item
</shortDescription><extDescription>
extended decription of the SECOND item
</extDescription><pictureFile>
2.jpg
</pictureFile><date>10.11.1666</date></newsItem>
<newsItem><id>3</id><name>We wish to work well</name><shortDescription>
short decription of the first item
</shortDescription><extDescription>
extended decription of the first item
</extDescription><pictureFile>
1.jpg
</pictureFile><date>10.10.1666</date></newsItem>
</newsList>
Вот так выглядит сам файл с новостями
fucker"ok
22.12.2008, 20:58
http://pear.php.net/package/XML_Parser
ss88, красавчег, только можно было не изобретать квадратные колеса :)
Потому что в примерах, которые привел Pashkella юзается еще и XSLTпокажи где ты это увидел?
покажи где ты это увидел?
Тут почитай:
http://www.linuxcenter.ru/lib/articles/programming/xml_news.phtml
http://www.realcoding.net/article/view/4182
раззуй глаза и посмотри
http://pear.php.net/package/XML_Parser
ss88, красавчег, только можно было не изобретать квадратные колеса :)
Ну конечно же можно было ;) Хотя, иногда полезно их изобретать, например, для освежения мозга, просто для разминки. А XML-Parser я и сам раньше юзал, сейчас обхожусь Zend_Dom, мне хватает :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot