Hi everybody!
I’m developing an integration between Google Drive (spreadsheet in this case) and my webapp. Integration works like this:
In my Model afterFind() method i populate the attribute $_prices with an ArrayDataProvider filled with remote spreadsheet content like this (Google Drive fileId is stored in $model->pricelist_id):
model
...
$file = $service->files->export($this->pricelist_id, 'text/csv', array('alt' => 'media'));
...
$data = str_getcsv($file, "\n"); //parse the rows
foreach ($data as &$row) {
$row = str_getcsv($row, ","); //parse the items in rows
$rows[] = $row;
}
$columnsRow = array_shift($rows);
$models = [];
foreach ($rows as $row) {
$model = [];
foreach ($columnsRow as $k => $column) {
$model[$column] = $row[$k];
}
$models[] = $model;
}
$this->_prices = new ArrayDataProvider([
'allModels' => $models
]);
...
where $models is the array representation of the csv file obtained via Google Drive API.
In the view I simply render a GridView with the prices:
view
...
<?= GridView::widget([
'dataProvider' => $model->prices
]); ?>
...
where $model is passed by the controller.
Everything is working fine. My problem is in the labels of the GridView columns. In my original Google Sheet I have column names like:
15.03 - 04.06
but in GridView they render like
15 03 04 06
due the yii\base\Model generateAttributeLabel() method which replace underscores, dashes and dots with blanks.
So, how can I preserve the original column names? Every Google Sheet have many columns with different names in this format so I need a “dynamic solution”
Thank you