Yii2 的select多级选择器实现

平时有多级栏目需要选择的时候需要生成多级栏目选择框

如图,栏目表格式如

CREATE TABLE `yun_categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent` int(11) DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '名字',
  `slug` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` varchar(1000) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `pinyin` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `letter` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `frequency` int(11) NOT NULL DEFAULT '0',
  `sort` smallint(5) NOT NULL DEFAULT '0',
  `allow_publish` tinyint(1) DEFAULT '1' COMMENT '是否允许发布内容',
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `yun_categories_fk` (`parent`),
  CONSTRAINT `yun_categories_fk` FOREIGN KEY (`parent`) REFERENCES `yun_categories` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SET FOREIGN_KEY_CHECKS=1;

模型里的关系定义如下

/**
     * 获取父栏目
     * @return \yii\db\ActiveQuery
     */
    public function getCategoryParent()
    {
        return $this->hasOne(self::className(), ['id' => 'parent']);
    }

    /**
     * 获取子栏目
     * @return \yii\db\ActiveQuery
     */
    public function getCategories()
    {
        return $this->hasMany(static::className(), ['parent' => 'id']);
    }

我们在前端想要生成这种下拉列表。

$categories = Category::find()->select(['id', 'name', 'pinyin'])->where(['parent'=>null])->with('categories')->orderBy(['sort' => SORT_ASC])->asArray()->all();

foreach ($categories as $id => $category) {
        $categories[$id]['categories'] = ArrayHelper::map($category['categories'], 'id', 'name');
    }
    echo $form->field($model, 'category_id')->dropDownList(ArrayHelper::map($categories, 'name', 'categories'));

按上面的代码即可生成这种下拉列表。

未经允许不得转载:SuperMan's blog » Yii2 的select多级选择器实现

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址