卡拉库姆 / yii2-region-reference
本扩展提供区域参考模块
Requires
- karakum/yii2-common: @dev
- karakum/yii2-grid: ^1.0
- yiisoft/yii2: *
- yiisoft/yii2-bootstrap: *
This package is not auto-updated.
Last update: 2024-09-14 20:09:37 UTC
README
此扩展提供具有以下功能的区域参考模块(后端和前端):后端
- 可定制区域结构(国家-区域-城市...)
- 批量创建区域
- 导入/导出整个国家结构
- 两个后端模块主题:默认 yii2 和 AdminLTE
- 在安装迁移时自动生成区域结构示例数据(可选)
前端 & 后端
- 用于搜索区域的 Ajax 控制器。适用于选择区域的选择2字段。
安装
安装此扩展的首选方式是通过 composer。
运行
php composer.phar require --prefer-dist karakum/yii2-region-reference "*"
或在您的 composer.json
文件的 require 部分添加
"karakum/yii2-region-reference": "*"
配置
在应用程序配置中添加
'modules' => [
...
'regions' => [
'class' => 'karakum\region\BackendModule',
],
...
],
'components' => [
...
'regionManager' => [
'class' => 'karakum\region\RegionManager',
],
...
],
对于前端应用程序,您可以使用 karakum\region\FrontendModule
,它仅提供未授权访问的 Ajax 控制器。karakum\region\BackendModule
已经包含 Ajax 控制器。
默认国家。如果您只想在您的应用程序中使用一个国家,您可以在区域管理器中设置 country
属性(默认为 false
)为国家代码。例如,如果您设置为 RU
,则它将改变管理器函数的一些行为:函数 getRegionFullname
将在输出中省略国家名称,Ajax 输出将仅包含所选国家的区域,并排除国家记录。
迁移
在应用迁移之前,您可以设置 exampleData
属性为 true
(默认为 false
)为 regionManager
组件以生成一些示例数据。如果您这样做,则迁移将创建
- 区域类型。默认:国家,区域,城市。它取决于区域管理器的
defaultTypes
属性。 - 区域级别。默认:国家,国家内的区域,国家内的区域内的城市,国家内的城市。它取决于区域管理器的
defaultLevels
属性。
迁移将创建具有默认名称的表 {{%region}}
、{{%region_level}}
、{{%region_type}}
。要更改它,请使用区域管理器组件的 regionTypeTable
、regionLevelTable
、regionTable
属性。
要应用迁移,您可以将 @karakum/region/migrations
添加到迁移查找列表(如果您使用类似 cyberz/yii2-multipath-migrations
的扩展)或运行
$ yii migrate --migrationPath=@karakum/region/migrations
主题选择
后端模块提供了两个预定义的主题。默认情况下,它使用标准 Yii2 主题。如果您喜欢 AdminLTE 模板并使用扩展 dmstr/yii2-adminlte-asset
,您可以使用预定义的 AdminLTE 主题
'components' => [
...
'view' => [
'theme' => [
'pathMap' => [
'@karakum/region/views' => '@karakum/region/themes/adminlte/views',
],
],
],
...
],
两个主题都使用模块预定义的布局。要使用您自己的布局,只需在模块配置中将 layout
设置为 null
'modules' => [
'regions' => [
'class' => 'karakum\region\BackendModule',
'layout' => null,
],
],
用法
使用 kartik-v Select2 进行自动完成选择区域的示例
<?= $form->field($model, 'region_id')->widget(\kartik\select2\Select2::className(), [
'data' => $model->region ? [$model->region_id => $model->region->name] : [],
'options' => ['placeholder' => 'Select region ...'],
'pluginOptions' => [
'allowClear' => false,
'ajax' => [
'url' => Url::to(['/regions/ajax']),
'dataType' => 'json',
'quietMillis' => 100,
'data' => new JsExpression('function (term, page) {
return {
page_limit: 10,
RegionSearch: { search: term.term, status: ' . \karakum\region\models\Region\Region::STATUS_ACTIVE . ' },
};
}'),
'results' => new JsExpression('function (data, page) {
return { results: data.results };
}'),
],
],
]) ?>