我在Yii上有一个表单,允许人们上传各种不同的文件格式。上传文件后,我有一个Db,为该文件添加一个条目:
+--------------+---------------+-------------+---------------+
| id | name | acc_id | date_uploaded |
+--------------+---------------+-------------+---------------+
| 1 | test.png | 100 | 2014-05-20 |
+--------------+---------------+-------------+---------------+
文件保存在根文件夹/ files /上传中,并使用id
即1-test.png保存。
然后我可以在帐户上显示上传的文件,方法是在cgridview中显示与帐户id
匹配的文件。
我遇到的问题是我需要一个下载按钮。我尝试了一些东西,似乎无法让它工作。我最接近的是使用以下代码
array(
'class'=>'CLinkColumn',
'header'=>'Download',
'label'=>'Download',
//'url' => '/files/uploaded/$data->id',
'htmlOptions'=>array('width'=>'18'),
),
然而,$data
变量似乎不起作用,我相信这与CLinkColumn有关。例如,如果我尝试使用UrlExpression,它总是添加index.php,我的文件永远不会被解析。有人能指出我如何解决这个问题的正确方向,也是存储和调用这些文件的最佳方法。
非常感谢
答案 0 :(得分:2)
你可以试试这个:
<?php $this->widget('ext.CGridView', array(
'id'=>'grid-id',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array(
array(
'name'=>'Download',
//'header'=>'Download',
'type'=>'raw',
'value'=>'CHtml::link($data->FileNameFromModel, array("files/uploaded","id"=>$data->id))',
//'htmlOptions'=>array('width'=>'10%'),
),
.....
)
));
答案 1 :(得分:1)
您可以为其添加自定义列:
'name' => 'name',
'header' => 'Download File',
'type' => 'raw',
'value' => 'CHtml::link("Click!", Yii::app()->createAbsoluteUrl("CONTROLLER/ACTION",array("id"=>$data->id)))'
通过上述解决方案,您的CGridView
将会保留一个包含Download File
标题的列,并且对于每一行,它会显示带有相关链接的Download File
。
注意,我使用CreateAbsoluteUrl
创建了一个网址。如果您没有用于下载文件的控制器/操作,则可以使用自己的。
还可能需要注意的是,您必须将代码放在columns
数组中:
'columns' =>array(
array(...),
)
答案 2 :(得分:0)
同样的问题了。它没有帮助我。我不得不从protected / csv目录下载csv文件。我以另一种方式做到了。
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-export-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
/////////////////////
array(
'type'=>'raw',
'name'=>'link',
'value'=>'CHtml::link("$data->link", "http://" . $_SERVER["SERVER_NAME"] . Yii::app()->request->baseUrl . "/" . $data->link)',
),
)));
答案 3 :(得分:0)
这应该允许从Gridview下载文件:
array('name'=>'file_name',
'type'=>'raw',
'value'=>'CHtml::link($data->file_name, "uploads/materials/{$data->file_name}")',
'filterHtmlOptions'=>array('style'=>'width: 40%;')),