romi45/yii2-seo-behavior

为 Yii2 模型和元标签提供 SEO 行为和辅助工具,使用模式并具有可能性

安装: 274

依赖关系: 0

建议者: 0

安全: 0

星标: 8

关注者: 3

分支: 3

开放性问题: 2

类型:yii2-extension

1.1.1 2021-05-21 07:12 UTC

This package is auto-updated.

Last update: 2024-09-21 14:32:58 UTC


README

本扩展为 SEO 元标签和标题标签提供行为函数。同时提供视图辅助器以注册元标签和标题。

安装

我最喜欢的安装方法是使用 composer

运行以下命令:

$ composer require romi45/yii2-seo-behavior:~1.0

或者将以下内容添加到您的 composer.json 文件的 require 部分:

"romi45/yii2-seo-behavior": "~1.0"

然后运行迁移

php yii migrate --migrationPath="@vendor/romi45/yii2-seo-behavior/migrations"

配置

首先,您需要配置您的模型

use romi45\seoContent\components\SeoBehavior;

class Post extends ActiveRecord
{

    /**
     * @inheritdoc
     */
    public function behaviors() {
        return [
            [
                'seo' => [
                    'class' => SeoBehavior::className(),

                    // This is default values. Usually you can not specify it
                    'titleAttribute' => 'seoTitle',
                    'keywordsAttribute' => 'seoKeywords',
                    'descriptionAttribute' => 'seoDescription'
                ],
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            // ...
            [['seoTitle', 'seoKeywords', 'seoDescription'], 'safe'],
            [['seoTitle'], 'checkSeoTitleIsGlobalUnique'], // It recommends for title to be unique for every page. You can ignore this recommendation - just delete this rule.
            // ...
        ];
    }
}

现在,您可以在表单中使用它了

<?= $form->field($model, 'seoTitle')->textInput(); ?>
<?= $form->field($model, 'seoKeywords')->textInput(); ?>
<?= $form->field($model, 'seoDescription')->textarea(); ?>

如您所见,seoTitleseoKeywordsseoDescription 是可以访问模型 SEO 内容的属性(默认)。

一旦您提交了包含上述字段的表单,它们将被自动保存并链接到我们的 Post 模型。

要在视图中注册元标签并设置标题,请使用以下代码

use romi45\seoContent\components\SeoContentHelper;

/**
 * You can also user partial register functions
 * @see SeoContentHelper::registerAll()
 */
SeoContentHelper::registerAll($model);

不要忘记布局中的标题标签。

<title><?= Html::encode($this->title) ?></title>

模式

您可以在值中使用模式,并将其替换为一些模型属性、应用程序配置属性、应用程序参数或视图参数,其类型由前缀定义。

模型属性

%%model_ATTRIBUTE_NAME%%

例如,%%model_title%% 将被替换为 php $model->title

应用程序全局配置属性

%%appConfig_ATTRIBUTE_NAME%%

例如,%%appConfig_name%% 将被替换为 php Yii::$app->name

应用程序全局参数属性

%%appParam_ATTRIBUTE_NAME%%

例如,%%appParam_contactEmail%% 将被替换为 php Yii::$app->params['contactEmail''

视图全局参数属性

%%viewParam_ATTRIBUTE_NAME%%

例如,%%viewParam_contactEmail%% 将被替换为 php Yii::$app->view->params['contactEmail''

分隔符

%%sep%%

默认情况下,分隔符模式被替换为 '-'。如果您想使用其他分隔符值,您需要识别 php Yii::$app->view->params['titleSeparator'' 参数。

提示:您可以使用 romi45\seoContent\components\SeoPatternHelper::SEPARATOR_VIEW_PARAMETER_KEY 常量值代替 'titleSeparator'。

全局 SEO 模式

您可以使用全局 SEO 模式为所有模型实例设置 is_global 参数为 1seoContent 模型。只需在视图中创建如下表单

<?php $form = \yii\widgets\ActiveForm::begin(); ?>
<?= $form->field($model, 'seoTitle')->textInput(); ?>
<?= $form->field($model, 'seoKeywords')->textInput(); ?>
<?= $form->field($model, 'seoDescription')->textarea(); ?>
<?php \yii\widgets\ActiveForm::end(); ?>

然后在控制器中处理它

/* @var $model Page */
$model = new Page();

/* @var $seo SeoContent */
$seo = $model->getSeoContentModel();
if ($seo->load(Yii::$app->request->post())) {
    $seo->is_global = 1;
    $seo->save();
}

SQL 缓存

要启用 SQL 查询缓存,请将行为配置中的 enableSqlQueryCache 参数设置为 true。您还可以通过 sqlQueryCacheDuration 参数设置缓存持续时间。示例

/**
 * @inheritdoc
 */
public function behaviors() {
    return [
        'seo' => [
            'class' => SeoBehavior::className(),
            'enableSqlQueryCache' => true,
            'sqlQueryCacheDuration' => 24*60*60*30*12, // 1 year
        ]
    ];
}

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件