簡體   English   中英

Yii的。 申請表格。 以一種形式添加有關用戶公司和幾種商品的信息

[英]Yii. Application form. Adding info about user company + SEVERAL goods in one form

不知道這是否是一個典型問題,但無法弄清楚如何實現。 3張桌子:申請。 關系:

return array(
    'company_info' => array(self::HAS_ONE, 'AppCompany', 'applicant_id'),
    'region'=>array(
            self::HAS_ONE,'AppRegion',array('company_region_id'=>'id'),
                'through'=>'company_info'
        ),
    'sector'=>array(
            self::HAS_ONE,'AppSector',array('company_sector_id'=>'id'),
                'through'=>'company_info'
        ),
    );

AppCompany。 關系:

return array(
    'application' => array(self::BELONGS_TO, 'Application', 'applicant_id'),    
    'region' => array(self::BELONGS_TO, 'AppRegion', 'company_region_id'),
    'sector' => array(self::BELONGS_TO, 'AppSector', 'company_sector_id'),
    'goodsservices' => array(self::HAS_MANY, 'AppGoodsServices', 'company_id')   
    );

App.GoodsServices。 關系:

return array(
    'company'=>array(self::BELONGS_TO, 'AppCompany', 'company_id'),
    );

因此,一個用戶添加有關其公司的信息(company_name,date_of_registration等),然后添加該公司生產的某些商品/服務。 如何以一種形式收集,更新和查看所有這些信息? 可能嗎?

我如何看待此問題:用戶添加了一些信息並符合以下字段:“商品和服務及其百分比”和兩個字段-“商品和服務”和“ PERCENTAGE”以及“添加更多”按鈕,他有6種商品要添加。 因此,他單擊添加更多按鈕,並且每次出現下面的新字段。 但是商品限制為5,因此在5個字段具有信息后,該按鈕將變為無效狀態。

在“提交”按鈕之后,所有這些信息都記錄到其表中。 它可以從UPDATE按鈕上的表中獲取,並且可以在一個CDetailView中查看。

請至少如何以一般的方式實施它。 謝謝

更新好,完成了一些工作(不知道它是否正確,但是...):

我使用了此擴展程序: http : //www.yiiframework.com/extension/esaverelatedbehavior/

我現在有:

public function actionCreate()
{
    $model=new Application;

    // Uncomment the following line if AJAX validation is needed
    $this->performAjaxValidation($model);

    if(isset($_POST['Application']))
    {
        $model->attributes=$_POST['Application'];

        if(isset($_POST['AppGoodsServices']))
        {
            $model->goodsservices = $_POST['AppGoodsServices']; 
        }    
        if ($model->saveWithRelated('goodsservices'))
        {
            $this->redirect(array('view', 'id' => $model->id));
        } else {$model->addError('goodsservices', 'Error occured while saving goods/services.'); }
     }       


    $this->render('create',array(
        'model'=>$model,
    ));
}

public function actionUpdate($id)
{
    $model=$this->loadModel($id);

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['Application']))
    {
        $model->attributes=$_POST['Application'];
        if(isset($_POST['AppGoodsServices']))
        {
            $model->goodsservices = $_POST['AppGoodsServices']; 
        }    
        if ($model->saveWithRelated('goodsservices'))
        {
            $this->redirect(array('view', 'id' => $model->id));
        } else {$model->addError('goodsservices', 'Error occured while saving goods/services.'); }
    }

    $this->render('update',array(
        'model'=>$model,
    ));
}

public function loadModel($id)
{
    $model=Application::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,'The requested page does not exist.');
    return $model;
}

在我的_form.php中

<div id="goodsservices">
    <?php
    $index = 0;
    foreach ($model->goodsservices as $id => $goods):
        $this->renderPartial('goods/_form', array(
            'model' => $goods,
            'index' => $id,

        ));
        $index++;
    endforeach;
    ?>
</div>

和商品/ _表格中的子表格:

<div style="margin-bottom: 20px;  width:100%; clear:left;" class="crow">
<div class="row" style="float: left;">
    <?php echo CHtml::activeLabelEx($model, '['.$index.']goods_and_services'); ?>
    <?php echo CHtml::activeTextField($model, '['.$index.']goods_and_services', array('size' => 30, 'maxlength' => 150)); ?>
    <?php echo CHtml::error($model, '['.$index .']goods_and_services'); ?>
</div>

<div class="row" style="float: left;">
    <?php echo CHtml::activeLabelEx($model, '['.$index .']percentage'); ?>
    <?php echo CHtml::activeTextField($model, '['.$index.']percentage', array('size' => 5)); ?>
    <?php echo CHtml::error($model, '['.$index.']percentage'); ?>
</div>
<div class="row" style="float: left;">
    <?php echo CHtml::link('Delete', '#', array('onclick' => 'deleteGoods(this, '.$index.'); return false;'));
    ?>
</div>
</div>
<div style="clear: both;"></div>
<?php
Yii::app()->clientScript->registerScript('deleteGoods', "
function deleteGoods(elm, index)
{
element=$(elm).parent().parent();
/* animate div */
$(element).animate(
{
    opacity: 0.25, 
    left: '+=50', 
    height: 'toggle'
}, 500,
function() {
    /* remove div */
    $(element).remove();
});
}", CClientScript::POS_END);
?>

一切正常,但是我無法理解如何為兒童(商品服務)模型創建批處理。 現在,它僅以UPDATE形式向我顯示子項(我已經將一些記錄直接存入DB),每個子項附近都有DELETE按鈕。 但是如何實現CREATE? 因此,一個空行應該可見,我可以單擊“添加行”來添加其他行嗎?

有可能的。 使用javascript,您應該在視圖中創建其他項,在控制器操作中,您將獲得包含所有數據的$ _POST,並在一個事務中填充並驗證所有模型。 在更新操作視圖中,您正在顯示與PHP foreach相關的模型。

有一個示例代碼可能對您有用。 另請參閱評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM