【问题标题】:How to load data to an already loaded view?如何将数据加载到已加载的视图中?
【发布时间】:2016-10-20 06:57:30
【问题描述】:

我有一个小项目,我使用 codeigniter、jquery 和 bootstrap。

我有“Startsite”,用户必须说:

选项 1:编辑项目

选项 2:创建项目

我认为首先显示我的控制器很有用:

在构造方法中我加载所有模型,在索引中我将数据加载到我的“startsite”中的所有下拉列表中,在 saveProject 中我保存我创建的项目,我遇到问题的方法是 editProject。看这里:

class projekt extends CI_Controller {

public function __construct()
{
    parent::__construct();
    $this->load->helper('html');
    $this->load->helper('url');
    $this->load->helper('form');
    $this->load->model('projektklassen_model'); 
    $this->load->model('kundengruppen_model');
    $this->load->model('produktgruppen_model'); 
    $this->load->model('ablehnungsgrund_model'); 
    $this->load->model('absatzregion_model'); 
    $this->load->model('anfragetyp_model'); 
    $this->load->model('businessunit_model'); 
    $this->load->model('endkundeOEM_model'); 
    $this->load->model('lieferanten_model'); 
    $this->load->model('prozentverteilungEOP_model'); 
    $this->load->model('prozentverteilungSOP_model');
    $this->load->model('realisierungsstatus_model');  
    $this->load->model('gsmbereich_model');
    $this->load->model('firma_model');
    $this->load->model('projekt_model');
}

public function index()
{           
    $data['projektklassen'] = $this->projektklassen_model->getProjektklassen();
    $data['kundengruppen'] = $this->kundengruppen_model->getKundengruppen();
    $data['produktgruppen'] = $this->produktgruppen_model->getProduktgruppen();
    $data['ablehnungsgruende'] = $this->ablehnungsgrund_model->getAblehnungsgruende();
    $data['absatzregionen'] = $this->absatzregion_model->getAbsatzregionen();
    $data['anfragetypen'] = $this->anfragetyp_model->getAnfragetypen();
    $data['businessunits'] = $this->businessunit_model->getBusinessunits();
    $data['endkundenOEM'] = $this->endkundeOEM_model->getEndkundenOEM();
    $data['lieferanten'] = $this->lieferanten_model->getLieferanten();
    $data['prozentverteilungenEOP'] = $this->prozentverteilungEOP_model->getProzentverteilungenEOP();
    $data['prozentverteilungenSOP'] = $this->prozentverteilungSOP_model->getProzentverteilungenSOP();
    $data['realisierungsstati'] = $this->realisierungsstatus_model->getRealisierungsstatus();
    $data['gsmbereiche'] = $this->gsmbereich_model->getGSMBereiche();
    $data['firmen'] = $this->firma_model->getFirmen();
    $data['projekte'] = $this->projekt_model->getProjekte();
    $data['preFormVisible'] = true;
    $this->load->view('project2', $data);       
}

function saveProjekt(){      
    if($this->input->post('btGenerate')){
        $pdm = $this->projekt_model->getPDM();
        $this->projekt_model->addprojekt($pdm);                
    }
    redirect('projekt');        
}

function editProjekt(){      
    if($this->input->post('btladeProjekt')){
        $data['proDetails'] = $this->projekt_model->editprojekt();  
        $data['preFormVisible'] = false;
        $this->load->view('project2', $data);           
    }
    redirect('projekt');        
}   }

应该发生什么? 用户在“startsite”上选择编辑项目。他在下拉列表中选择一个项目并单击一个按钮。 这里是起始站点的表单:

<?php echo form_open('projekt/editProjekt', array('name' => 'preform')); ?>
	<div class="col-sm-6 col-md-6 col-lg-6">
		<label for='projekt'>Projekt</label>
		<?php echo form_dropdown('projekt', $projekte, '', 'class="form-control" id="projekt"'); ?>
	</div>
	<div class="col-sm-6 col-md-4 col-lg-3">
		<button type="submit" id="btladeProjekt" name="btladeProjekt" value="btladeProjekt" class="btn btn-primary headbutton"><i class="glyphicon glyphicon-pencil"></i> Projekt bearbeiten </button>
	</div>
<?php echo form_close(); ?>

现在控制器方法 editProject 调用模型中的一个方法。我给你看:

function editprojekt() {
    $serverName = "de-sal-v-sql011"; 
    $connectionInfo = array( "Database"=>"NB_Roll_Plan", "UID"=>"s-global_it-bit002", "PWD"=>"\$Ev1danzA\$"); 
    $conn = sqlsrv_connect( $serverName, $connectionInfo);

    $projektID = $this->input->post('projekt');

    $data = array();
    $tsql = "SELECT ProjektID, Projektname, KDGR, Kundenname, ProduktgruppeID, Projektklasse, MABVertrieb, GSMBereich, Ansprechpartner_kunde,ProjektanfrageNR_kunde, 
        Anfragedatum, Abgabedatum_angebot, PDM, übergeordnetePDM, Kommentar, Projektrisiken from Projekt WHERE ProjektID = ? ORDER BY Projektname ASC";  
    $var = array($projektID);

    $query = sqlsrv_query($conn, $tsql, $var);
    if($query != false){
        while( $row = sqlsrv_fetch_array( $query, SQLSRV_FETCH_ASSOC) ) {
            $data['ProjektID'] = $row['ProjektID'];
            $data['Projektname'] = $row['Projektname'];
            $data['KDGR'] = $row['KDGR'];
            $data['Kundenname'] = $row['Kundenname'];
            $data['ProduktgruppeID'] = $row['ProduktgruppeID'];
            $data['Projektklasse'] = $row['Projektklasse'];
            $data['MABVertrieb'] = $row['MABVertrieb'];
            $data['GSMBereich'] = $row['GSMBereich'];
            $data['Ansprechpartner_kunde'] = $row['Ansprechpartner_kunde'];
            $data['ProjektanfrageNR_kunde'] = $row['ProjektanfrageNR_kunde'];
            $data['Anfragedatum'] = $row['Anfragedatum'];
            $data['Abgabedatum_angebot'] = $row['Abgabedatum_angebot'];
            $data['PDM'] = $row['PDM'];
            $data['übergeordnetePDM'] = $row['übergeordnetePDM'];
            $data['Kommentar'] = $row['Kommentar'];
            $data['Projektrisiken'] = $row['Projektrisiken'];               
        }
        sqlsrv_free_stmt($query);       
    }else{
        die( print_r( sqlsrv_errors(), true));
    }   
    return $data;       
}

现在我想在视图中显示返回的数据,但是当我尝试这个时没有任何反应。

<?php
							if(isset($proDetails)){
								echo "test";
								echo "<input type='text' class='form-control' id='proname' name='proname' value='".$proDetails->ProjektID."'/>";
							}else{
								echo "<input type='text' class='form-control' id='proname' name='proname'>";
							}
						?>

我错过了什么?提前谢谢

【问题讨论】:

  • 为什么不实现ajax?
  • 你是什么意思?我认为在codeigniter中最好的做法是使用控制器和模型?混合设置好吗?
  • print_r($this-&gt;projekt_model-&gt;editprojekt())给我看
  • 我在控制台中什么也看不到,当我在 index 方法中尝试 print_r("test") 时也是如此。将调用 index 方法,因为下拉列表已填充。但我无法向控制台写一些东西
  • 请在index方法中也调用$data['proDetails'] = $this-&gt;projekt_model-&gt;editprojekt();并让我知道

标签: php html codeigniter codeigniter-2 codeigniter-3


【解决方案1】:

好吧,我想我已经明白你需要什么@JamesnxD。您可以在一个视图中加载所有下拉列表,并在另一个视图中的编辑表单这样做

$this->load->view('front/dropdown');
$this->load->view('front/editform',$data);
$this->load->view('front/front_footer');

【讨论】:

  • 感谢您的回答,但只是为了澄清我的目标。我的视图加载了所有下拉列表,然后用户想要加载基于 projektID 的数据。数据的呈现应该在同一个视图中。也许我不明白答案,但是当我加载 2 个不同的视图时,我不在同一个视图中,或者?
【解决方案2】:

一些改变你的模型功能并添加一个参数。

function editprojekt($proID) {
    $projektID = $proID
} 

并更改您的 index 方法

public function index($proID = '') {
    if($proID) {
       $data['proDetails'] = $this->projekt_model->editprojekt($proID);
    } else {
      $data['proDetails'] = false;
    }
}

最后,当您编辑内容时,您在浏览器 url 中调用 projekt/index/12 (12 = projektID)

【讨论】:

  • 请在index方法中也调用$data['proDetails'] = $this-&gt;projekt_model-&gt;editprojekt();并让我知道
  • 然后就可以了。我不得不说我在模型中将查询的 where 子句更改为固定 ID。因为在 index 方法中,我没有在提供 id 的表单上提交。
  • 在视图中 $proDetails 设置正确。但问题是,我需要在 editprojekt() 方法中使用它,因为这里的提交按钮发布了我需要在模型中的 projectID,以便在我的查询中具有正确的 where 子句。现在我有一个固定的 where 子句(projectID = 1),因为我改变了它。否则无法尝试“$this->projekt_model->editprojekt();”在索引函数中。
  • 我最终编辑了我的答案。请跟随。如果有任何困惑,请告诉我。
【解决方案3】:

你知道可以使用数组来加载helpermodellibrary

$this->load->helper(array('html', 'url', 'form'));
$this->load->model(array('projektklassen_model', 'kundengruppen_model', 'produktgruppen_model', 'ablehnungsgrund_model','absatzregion_model','anfragetyp_model','businessunit_model','endkundeOEM_model','lieferanten_model','prozentverteilungEOP_model','prozentverteilungSOP_model','realisierungsstatus_model','gsmbereich_model','firma_model','projekt_model'));

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多