zhelyabuzhsky/yii2-sitemap

一个用于生成sitemap.xml的Yii2工具。

安装次数: 34,574

依赖: 1

建议者: 0

安全: 0

星标: 35

关注者: 6

分支: 11

公开问题: 0

类型:yii2-extension

1.2.0 2019-02-21 04:15 UTC

This package is auto-updated.

Last update: 2024-09-22 15:56:33 UTC


README

Build Status Total Downloads

一个通过Yii2控制台命令生成大型网站sitemap文件的Yii2扩展

安装

安装此扩展的首选方式是通过 composer

$ php composer.phar require zhelyabuzhsky/yii2-sitemap

或添加以下内容到你的 composer.json 文件的 require 部分。

"zhelyabuzhsky/yii2-sitemap": "^1.1"

特性

  • 生成多个sitemap(大型网站)
  • 创建索引sitemap文件
  • 对.xml文件进行Gzip压缩
  • 支持不允许的url(通过正则表达式数组)

配置

1. 在控制台配置中配置 urlManager

'urlManager' => [
    'hostInfo' => 'https://example.com',
    'baseUrl' => '/',
    'rules' => [
      // ...
    ],
],

注意 对于Yii2控制台应用,需要同时配置 hostInfobaseUrl 参数。

注意 通常,urlManagerrules 部分会重复你的前端 urlManager 配置,因此你可以在控制台配置中合并它们(参见 yiisoft/yii2#1578 (comment)

显示详细信息

console/main.php

$frontendUrlManager = require(__DIR__ . '/../../frontend/config/UrlManager.php');
//...
'urlManager' => array_merge($frontendUrlManager, [
    'hostInfo' => 'https://example.com'
]),

frontend/config/UrlManager.php

<?php
return [
    'baseUrl' => '/',
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
      //...
    ],
];

?>

2. 在控制台配置的 components 部分配置 Sitemap 组件

'components' => [
  'sitemap' => [
    'class' => '\zhelyabuzhsky\sitemap\components\Sitemap',
  ],
],

使用额外 Sitemap 参数的示例

'components' => [
  'sitemap' => [
    'class' => '\zhelyabuzhsky\sitemap\components\Sitemap',
    'maxUrlsCountInFile' => 10000,
    'sitemapDirectory' => 'frontend/web',
    'optionalAttributes' => ['changefreq', 'lastmod', 'priority'],
    'maxFileSize' => '10M',
  ],
 ],

其中

  • maxUrlsCountInFile - 单个sitemap文件中url的最大数量;
  • sitemapDirectory - 放置sitemap文件的目录;
  • optionalAttributes - 使用可选属性列表;
  • maxFileSize - 最大文件大小。零表示无限制。因此,你可以指定以下缩写:k - 千字节和 m - 兆字节。默认为10m。

使用方法

1. 为你想要在sitemap中使用的模型实现 SitemapEntityInterface

显示示例

common/models/Category.php

use yii\db\ActiveRecord;
use zhelyabuzhsky\sitemap\models\SitemapEntityInterface;

class Category extends ActiveRecord implements SitemapEntityInterface
{
    /**
     * @inheritdoc
     */
    public function getSitemapLastmod()
    {
        return date('c');
    }
    /**
     * @inheritdoc
     */
    public function getSitemapChangefreq()
    {
        return 'daily';
    }
    /**
     * @inheritdoc
     */
    public function getSitemapPriority()
    {
        return 0.5;
    }
    /**
     * @inheritdoc
     */
    public function getSitemapLoc()
    {
        // Use urlManager rules to create urls
        return $url = Yii::$app->urlManager->createAbsoluteUrl([
            'page/view',
            'pageSlug' => $this->slug,
        ]);
        // or directly
        // return 'https:///' . $this->slug;
    }
    /**
     * @inheritdoc
     */
    public static function getSitemapDataSource()
    {
        return self::find();
    }
}

2. 创建用于控制台命令的Yii2 控制器

use yii\console\Controller;

class SitemapController extends Controller
{
  public function actionCreate()
  {
    \Yii::$app->sitemap
      ->addModel(Item::className())
      ->addModel(Category::className(), \Yii::$app->db) // Also you can pass \yii\db\Connection to the database connection that you need to use
      ->setDisallowUrls([
        '#url1#',
        '#url2$#',
      ])
      ->create();
    }
}

3. 运行控制台命令

php yii sitemap/create

测试

设置环境变量 SERVER_NAME(例如 https://example.com

$ ./vendor/bin/phpunit

安全

如果你发现任何与安全相关的问题,请通过电子邮件 zhelyabuzhsky@icloud.com 联系我,而不是使用问题跟踪器。

致谢

许可证

GNU通用公共许可证,版本3。请参阅 许可证文件 以获取更多信息。