javascript - 在 Yii2 中使用 Clipboard.js

标签 javascript php yii2 clipboard.js

我已经安装了扩展 \supplyhog\ClipboardJs\ClipboardJsWidget 看起来工作正常。

但我正在努力让它在 gridview 中工作。

由于扩展的代码已经使用了一个小部件,而 gridview 本身就是一个小部件,所以我认为这造成了冲突。

gridview之外的建议代码是这样的:

//Button to copy text
<?= \supplyhog\ClipboardJs\ClipboardJsWidget::widget([
    'text' => "Hello World",
    // 'label' => 'Copy to clipboard',
    // 'htmlOptions' => ['class' => 'btn'],
    // 'tag' => 'button',
]) ?>

//Button to copy text from input id
<?= \supplyhog\ClipboardJs\ClipboardJsWidget::widget([
    'inputId' => "#input-url",
    // 'cut' => false, // Cut the text out of the input instead of copy?
    // 'label' => 'Copy to clipboard',
    // 'htmlOptions' => ['class' => 'btn'],
    // 'tag' => 'button',
]) ?>

如何将其集成到 Gridview 中?

示例-

Copy to clipboard

它只是这样显示 - 第三个单元格是剪贴板代码的结果。

enter image description here

隐藏文本的示例

enter image description here

在@Omer的帮助下,我尝试修改代码如下:

.mycopy{
 position:absolute;
right:-10px;
top:-10px;
}
.mycopy .btn{
padding:2px !important;
}




    [
             'attribute' => 'title',
             'format' => 'raw',
             'value' => function($model){
              $button=\supplyhog\ClipboardJs\ClipboardJsWidget::widget([
                  'text' => $model->title,
                  'label' =>'<i class="far fa-copy" aria-hidden="true"></i>',

            ]);
            return "<div style='position:relative'><div style='margin-right:10px;'>".$model->title."</div><div class='mycopy'>".$button."</div></div>";
        }
    ],

结果如下所示:

enter image description here

最佳答案

我的理解是,您正在尝试针对每一行填充 gridview 内的按钮,并且当单击时,您希望将该行中的特定文本复制到剪贴板中。

如果这是正确的,那么您可以执行以下操作,我将创建示例代码,假设 user GridView 中使用的模型当单击按钮时 Bio用户的信息将被复制到剪贴板。

<?=
GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'id',
        'username',
        'active',
        'password',
        'bio',
        [
            'class' => 'yii\grid\ActionColumn',
            'template' => '{view}{update}{delete}{copy}',
            'buttons' => [
                'copy' => function($url, $model, $key){
                    return \supplyhog\ClipboardJs\ClipboardJsWidget::widget([
                            'text' => $model->bio
                    ]);
                },
            ]
        ],
    ],
]);
?>

注意:您可以更改 $model->description到您尝试复制的任何列名 'text' => $model->description .

如果您打算将其显示在 DataColumn 中而不是ActionColumn您可以使用以下代码,它将显示列文本及其下方的按钮,用于将文本复制到剪贴板。

[
    'attribute' => 'bio',
    'format' => 'raw',
    'value' => function($model){
        $button=\supplyhog\ClipboardJs\ClipboardJsWidget::widget([
                    'text' => $model->bio,
        ]);
        return $model->bio."<br/>".$button;
    }
],

更新

要复制图像中提到的相同 CSS,您应该执行以下操作

将此 css 添加到 View 顶部

$css = <<< CSS
.clip-input-group{
    width:100%;
    float:left;
}
.input-group-button {
    width: 14%;
    vertical-align: middle;
    display: inline-block;
    border: 1px solid #ccc;
    border-radius: 3px;
    border-top-left-radius: 3px;
    border-bottom-left-radius: 3px;
    float: left;
    border-top-left-radius: 0px;
    border-bottom-left-radius: 0px;
    padding: 5px;
    text-align: center;
    cursor: pointer;
}
.input-group-button i{
    font-size:12px;
}
.clip-input{
   width: 85%;
    display: inline-block;
    float: left;
    border-radius: 3px;
    border-top-right-radius: 3px;
    border-bottom-right-radius: 3px;
    border: 1px solid #ccc;
    border-right-color: rgb(204, 204, 204);
    border-top-right-radius: 0px;
    border-bottom-right-radius: 0px;
    padding: 5px;
    border-right-color: transparent;
}
CSS;
$this->registerCss($css);

然后将列定义更改为以下内容,我使用 fontawesome 剪贴板图标而不是使用图像,

注意:我不是 CSS 专家,但设法创建了相同的内容,如果有人可以建议更好的类,我愿意接受建议

[
    'attribute' => 'bio',
    'format' => 'raw',
    'value' => function ($model) {
            $button = \supplyhog\ClipboardJs\ClipboardJsWidget::widget([
                'text' => $model->bio,
                'label' => '<i class="fa fa-clipboard" aria-hidden="true"></i>',
                'htmlOptions' => ['class' => ''],
                'tag' => 'a',
            ]);
            $text = $model->bio;
            $html = <<< HTML
            <div class="clip-input-group">
                <input type="text" disabled value="{$text}" class="clip-input">
                <span class="input-group-button">
                    $button
                </span>
            </div>
HTML;

            return $html;
        },
],

关于javascript - 在 Yii2 中使用 Clipboard.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53470473/

相关文章:

javascript - Node JS 中的简单路由和不显眼的模板引擎

javascript - Gulp 和 Bower 集成

php cURL - 请求必须分块或具有内容长度

Yii2 - ActiveRecord 到数组

javascript - Yii2 按顺序注册 JS 文件和内联 JS 的组合

javascript - 如何在 vue js 中动态设置 b-popover 目标?

javascript - 通过绑定(bind)获取Protractor中的UI-Grid列数据

php - 根据列数据从数据库中提取数据

javascript - 使用 ajax 发送输入文件数据

php - 安装过程中 yii migrate 出现 Yii 2.0 高级错误