Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: DOM без индусов.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Bertolomych
Отправлено: 19 Февраля, 2011 - 22:06:14
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Доброго вечера, господа!
Встала тут передо мной задачка. Достаточно тривиальная, как я понимаю. Сгенерить Sitemap.xml. Куча всякого по этому поводу написано, но готового решения, такого как нужно мне я так и не нашел, в результате чего решил писать сам. С использованием расширения DOM. На это меня натолкнула статейка вот эта: http://makecode[dot]ru/2010/08/gener[dot][dot][dot]-sitemap-on-php/ Но имеющееся решение меня не устроило по двум параметрам: во-первых, там каждый раз генерится новый сайтмэп, а во-вторых у них он получается весь одной длииииной строкой, а хотелось бы, чтобы был со всякими отсупами и переносами строк (ну, или у меня, по крайней мере чего-то не так с formatOutput).
И тут я столкнулся с тем, что документация по DOM, в том числе и на php.su.. ну, мягко говоря, оставляет желать лучшего. Провтыкав в нее цельный день, я-таки написал код, который дописывает новый блок урлов к сайтмапу. Но по-моему, он очень индусский получился.
Дык вот, вопрос - как он должен выглядеть по-идее? Особенно меня напрягает использование 4-х разных nodes содержащих перенос каретки и табуляцию

Исходный сайтмап:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  3.         <url>
  4.                 <loc>http://example.com/</loc>
  5.                 <lastmod>22-01-2011</lastmod>
  6.                 <changefreq>weekly</changefreq>
  7.                 <priority>0.6</priority>
  8.         </url>
  9. </urlset>


Код пхп:

PHP:
скопировать код в буфер обмена
  1. <?
  2. //загружаем файл с существующим sitemap
  3. $doc = DOMDocument::load('http://localhost/sitemap.xml');
  4. //выбираем элементы 'urlset' - на самом деле, он там один
  5. $urlSet = $doc->getElementsByTagName('urlset');
  6.  
  7. //создаем элементы DOM
  8. $url = $doc->createElement("url");
  9. $loc = $doc->createElement('loc', 'http://example.com/foo/bar/');
  10. $lastmod = $doc->createElement('lastmod', '22-01-2011');
  11. $changefreq = $doc->createElement('changefreq', 'weekly');
  12. $priority = $doc->createElement('priority', '0.6');
  13. //те самые индусские элементы...
  14. $n = $doc->createTextNode("\n");
  15. $n2 = $doc->createTextNode("\n\t");
  16. $t = $doc->createTextNode("\t");
  17. $nt = $doc->createTextNode("\n\t\t");
  18. $nt2 = $nt->cloneNode();
  19. $nt3 = $nt->cloneNode();
  20. $nt4 = $nt->cloneNode();
  21.  
  22. //вставляем эелементы в DOM
  23. $urlSet->item(0)->appendChild($t);
  24. $urlNode = $urlSet->item(0)->appendChild($url);
  25. $urlSet->item(0)->appendChild($n);
  26. $urlNode->appendChild($nt);
  27. $urlNode->appendChild($loc);
  28. $urlNode->appendChild($nt2);
  29. $urlNode->appendChild($lastmod);
  30. $urlNode->appendChild($nt3);
  31. $urlNode->appendChild($changefreq);
  32. $urlNode->appendChild($nt4);
  33. $urlNode->appendChild($priority);
  34. $urlNode->appendChild($n2);
  35.  
  36. //записываем DOM обратнов XML
  37. echo $doc->saveXML();
  38. ?>


Итоговый sitemap.xml:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  3.         <url>
  4.                 <loc>http://example.com/</loc>
  5.                 <lastmod>22-01-2011</lastmod>
  6.                 <changefreq>weekly</changefreq>
  7.                 <priority>0.6</priority>
  8.         </url>
  9.         <url>
  10.                 <loc>http://example.com/foo/bar/</loc>
  11.                 <lastmod>22-01-2011</lastmod>
  12.                 <changefreq>weekly</changefreq>
  13.                 <priority>0.6</priority>
  14.         </url>
  15. </urlset>
  16.  


Т.е. в итоге получается все ровно так, как и должно быть. Мне не нравится реализация =)

(Отредактировано автором: 19 Февраля, 2011 - 22:07:53)

 
 Top
Джур
Отправлено: 20 Февраля, 2011 - 00:11:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 423
Дата рег-ции: Март 2007  


Помог: 0 раз(а)




Используйте simplexml для генерации xml - короче будет.
Используйте кеширование - не будет строится sitemap каждый раз при вызове.

По поводу отступов ничего не скажу, всегда решал обратную задачу Улыбка


-----
Тамбовский каджит тебе товарищ
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB