thyseus/yii2-favorites

为Yii2提供通用收藏管理

安装次数: 1,184

依赖项: 0

建议者: 0

安全: 0

星标: 0

分支: 0

类型:yii2-extension

v0.1.0 2017-02-15 09:54 UTC

This package is auto-updated.

Last update: 2024-08-29 01:40:51 UTC


README

Yii 2框架的通用收藏管理器。每个ActiveRecord模型都可以被收藏并允许授权用户稍后访问。只包含一个名为'favorites'的表,用于存储所有内容。

安装

$ composer require thyseus/yii2-favorites
$ php yii migrate/up --migrationPath=@vendor/thyseus/yii2-favorites/migrations

配置

将以下行添加到您的配置文件中

'modules' => [
    'favorites' => [
        'class' => 'thyseus\favorites\Module',
    ],
],

集成到您的应用程序中

使用

use thyseus\favorites\models\Favorite;

$model = CurrentModel::findOne(57);
echo $this->render('@vendor/thyseus/yii2-favorites/views/favorites/_button', [
    'model' => CurrentModel::className(),
    'target' => $model->slug
]);

在视图文件中显示“设置为收藏”/“移除收藏”切换按钮,以便用户可以向模型添加收藏。

注意,如果您在应用程序配置中设置别名,则可以缩短调用

'aliases' => [
    '@favorites' => '@app/vendor/thyseus/yii2-favorites'
],

并且可以像这样调用视图

echo $this->render('@favorites/views/favorites/_button', [

如果模型不是默认通过'ID'列来标识,例如如果您使用别名,您可以在模型内部定义标识符属性如下

public function identifierAttribute()
{
    return 'slug';
}

如果yii2-favorites自动创建URL失败,您可以手动附加URL

use thyseus\favorites\models\Favorite;

$model = CurrentModel::findOne(57);
echo $this->render('@vendor/thyseus/yii2-favorites/views/favorites/_button', [
    'model' => CurrentModel::className(),
    'target' => $model->id,
    'icon' => '<i class="fa fa-users" aria-hidden="true"></i>', // optional
    'url' => Url::to(['fancy-url', 'id' => 1337]) ,
]);

使用第四个参数设置自定义的目标属性

use thyseus\favorites\models\Favorite;

$model = CurrentModel::findOne(57);

echo $this->render('@vendor/thyseus/yii2-favorites/views/favorites/_button', [
    'model' => CurrentModel::className(),
    'target' => $model->id,
    'target_attribute' => 'i-am-referenced-by-this-column',
]);

如果您想使用复合标签标识符,可以这样做

public function getName()
{
    return $this->firstname . ' ' . $this->lastname;
}

您可以使用此代码示例在NavBar中创建包含收藏的动态菜单

echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right'],
    'encodeLabels' => false,
    'items' => [
        ['label' => '<span class="glyphicon glyphicon-bookmark"></span>', 'options' => ['class' => 'favorites-menu clickable', 'style' => 'cursor: pointer;'], 'url' => false, 'visible' => !$user->isGuest, 'items' => ['' => '']],
      ]
    ]);
$this->registerJs("
    $('.favorites-menu').click(function() {
        $.getJSON('".Url::to(['//favorites/favorites/json'])."', function (data) {
            dd = $('.favorites-menu').find('.dropdown-menu');
            dd.html('');
            dd.append('<li><a href=\"".Url::to(['//favorites/favorites/index'])."\">Manage favorites</a></li>');
            data.forEach(function(elem) {
              dd.append('<li>' + (elem.icon ? elem.icon : '') + ' <a href=\"' + elem.url + '\">' + elem.title.substring(0, 60) + '</a></li>');
             });
        });
    });
");
.favorites-menu li a { display: inline; padding: 0; }
.favorites-menu .dropdown-menu { padding: 10px; }

路由

您可以使用以下路由来访问收藏模块

许可证

Yii2-favorites遵循GPLv3许可证发布。