У меня есть DOM скрипт, который получает перечень из xml документа:
PHP |
$basename='base.xml'; $doc = new DomDocument(); $doc = DOMDocument::load($basename); $params = $doc->getElementsByTagName("FILE"); foreach ($params as $param) { $nameAdr=iconv("UTF-8", "WINDOWS-1251",$param->attributes->getNamedItem("name")->nodeValue); $date=iconv("UTF-8", "WINDOWS-1251",$param->attributes->getNamedItem("date")->nodeValue); $account=iconv("UTF-8", "WINDOWS-1251",$param->attributes->getNamedItem("account")->nodeValue); $itas=$param->getElementsByTagName('TITLE'); foreach ($itas as $ita){ $title=iconv("UTF-8", "WINDOWS-1251",$ita->nodeValue); } $bodyData=$param->getElementsByTagName('COMMENT'); foreach ($bodyData as $bodyD){ $comment=iconv("UTF-8", "WINDOWS-1251",$bodyD->nodeValue); } $kolobok= "<p><b><a href=\"../articles/artic/$nameAdr\">$title</a></b><br />$comment<br /><b style=\"font-size:10px;color:#999\">$date [Просмотров: $account]</b></p>"; } print "<p>Всего строк: <b>$params->length</b></p>"; |
И есть слизанный скрипт постраничного вывода (рабочий):
PHP |
<!-- Отображение пострачного вывода --> <?php $N = 145; $perPage = 10; $currOffset = 70; if (isset($_GET['st'])) $currOffset = $_GET['st']; $currNum = 0; for ($i = 0; $i < $N; $i += $perPage) { $currNum++; if ($i == $currOffset) { print ' <b>'.$currNum.'</b> '; } else { print ' <a href="?st='.$i.'">'.$currNum.'</a> '; } } print "<br><br>"; ?> <!-- Отображение данных(объектов) текущей страницы --> <b>Объекты</b>:<br> <?php $end = $currOffset + $perPage; if ($end > $N) $end = $N; for ($i = $currOffset; $i < $end; $i++) { print ($i+1).'<br>'; }
|
Так вот, ни как не могу разобраться, куда вставлять переменную
$kolobok, чтобы вывод был правивльным, т.е. не просто первый прочитанный элемент из xml, а все прочитанные строки
Спустя 1 час, 38 минут, 1 секунда (26.02.2009 - 19:19) bret написал(а):
Структуру ХМЛя покажи
У <FILE> нет ничего вроде id7
Спустя 4 минуты, 18 секунд (26.02.2009 - 19:23) kich написал(а):
Цитата (bret @ 26.02.2009 - 20:19) |
Структуру ХМЛя покажи У <FILE> нет ничего вроде id7 |
<?xml version="1.0" encoding="windows-1251"?>
<ARTICLES>
<FILE name="dostavka.php" date="ноябрь 2008" account="2">
<TITLE>Продажа на дистанции. Оформление сделки</TITLE>
<COMMENT>В настоящее время предприниматели начали серьезно рассматривать дистанционный способ торговли, то есть без личной встречи с покупателем и отсутствием возможности непосредственного ознакомления покупателя с товаром. В целом подобный вариант торговли выгоден бизнесменам. В частности, дистанционная торговля минимизирует затраты на аренду, оформление магазина...</COMMENT>
</FILE>
<FILE name="electronic.php" date="июль 2008" account="1">
<TITLE>Сдача отчетности в электронном виде. Право и обязанность</TITLE>
<COMMENT>Налоговый кодекс предусматривает два варианта представления отчетности: на бумажном носителе либо в электронном виде. Нередко инспекторы отказываются принимать у ИП отчеты на бумаге. В то же время обязанность сдавать отчетность в электронном виде распространяется лишь на некоторые категории налогоплательщиков...</COMMENT>
</FILE>
...
</ARTICLES>
Спустя 1 час, 21 минута, 43 секунды (26.02.2009 - 20:45) Viking написал(а):
дык ты колобку в цикле при каждой итерации новое значение присваиваешь, чтобы он все сохранял надо с точкой: $kolobok.=, и если я правильно понял, то надо первый скрипт переделать, вместо foreach поставить for с индексами с какого по какую строку показывать, хотя наверное лучше какойнить ид для них ввести
а зачем у тебя foreach для комментов? у тебя разве больше одного коммента на файл?
Спустя 17 минут, 58 секунд (26.02.2009 - 21:03) kich написал(а):
Цитата (Viking @ 26.02.2009 - 21:45) |
а зачем у тебя foreach для комментов? у тебя разве больше одного коммента на файл? |
Так он же отдельным тегом идет
Спустя 3 минуты, 12 секунд (26.02.2009 - 21:06) Viking написал(а):
Цитата |
Цитата (Viking @ 26.02.2009 - 21:45) а зачем у тебя foreach для комментов? у тебя разве больше одного коммента на файл?
Так он же отдельным тегом идет |
дык у него же идет foreach для FILE, а внутри, вложенным циклом для 'COMMENT' и для 'TITLE' кстати тоже
но в каждом FILE их по одному, зачем циклом обходить?
Спустя 4 минуты, 59 секунд (26.02.2009 - 21:11) kich написал(а):
Цитата (Viking @ 26.02.2009 - 22:06) |
Цитата | Цитата (Viking @ 26.02.2009 - 21:45) а зачем у тебя foreach для комментов? у тебя разве больше одного коммента на файл?
Так он же отдельным тегом идет |
дык у него же идет foreach для FILE, а внутри, вложенным циклом для 'COMMENT' и для 'TITLE' кстати тоже но в каждом FILE их по одному, зачем циклом обходить?
|
Просто тупо прочитать содержимое тегов TITLE и COMMENT через
PHP |
=$param->getElementsByTagName('TITLE')-> |
Не получается
И кстати, с циклом for тоже глюк. Хотя, этот глюк может возникать только из-за меня, так как я ток как два дня изучаю DOM, мож я неправильно функции применяю
Спустя 3 минуты, 27 секунд (26.02.2009 - 21:14) kich написал(а):
точнее через
PHP |
$title=$param->getElementsByTagName('TITLE')->nodeValue; |
Спустя 52 секунды (26.02.2009 - 21:15) Viking написал(а):
Цитата |
Просто тупо прочитать содержимое тегов TITLE и COMMENT черезPHP =$param->getElementsByTagName('TITLE')-> |
вообще должен, помню была запара в похожем случае, но все закончилось непомню чем, но хорошо, вроде там где-то надо добавить item(0)-> или что-то похожее
Спустя 1 минута, 6 секунд (26.02.2009 - 21:16) bret написал(а):
толком эту штуку не ковырял, тебе надо сначала дать каждому файлу уникальный идентификатор, а затем юзать код что-то вроде
PHP |
$basename='base.xml'; $doc = new DomDocument(); $doc = DOMDocument::load($basename); $params = $doc->getElementsByTagName("FILE"); foreach ($params as $param) { if($param->get_attribute('id')==$_GET['st']) { $nameAdr=iconv("UTF-8", "WINDOWS-1251",$param->attributes->getNamedItem("name")->nodeValue); ... $kolobok= "<p><b><a href=\"../articles/artic/$nameAdr\">$title</a></b><br />$comment<br /><b style=\"font-size:10px;color:#999\">$date [Просмотров: $account]</b></p>"; break; } } print($kolobok); // вставить paginator |
Спустя 1 минута, 40 секунд (26.02.2009 - 21:18) Viking написал(а):
собственно вот отрывок из рабочего скрипта, который я топикстартеру когда-то кидал
Цитата |
$item = $doc->getElementsByTagName("FILE"); for($i=0; $i<$item->length;$i++) if($item->item($i)->getAttributeNode("filename")->nodeValue == $filename) { $item->item($i)->nodeValue++; break; } |
Спустя 3 минуты, 25 секунд (26.02.2009 - 21:21) kich написал(а):
Цитата (Viking @ 26.02.2009 - 22:18) |
собственно вот отрывок из рабочего скрипта, который я топикстартеру когда-то кидал
Цитата | $item = $doc->getElementsByTagName("FILE"); for($i=0; $i<$item->length;$i++) if($item->item($i)->getAttributeNode("filename")->nodeValue == $filename) { $item->item($i)->nodeValue++; break; } |
|
Viking,
Признаюсь честно, ты в моей темке ранее кидал этот
скрипт, и признаюсь честно, на нем я начинал осваивать DOM
Спустя 2 минуты, 8 секунд (26.02.2009 - 21:24) kich написал(а):
Цитата (bret @ 26.02.2009 - 22:16) |
толком эту штуку не ковырял, тебе надо сначала дать каждому файлу уникальный идентификатор, а затем юзать код что-то вроде
PHP | $basename='base.xml'; $doc = new DomDocument(); $doc = DOMDocument::load($basename); $params = $doc->getElementsByTagName("FILE"); foreach ($params as $param) { if($param->get_attribute('id')==$_GET['st']) { $nameAdr=iconv("UTF-8", "WINDOWS-1251",$param->attributes->getNamedItem("name")->nodeValue); ... $kolobok= "<p><b><a href=\"../articles/artic/$nameAdr\">$title</a></b><br />$comment<br /><b style=\"font-size:10px;color:#999\">$date [Просмотров: $account]</b></p>"; break; } } print($kolobok); // вставить paginator |
|
А индификатор какому тегу присваивать?
Спустя 3 минуты, 40 секунд (26.02.2009 - 21:27) Viking написал(а):
Цитата |
собственно вот отрывок из рабочего скрипта, который я топикстартеру когда-то кидал |
блин, это я твой ник с другим путаю всевремя, сори
Спустя 1 минута, 29 секунд (26.02.2009 - 21:29) Viking написал(а):
Цитата |
Viking,Признаюсь честно, ты в моей темке ранее кидал этот скрипт, и признаюсь честно, на нем я начинал осваивать DOM |
скоро будешь меня консультировать =)
Спустя 28 секунд (26.02.2009 - 21:29) kich написал(а):
Цитата (Viking @ 26.02.2009 - 22:27) |
Цитата | собственно вот отрывок из рабочего скрипта, который я топикстартеру когда-то кидал |
блин, это я твой ник с другим путаю всевремя, сори
|
Да ниче, лучше с задачкей помоги
Спустя 2 минуты, 39 секунд (26.02.2009 - 21:32) kich написал(а):
Цитата (Viking @ 26.02.2009 - 22:29) |
скоро будешь меня консультировать =) |
Хорошо, проконсультирую, только смотря о чем, а то я по профессии налоговый консультант;)
Спустя 34 секунды (26.02.2009 - 21:32) Viking написал(а):
дык в тег FILE ид для каждого добавь, как bret сказал, и по идам их и показывай
хотя циклом перебирать все данные как-то не особо нравится, но на счет надежности сортировки просто данных в доме я сомневаюсь...
Спустя 18 минут, 1 секунда (26.02.2009 - 21:50) kich написал(а):
Цитата (kich @ 26.02.2009 - 22:24) |
Цитата (bret @ 26.02.2009 - 22:16) | толком эту штуку не ковырял, тебе надо сначала дать каждому файлу уникальный идентификатор, а затем юзать код что-то вроде
PHP | $basename='base.xml'; $doc = new DomDocument(); $doc = DOMDocument::load($basename); $params = $doc->getElementsByTagName("FILE"); foreach ($params as $param) { if($param->get_attribute('id')==$_GET['st']) { $nameAdr=iconv("UTF-8", "WINDOWS-1251",$param->attributes->getNamedItem("name")->nodeValue); ... $kolobok= "<p><b><a href=\"../articles/artic/$nameAdr\">$title</a></b><br />$comment<br /><b style=\"font-size:10px;color:#999\">$date [Просмотров: $account]</b></p>"; break; } } print($kolobok); // вставить paginator |
|
А индификатор какому тегу присваивать?
|
такой способ не работает
Спустя 22 минуты, 48 секунд (26.02.2009 - 22:13) bret написал(а):
Лан, тогда даю алгоритм
- выдать каждому <FILE> аттрибут с персональным id
- слушать GET(id)
- получить все элементы FILE
- найти элемент, у которого id совпадает GET(id)
- записать все дочерние элементы найденного FILE в колобка
- вывести на страницу колобка
- вывести на страницу пагинатор
Спустя 3 минуты, 33 секунды (26.02.2009 - 22:17) kich написал(а):
Цитата (bret @ 26.02.2009 - 23:13) |
Лан, тогда даю алгоритм - выдать каждому <FILE> аттрибут с персональным id - слушать GET(id) - получить все элементы FILE - найти элемент, у которого id совпадает GET(id) - записать все дочерние элементы найденного FILE в колобка - вывести на страницу колобка - вывести на страницу пагинатор |
ща попробую
_____________