inblank/yii2-seobility

用于管理ActiveRecord SEO数据的Yii2行为

安装: 52

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 2

类型:yii2-extension

0.1.1 2016-05-15 13:54 UTC

This package is not auto-updated.

Last update: 2024-09-20 22:02:48 UTC


README

Build Status Packagist Version Code Coverage Code Quality GitHub license

俄语版本的此文档可在此处找到。

yii2-seobility行为允许您管理ActiveRecord模型的SEO数据。对于每个模型,您都可以存储多个包含SEO数据的记录,并根据条件进行选择。如果未找到符合条件的数据,则将返回默认数据,如果没有默认数据,则返回空值的数据。

每个SEO数据条目包含以下字段:titlekeywordsdescription

安装

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

导航到项目文件夹并运行控制台命令

$ composer require inblank/yii2-seobility

或添加

"inblank/yii2-seobility": "~0.1"

到您的composer.json文件的require部分。

配置

数据库

行为使用ActiveRecord模型的数据库连接来存储SEO数据。行为不会创建或检查所需表。必须在使用之前创建表。

要存储和检索数据的表名,行为基于附加到ActiveRecord模型的表名创建。名称是通过在ActiveRecord模型的表名后添加后缀_seo来创建的。要获取模型的表名,模型使用ActiveRecord::tableName()方法。

示例

  • 如果模型使用表model,则行为将使用表model_seo
  • 如果模型使用表{{%model}},则行为将使用表{{%model_seo}}

要创建表,请使用以下SQL查询,将model_seo替换为所需的表名

查询使用MySQL语法

CREATE TABLE `model_seo`(
    `model_id` INT NOT NULL DEFAULT 0,
    `condition` INT NOT NULL DEFAULT 0,
    `title` TEXT NOT NULL,
    `keywords` TEXT NOT NULL,
    `description` TEXT NOT NULL,
    
    PRIMARY KEY (`model_id`, `condition`)
);

模型

要使用行为,只需将其附加到ActiveRecord模型,如Yii2文档中所述

use inblank\seobility\SeobilityBehavior;

/**
 * ...
 */
class Model extends \yii\db\ActiveRecord
{
    public function behaviors()
    {
        return [
            SeobilityBehavior::className(),
        ];
    }
}

如果您已正确创建用于存储SEO数据的表,则配置完成。

使用方法

配置成功后,您可以使用行为方法来管理ActiveRecord模型的SEO数据。

设置默认SEO数据

默认SEO数据条件为=0

要设置默认SEO数据

$model = Model::findOne(1);

// set data by the behavior method
$model->setSeobility([
    'title' => 'SEO title for model', 
    'keywords' => 'model, seo, keywords, yii2', 
    'description' => 'Simple model with SEO data' 
]);

// ... or by direct access
$model->seobility = [
    'title' => 'SEO title for model', 
    'keywords' => 'model, seo, keywords, yii2', 
    'description' => 'Simple model with SEO data' 
];

// not necessarily set all field for SEO data
// code below set only `title` field
$model->seobility = [
    'title' => 'Chnaged SEO title', 
];

// need to save model to store all setting SEO data
$model->save();

保存模型后,默认SEO数据将包含定义的值,并且这些值将随时可用。

注意:如果模型未通过验证或未保存,则SEO数据也不会保存。

设置带有条件的SEO数据

要设置带有条件的SEO数据

$model = Model::findOne(1);

// setting a data with condition is only possible through the method of behavior
// set SEO data for condition=1
$model->setSeobility([
    'title' => 'Another SEO title', 
    'keywords' => 'model, seo, keywords, yii2', 
    'description' => 'This description is different' 
], 1);

// need to save model to store all setting SEO data
$model->save();

注意:如果模型未通过验证或未保存,则SEO数据也不会保存。

获取默认SEO数据

要获取默认SEO数据

$model = Model::findOne(1);

// getting default data through the method of behavior
$seo = $model->getSeobility();

// ... or by direct access
$seo = $model->seobility;

获取数据后,变量$seo将包含一个包含键titlekeywordsdescription的数组。

即使未指定数据,也会获取数据。在这种情况下,所有数组字段都将包含空值。

获取带有条件的SEO数据

要获取带有条件的SEO数据

$model = Model::findOne(1);

// getting data with condition is only possible through the method of behavior
$seo = $model->getSeobility(1);

将获取condition=1的SEO数据,如果没有这样的数据,则获取默认SEO数据,如果没有默认数据,则为空。

通过方法参数,您可以指定如果请求的数据未找到时获取哪些数据。

// not get the default data if data with `condition=1` not found 
// i.e. if the data with `condition=1` will not be found, it returns 
// an array with empty values
$seo = $model->getSeobility(1, false);

// get data with `condition=2` if not found  data with `condition=1` 
// and if not found data with `condition=1` will return an array with empty values
$seo = $model->getSeobility(1, true, 2);

获取所有SEO数据

要获取所有SEO数据

$model = Model::findOne(1);

// getting all data
$seo = $model->getAllSeobility();

获取数据后,变量 $seo 将包含一个包含所有SEO数据的数组。数组的索引是 condition 的值。

删除默认SEO数据

要删除默认SEO数据

$model = Model::findOne(1);

// remove default data
$seo = $model->deleteSeobility();

注意:请注意,删除操作立即执行,不需要 $model->save() 方法。删除的数据无法恢复。

根据条件删除SEO数据

要删除符合条件的SEO数据

$model = Model::findOne(1);

// remove data with condition=1
$seo = $model->deleteSeobility(1);

注意:请注意,删除操作立即执行,不需要 $model->save() 方法。删除的数据无法恢复。

删除模型的所有SEO数据

要删除模型的所有SEO数据

$model = Model::findOne(1);

// remove ALL model's SEO data
$seo = $model->deleteAllSeobility();

注意:请注意,删除操作立即执行,不需要 $model->save() 方法。删除的数据无法恢复。