sonrisa / sitemap-component
独立的、100%符合标准的站点地图构建器。适用于PHP5.3及以上版本。
3.0.3
2015-07-25 10:33 UTC
Requires
- php: >=5.4
Requires (Dev)
- fabpot/php-cs-fixer: dev-master
- fiunchinho/phpunit-randomizer: 1.0.*@dev
- phpunit/phpunit: ~4.2
This package is not auto-updated.
Last update: 2024-09-14 13:18:13 UTC
README
为页面、图片和媒体文件构建站点地图,并提供将它们提交到搜索引擎的类。
1.安装
推荐通过 Composer 安装 Sitemap 组件。运行以下命令进行安装:
php composer.phar require nilportugues/sitemap-component
2.功能
此组件可以构建受主要搜索引擎(如Google和Bing)支持的站点地图,支持xml和gzip格式。
站点地图组件 能够构建以下类型的站点地图:
站点地图索引
作为索引的站点地图,包含对其他sitemap.xml文件的引用。更多文档可在此处找到:这里。
基本站点地图
文本内容站点地图,是互联网上最常见的站点地图类型。更多文档可在此处找到:这里。
图片站点地图
图片的站点地图。更多文档可在此处找到:这里。
视频站点地图
视频的站点地图。更多文档可在此处找到:这里。
媒体站点地图
视频站点地图的替代品。更多文档可在此处找到:这里。
新闻站点地图
新闻文章的站点地图。更多文档可在此处找到:这里。
符合标准
站点地图组件遵循100%的标准,这意味着它严格遵循约束条件
- 站点地图文件不能包含 每个文件50000个项目。
- 站点地图文件不能超过 50 MBytes,未压缩。
- 图片站点地图文件不能包含超过 1000个图片 每个code><url>
3.自动提交站点地图
此组件还提供了一种方法将生成的站点地图提交到以下搜索引擎
- Bing
4.使用方法
4.1 - 提交到搜索引擎
<?php use NilPortugues\Sitemap\SubmitSitemap; // $status = ['google' => true, 'bing' => true]; if everything went OK. $status = SubmitSitemap::send('http://example.com/sitemap-index.xml');
4.2 - 构建站点地图索引
为了使用站点地图索引,您需要首先构建站点地图文件。请参阅4.3、4.4和4.5。
创建
use NilPortugues\Sitemap\IndexSitemap; use NilPortugues\Sitemap\Item\Index\IndexItem; use NilPortugues\Sitemap\SitemapException; try { $sitemap = new IndexSitemap('path/to/folder','sitemap.index.xml'); $item = new IndexItem('http://www.example.com/sitemap.content.xml'); $item->setLastMod('2005-05-10T17:33:30+08:00'); //Optional $sitemap->add($item); $item = new IndexItem('http://www.example.com/sitemap.media.xml'); $item->setLastMod('2005-05-10T17:33:30+08:00'); $sitemap->add($item); $sitemap->build(); } catch (SitemapException $e) { echo $e->getMessage(); }
输出
<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>http://www.example.com/sitemap.content.xml</loc> <lastmod>2005-05-10T17:33:30+08:00</lastmod> </sitemap> <sitemap> <loc>http://www.example.com/sitemap.media.xml</loc> <lastmod>2005-05-10T17:33:30+08:00</lastmod> </sitemap> </sitemapindex>
4.3 - 构建简单的站点地图
创建
use NilPortugues\Sitemap\Sitemap; use NilPortugues\Sitemap\Item\Url\UrlItem; use NilPortugues\Sitemap\SitemapException; try { $sitemap = new Sitemap('path/to/folder','sitemap.index.xml'); $item = new UrlItem('http://www.example.com/'); $item->setPriority('1.0'); //Optional $item->setChangeFreq('daily'); //Optional $item->setLastMod('2014-05-10T17:33:30+08:00'); //Optional $sitemap->add($item); $item = new UrlItem('http://www.example.com/blog'); $item->setPriority('0.9'); $item->setChangeFreq('monthly'); $item->setLastMod('2014-05-10T17:33:30+08:00'); $sitemap->add($item); $item = new UrlItem('http://www.example.com/contact'); $item->setPriority('0.8'); $item->setChangeFreq('never'); $item->setLastMod('2014-05-10T17:33:30+08:00'); $sitemap->add($item); $sitemap->build(); } catch (SitemapException $e) { echo $e->getMessage(); }
输出
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://www.example.com/</loc> <lastmod>2014-05-10T17:33:30+08:00</lastmod> <changefreq>daily</changefreq> <priority>1.0</priority> </url> <url> <loc>http://www.example.com/blog</loc> <lastmod>2014-05-10T17:33:30+08:00</lastmod> <changefreq>monthly</changefreq> <priority>0.9</priority> </url> <url> <loc>http://www.example.com/contact</loc> <lastmod>2014-05-10T17:33:30+08:00</lastmod> <changefreq>never</changefreq> <priority>0.8</priority> </url> </urlset>
4.4 - 构建包含图片的站点地图
创建
use NilPortugues\Sitemap\ImageSitemap; use NilPortugues\Sitemap\Item\Image\ImageItem; use NilPortugues\Sitemap\SitemapException; try { $sitemap = new ImageSitemap('path/to/folder','sitemap.image.xml'); $item = new ImageItem('http://www.example.com/logo.png'); $item->setTitle('Example.com logo'); //Optional $sitemap->add($item,'http://www.example.com/'); $item = new ImageItem('http://www.example.com/main.png'); $item->setTitle('Main image'); //Optional $sitemap->add($item,'http://www.example.com/'); $sitemap->build(); } catch (SitemapException $e) { echo $e->getMessage(); }
输出
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"> <url> <loc>http://www.example.com/</loc> <image:image> <image:loc><![CDATA[http://www.example.com/logo.png]]></image:loc> <image:title><![CDATA[Example.com logo]]></image:title> </image:image> <image:image> <image:loc><![CDATA[http://www.example.com/main.png]]></image:loc> <image:title><![CDATA[Main image]]></image:title> </image:image> </url> </urlset>
4.5 - 构建包含视频的站点地图
创建
use NilPortugues\Sitemap\VideoSitemap; use NilPortugues\Sitemap\Item\Video\VideoItem; use NilPortugues\Sitemap\SitemapException; try { $sitemap = new VideoSitemap('path/to/folder','sitemap.video.xml'); $item = new VideoItem( 'Grilling steaks for summer', //Title 'http://www.example.com/video123.flv', //URL 'http://www.example.com/videoplayer.swf?video=123', //Player URL 'yes', //Optional 'ap=1' //Optional ); //Optional Values $item->setDescription('Alkis shows you how to get perfectly done steaks everytime'); $item->setThumbnailLoc('http://www.example.com/thumbs/123.jpg'); $item->setDuration(600); $item->setExpirationDate('2009-11-05T19:20:30+08:00'); $item->setRating(4.2); $item->setViewCount(12345); $item->setPublicationDate('2007-11-05T19:20:30+08:00'); $item->setFamilyFriendly('yes'); $item->setRestriction('IE GB US CA', 'allow'); $item->setGalleryLoc('http://cooking.example.com', 'Cooking Videos'); $item->setPrice('0.99','EUR','rent','HD'); $item->setPrice('0.75','EUR','rent','SD'); $item->setCategory('cooking'); $item->setTag(array('action','drama','entrepreneur')); $item->setRequiresSubscription('yes'); $item->setUploader('GrillyMcGrillerson', 'http://www.example.com/users/grillymcgrillerson'); $item->setPlatform('web mobile tv', 'allow'); $item->setLive('no'); $sitemap->add($item,'http://www.example.com/'); $files = $sitemap->build(); } catch (SitemapException $e) { echo $e->getMessage(); }
输出
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"> <url> <loc>http://www.example.com/</loc> <video:video> <video:thumbnail_loc><![CDATA[http://www.example.com/thumbs/123.jpg]]></video:thumbnail_loc> <video:title><![CDATA[Grilling steaks for summer]]></video:title> <video:description><![CDATA[Alkis shows you how to get perfectly done steaks everytime]]></video:description> <video:content_loc><![CDATA[http://www.example.com/video123.flv]]></video:content_loc> <video:duration><![CDATA[600]]></video:duration> <video:expiration_date><![CDATA[2009-11-05T19:20:30+08:00]]></video:expiration_date> <video:publication_date><![CDATA[2007-11-05T19:20:30+08:00]]></video:publication_date> <video:restriction relationship="allow">IE GB US CA</video:restriction> <video:gallery_loc title="Cooking Videos">http://cooking.example.com</video:gallery_loc> <video:price currency="EUR" type="rent" resolution="HD" >0.99</video:price> <video:price currency="EUR" type="rent" resolution="SD" >0.75</video:price> <video:tag>action</video:tag> <video:tag>drama</video:tag> <video:tag>entrepreneur</video:tag> <video:requires_subscription><![CDATA[yes]]></video:requires_subscription> <video:uploader>GrillyMcGrillerson</video:uploader> <video:platform relationship="allow">web mobile tv</video:platform> <video:live><![CDATA[no]]></video:live> </video:video> </url> </urlset>
4.6 - 构建媒体站点地图(mRSS feed作为站点地图)
创建
use NilPortugues\Sitemap\MediaSitemap; use NilPortugues\Sitemap\Item\Media\MediaItem; use NilPortugues\Sitemap\SitemapException; try { $sitemap = new MediaSitemap('path/to/folder','sitemap.media.xml'); $sitemap->setTitle('Media RSS de ejemplo'); $sitemap->setLink('http://www.example.com/ejemplos/mrss/'); $sitemap->setDescription('Ejemplo de MRSS'); $item = new MediaItem('http://www.example.com/examples/mrss/example1.html'); //Optional $item->setContent('video/x-flv', 120); $item->setPlayer('http://www.example.com/shows/example/video.swf?flash_params'); $item->setTitle('Barbacoas en verano'); $item->setDescription('Consigue que los filetes queden perfectamente hechos siempre'); $item->setThumbnail('http://www.example.com/examples/mrss/example1.png', 120, 160); $sitemap->add($item); $item = new MediaItem('http://www.example.com/examples/mrss/example2.html'); $item->setContent('video/x-flv', 120); $item->setPlayer('http://www.example.com/shows/example/video.swf?flash_params'); $item->setTitle('Barbacoas en invierno'); $item->setDescription('Consigue unos filetes frios'); $item->setThumbnail('http://www.example.com/examples/mrss/example2.png', 120, 160); $sitemap->add($item); $sitemap->build(); } catch (SitemapException $e) { echo $e->getMessage(); }
输出
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dcterms="http://purl.org/dc/terms/"> <channel> <title>Media RSS de ejemplo</title> <link>http://www.example.com/ejemplos/mrss/</link> <description>Ejemplo de MRSS</description> <item xmlns:media="http://search.yahoo.com/mrss/" xmlns:dcterms="http://purl.org/dc/terms/"> <link>http://www.example.com/examples/mrss/example1.html</link> <media:content type="video/x-flv" duration="120"> <media:player url="http://www.example.com/shows/example/video.swf?flash_params" /> <media:title>Barbacoas en verano</media:title> <media:description>Consigue que los filetes queden perfectamente hechos siempre</media:description> <media:thumbnail url="http://www.example.com/examples/mrss/example1.png" height="120" width="160"/> </media:content> </item> <item xmlns:media="http://search.yahoo.com/mrss/" xmlns:dcterms="http://purl.org/dc/terms/"> <link>http://www.example.com/examples/mrss/example2.html</link> <media:content type="video/x-flv" duration="240"> <media:player url="http://www.example.com/shows/example/video.swf?flash_params" /> <media:title>Barbacoas en invierno</media:title> <media:description>Consigue unos filetes frios</media:description> <media:thumbnail url="http://www.example.com/examples/mrss/example2.png" height="120" width="160"/> </media:content> </item> </channel> </rss>
4.7 - 构建新闻站点地图
创建
use NilPortugues\Sitemap\NewsSitemap; use NilPortugues\Sitemap\Item\News\NewsItem; use NilPortugues\Sitemap\SitemapException; try { $sitemap = new NewsSitemap('path/to/folder','sitemap.news.xml'); $item = new NewsItem( 'http://www.example.org/business/article55.html', //URL 'Companies A, B in Merger Talks', //Title '2008-12-23', //Publication Date 'The Example Times', //Publication Name 'en' //locale ); //Optional Values $item->setAccess('Subscription'); $item->setKeywords('business, merger, acquisition, A, B'); $item->setStockTickers('NASDAQ:A, NASDAQ:B'); $item->setGenres('PressRelease, Blog'); $sitemap->add($item); $sitemap->build(); } catch (SitemapException $e) { echo $e->getMessage(); }
输出
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"> <url> <loc>http://www.example.org/business/article55.html</loc> <news:news> <news:publication> <news:name>The Example Times</news:name> <news:language>en</news:language> </news:publication> <news:access>Subscription</news:access> <news:genres>PressRelease, Blog</news:genres> <news:publication_date>2008-12-23</news:publication_date> <news:title>Companies A, B in Merger Talks</news:title> <news:keywords>business, merger, acquisition, A, B</news:keywords> <news:stock_tickers>NASDAQ:A, NASDAQ:B</news:stock_tickers> </news:news> </url> </urlset>
5.完全测试。
测试已使用PHPUnit和Travis-CI进行。所有代码都已测试,与PHP 5.4到PHP 5.6以及Facebook的HHVM兼容。
6.有疑问吗?
--
7.作者
Nil Portugués Calderó