Cartographer
, (*1)
, (*2)
A sitemap generation tool for PHP following the Sitemap Protocol v0.9., (*3)
Cartographer can handle Sitemaps of any size. When generating sitemaps with more than 50,000
entries (the limit), the sitemap becomes a "map of maps" (i.e. nested sitemaps)., (*4)
Supported PHP/HHVM Versions
-
PHP: >= 5.4 (including 5.6 beta1)
-
HHVM: >= 3.0.0
Installation
Composer CLI
composer require tackk/cartographer:1.0.*
composer.json
``` json
{
"require": {
"tackk/cartographer": "1.0.*"
}
}, (*5)
## Basic Sitemap
If you have a sitemap that is under 50,000 items, you can just use the Sitemap class, and avoid the Sitemap
Generator.
``` php
use Tackk\Cartographer\Sitemap;
use Tackk\Cartographer\ChangeFrequency;
$sitemap = new Tackk\Cartographer\Sitemap();
$sitemap->add('http://foo.com', '2005-01-02', ChangeFrequency::WEEKLY, 1.0);
$sitemap->add('http://foo.com/about', '2005-01-01');
// Write it to a file
file_put_contents('sitemap.xml', (string) $sitemap);
// or simply echo it:
header ('Content-Type:text/xml');
echo $sitemap->toString();
Output
``` xml
http://foo.com
2005-01-02T00:00:00+00:00
weekly
1
http://foo.com/about
2005-01-01T00:00:00+00:00
, (*6)
## Basic Sitemap Index
If you want to build a Sitemap Index, separate from the Sitemap Generator, you can!
``` php
$sitemapIndex = new Tackk\Cartographer\SitemapIndex();
$sitemapIndex->add('http://foo.com/sitemaps/sitemap.1.xml', '2012-01-02');
$sitemapIndex->add('http://foo.com/sitemaps/sitemap.2.xml', '2012-01-02');
// Write it to a file
file_put_contents('sitemap.xml', (string) $sitemapIndex);
// or simply echo it:
header ('Content-Type:text/xml');
echo $sitemapIndex->toString();
Output
``` xml
http://foo.com/sitemaps/sitemap.1.xml
2012-01-02T00:00:00+00:00
http://foo.com/sitemaps/sitemap.2.xml
2012-01-02T00:00:00+00:00
, (*7)
## Sitemap Factory
The Sitemap Factory create Sitemaps and Sitemap Indexes and writes them to the Filesystem.
Is is can be used to generate full Sitemaps with more than **50,000** URLs.
If more than one sitemap is generated, it will create a Sitemap Index automatically.
### Instantiating
The factory uses [Flysystem](http://flysystem.thephpleague.com/) to write the sitemaps. This
means you can write the sitemaps to Local Disk, S3, Dropbox, wherever you want.
``` php
<?php
use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\Local as LocalAdapter;
$adapter = new LocalAdapter(__DIR__.'/sitemaps');
$filesystem = new Filesystem($adapter);
$sitemapFactory = new Tackk\Cartographer\SitemapFactory($filesystem);
Base URL
The Base URL is used when generating the Sitemap Indexes, and for the returned entry point URL., (*8)
You can set the Base URL:, (*9)
``` php
$sitemapFactory->setBaseUrl('http://foo.com/sitemaps/');, (*10)
You can get the current base URL using `getBaseUrl()`.
### Creating a Sitemap
To create a sitemap you use the `createSitemap` method. This method requires an `Iterator` as
its only parameter.
``` php
<?php
use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\Local as LocalAdapter;
$adapter = new LocalAdapter(__DIR__.'/sitemaps');
$filesystem = new Filesystem($adapter);
$sitemapFactory = new Tackk\Cartographer\SitemapFactory($filesystem);
// Create an Iterator of your URLs somehow.
$urls = get_url_iterator();
// Returns the URL to the main Sitemap/Index file
$mainSitemap = $sitemapFactory->createSitemap($urls);
Return Value
The two creation methods (createSitemap
and createSitemapIndex
) will return the URL
of the root sitemap file. If there is only 1 sitemap created, it will return just that URL.
If multiple sitemaps are created, then a Sitemap Index is generated and the URL to that is returned., (*11)
List of Created Files
You can get a list (array) of files the Factory has created by using the getFilesCreated
method., (*12)
``` php
$files = $sitemapFactory->getFilesCreated();, (*13)
## Running Tests
*This assumes you have ran `composer update`.*
From the repository root, run:
vendor/bin/phpunit
```, (*14)