mima/sitemap-generator

为您的网站创建和写入sitemap.xml的库

v1.0.2 2016-09-27 15:53 UTC

This package is auto-updated.

Last update: 2024-09-13 23:26:21 UTC


README

Build Status

生成sitemap.xml的库。易于使用且非常可扩展。它允许您创建自定义数据源。

安装

使用命令行通过composer安装

composer require mima/sitemap-generator

或者将依赖项添加到composer.json中的require部分

{
    "require": {
        "mima/sitemap-generator": "~1.0"
    }
}

使用方法

要开始,您必须创建数据提取器。为此,定义一个继承自SitemapRenderer\Extractor\DataExtractorInterface的子类。

例如,我们创建以下数据提取器

namespace MyNamespace\SitemapGenerator\Extractor;

use SitemapGenerator\Extractor\DataExtractorInterface;
use SitemapGenerator\Entity\SitemapItem;

class FromArrayDataExtractor implements DataExtractorInterface
{
    /**
     * This method return \Generator, which at each iteration returns instance of SitemapItem
     *
     * @return |Generator
     */
    public function extractData()
    {
        // load data and each them
        foreach ($this->loadData() as $data) {
            // create instance of SitemapItem based on loaded data
            $item = new SitemapItem('/page-'.$data['id'], new \DateTime($data['created_at']));

            // return this instance
            yield $item;
        }
    }

    /**
     * Load data from array, as samle.
     * It can be a database query, or query to external API.
     *
     * @return array
     */
    protected function loadData()
    {
        return [
            [
                'id' => 1,
                'created_at' => '2016-09-12 00:00:00'
            ],
            [
                'id' => 2,
                'created_at' => '2016-09-12 03:40:00'
            ]
        ];
    }
}

现在我们可以生成一个sitemap.xml

use SitemapGenerator\Factory\SimpleGeneratorFactory;
use MyNamespace\SitemapGenerator\Extractor\FromArrayDataExtractor;

/**
 * This is a directory, where the sitemap will be saved.
 * It must exist in the file system and be available for recording.
 */
$directoryToSaveSitemap = './web';

// Create instance of extractor, which we defined earlier
$extractor = new FromArrayDataExtractor();

// Create instance of factory for simple sitemap generator
$simpleGeneratorFactory = new SimpleGeneratorFactory();

// Create generator by factory
$generator = $simpleGeneratorFactory->createGenerator($directoryToSaveSitemap);

/**
 * Generate sitemap by data, which return extractor.
 * This method return path to generated file.
 */
$filePath = $generator->generate($extractor);