Уважаемые, доброго времени суток! Писал ранее но ответ не нашел до сих пор.
У меня на странице есть таблица. она идет из базы. Мне ее надо раз в неделю обновлять. как можно к примеру в админке загрузить ее и вт абличной форме ( как эксель или phpmyadmin) отредактировать. потом по кнопке ок записать енту таблу в базу. спасибо
сделал так
во вьюхе
<div class="about-infos">
<h2> Укажите цены </h2>
</div>
<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
<tr><th>Наименование</th><th>Цена мин.</th><th>Цена макс.</th></tr>
<?php foreach($items as $i=>$item): ?>
<tr>
<td width="300px" valign="top"><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price_min"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price_max"); ?></td>
<!--<td><?php echo CHtml::activeTextArea($item,"[$i]id"); ?></td>-->
</tr>
<?php endforeach; ?>
</table>
<?php echo CHtml::submitButton('Сохранить'); ?>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
в контроллере
public function actionTablem()
{
//$model = new monitoring;
$items=$this->getItemsToUpdate(); // очевидно тут формируем массив из объектов по правилам известным вам (что-то из БД, что-то новое)
if(isset($_POST['Item']))
{
$valid=true;
foreach($items as $i=>$item) // перебираем объекты, обновляя их данными из $_POST
{
if(isset($_POST['Item'][$i]))
$item->attributes=$_POST['Item'][$i];
$valid=$item->validate() && $valid;
if($items->getErrors()) {
var_dump($items->getErrors());
die();
}
}
if($valid)
{
foreach($items as $item) {
//$item->attributes=$_POST['item'];
$item->save();
}
//$this->redirect(array());
//monitoring::model()-> update();
}
// если все модели валидны, сейвим их
// ...do something here
}
// displays the view to collect tabular input
$this->render('Tablem',array('items'=>$items));
}
модель
?php
/**
* This is the model class for table "{{monitoring}}".
*
* The followings are the available columns in table '{{monitoring}}':
* @property integer $id
* @property string $name
* @property string $price_min
* @property string $price_max
*/
class Monitoring extends CActiveRecord
{
/**
* @return string the associated database table name
*/
public function tableName()
{
return '{{monitoring}}';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('id, name, price_min, price_max', 'required'),
array('id', 'numerical', 'integerOnly'=>true),
array('name, price_min, price_max', 'length', 'max'=>255),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, name, price_min, price_max', 'safe', 'on'=>'search'),
);
}
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'ID',
'name' => 'Name',
'price_min' => 'Price Min',
'price_max' => 'Price Max',
);
}
/**
* Retrieves a list of models based on the current search/filter conditions.
*
* Typical usecase:
* - Initialize the model fields with values from filter form.
* - Execute this method to get CActiveDataProvider instance which will filter
* models according to data in model fields.
* - Pass data provider to CGridView, CListView or any similar widget.
*
* @return CActiveDataProvider the data provider that can return the models
* based on the search/filter conditions.
*/
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name,true);
$criteria->compare('price_min',$this->price_min,true);
$criteria->compare('price_max',$this->price_max,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
/**
* Returns the static model of the specified AR class.
* Please note that you should have this exact method in all your CActiveRecord descendants!
* @param string $className active record class name.
* @return Monitoring the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
}
Ну не хочет она в базе сохранять. Подскажите плз. Заранее спасибо