@Boglik

Как установить в yii2 кнопку скачать для каждого поля в gridview?

В таблице squad поле docs
В нем пользователь хранит документы, которые формируются ссылкой типа:
uploads/documents/2022/03/14/21efaFdffewrgs.zip

Либо ничего не загружает и полю присваивается значение NULL

Вывожу данные с помощь kartik gridview.
Хочу сделать так, чтобы выводилась в squad/index.php кнопка либо скачать, либо ничего не выводилось, либо "Документ отсутствует".

Сделал в squad/view как хотел и стал переносить на squad/index, но появились сложности
squadController.php
public function actionIndex()
    {


        $id = Yii::$app->user->identity->id;

        $model = $this->findModel($id);
        $kvartal = User::findOne($id);
        $searchModel = new SquadSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        return $this->render('index', [
            'model' => $model,
            'kvartal' => $kvartal,
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

В view это работает. Если есть данные - кнопка выводится. Нет данных - не выводится.
public function actionView($id)
    {
        //проверка прав файл
        $model = $this->findModel($id);
        if (!\Yii::$app->user->can('OwnSquad', ['post' => $model])) {
            throw new ForbiddenHttpException('Access denied');
        }
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

view
<?php
    $pole_docs = $model->docs;
    $pole = '';
    if (strcmp($pole_docs, $pole) !== 0) {
        $download = function (Squad $data)  {
                                       return Html::a(Html::tag('div', "<div class = 'btn btn-danger'>Скачать</div>" ), Url::to(['/kabinet/squad/download?id=' .  $data->id]));
                };
    }

    ?>

Код в squad/index.php, который работает в view но не работает в gridView
<?php
        $pole_docs = $model->docs;
        $pole = '';
        if (strcmp($pole_docs, $pole) !== 0) {
            $download = function (Squad $data)  {
                return Html::a(Html::tag('div', "<div class = 'btn btn-danger'>Скачать</div>" ), Url::to(['/kabinet/squad/download?id=' .  $data->id]));
            };
        }
        else
            if (strcmp($pole_docs, $pole) !== 0) {
                $download = function (Squad $data)  {
                    return Html::a(Html::tag('div', "<div class = 'btn btn-danger disabled'>Документ отсутствует</div>" ));
                };
            }
        ?>
        ...
                    [
                'attribute' => 'docs',
                'value' => $download,
                'format' => 'raw',
            ],

protected function findModel($id)
    {
        if (($model = Squad::findOne($id)) !== null) {
            return $model;
        }

        throw new NotFoundHttpException('The requested page does not exist.');
    }
  • Вопрос задан
  • 28 просмотров
Пригласить эксперта
Ответы на вопрос 1
VK_31
@VK_31
Постоянно учусь
В коде squad/index.php одно и тоже условие дважды
if (strcmp($pole_docs, $pole) !== 0)
поэтому переменная $download не будет определена в некоторых случаях
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы