2012-11-20 49 views
0

我有一個包含4個下拉列表和一個提交按鈕的表單。當用戶點擊提交按鈕時,我想要去我的控制器處理輸入/輸出給用戶的選擇,但是使用正確的URI。Codeigniter:提交參數給控制器,需要正確的URI

從Ajax動態生成下拉列表,取決於用戶的選擇,禁止第一個下拉菜單。他們工作得很好。

處理用戶輸入的方法位於該控制器:/app/controllers/shop/kategorier指數的方法是這樣的:

public function index($fabrikat, $type, $model, $produktnr = '0') 
{ 
    // get all the data from the model 
    $data['all'] = $this->fetch->get_kategorier($fabrikat, $type, $model, $produktnr); 

    print_r($data['all']);  
} 

我的目標是:當用戶點擊提交按鈕,我琬t他們查看該網頁的確切URL 包括的參數,例如。 http://app.com/shop/kategorier/index/LG/WASH/FL9834X/0/這就是我真正想要的。

注意:手動訪問此URL工作正常,並且控制器/模型按照它們應該處理參數。

如何我完成了嗎?我試了兩件事,都失敗了。有點。

  1. 我試圖用jQuery,併產生了encodedURL字符串與所有的 參數用「/」分隔符,且上 改變.attr(「href」屬性)提交。但那是一場噩夢,因爲一些$模型可能是 例如。 'CE1000C-T/XEE'

  2. 我試圖做一個「代理」方法在Kategorier 控制器把所有的輸入 - >帖子,並將其附加到一個 redirect('kategorier/'.$fabrikat.'/'.$etc),但是這是相當愚蠢的 。

我寧可不使用查詢字符串像/kategorier?fabrikat=LG&type=WASH

我的形式看起來像這樣:

<?php echo form_open('shop/kategorier/'); ?> 

<select id="fabrikat" name="fabrikat"> 
    <option name="0">Vælg Fabrikat</option> 
    <?php foreach ($fabrikater as $f) : ?> 
     <option value="<?php echo $f->Fabrikat; ?>" name="<?php echo $f->Fabrikat; ?>"><?php echo $f->Fabrikat; ?></option> 
    <?php endforeach; ?> 
</select> 

<select id="type" name="type"> 
</select> 

<select id="model" name="model"> 
</select> 

<div id="produktnummer-wrap" style="display:none"> 
    <select id="produktnummer" name="produktnummer"> 
     <option name="0" value="">Vælg Produktnummer</option> 
    </select> 
</div> 

<?php echo form_submit('findparts', 'Find Reservedele'); ?> 
<?php echo form_close(); ?> 

我相信我莫名其妙的事情過於複雜,但現在我可以不要直視。我會很樂意詳細說明任何事情。 我真的希望有人能夠幫助我,提前謝謝。

回答

0

@Repox我昨天弄清楚了一種方法,它實際上和你的解決方案非常相似。下面是我所做的:

$("#find-btn").on("click", function() { 
    var fab = $("select#fabrikat").val(); 
    var type = $("select#type").val(); 
    var model = $("select#model").val(); 
    var produktnummer = $("select#produktnummer").val(); 

    // we have to replace spaces in models and types 
    model = model.replace(/\s+/g, '-'); 
    type = type.replace(/\s+/g, '-'); 

    // produktnummer can be empty 
    produktnummer = (produktnummer === '') ? "0" : produktnummer; 

    // we also have to URI encode the model and prodnr since it 
    // can be horror strings like 'xy762/ø23' 
    model = encodeURIComponent(model); 
    produktnummer = encodeURIComponent(produktnummer); 

    // our url string to update the href 
    var url = fab + '/' + type + '/' + model + '/' + produktnummer; 

    // update the href with the specific parameters 
    $(this).attr("href", "http://app.dev/kategorier/index/"+url); 
}); 

雖然我需要在我的控制器和模型處理參數時要十分小心,需要對它們進行編碼,之後正確解碼。模型串的少部分可能是這樣的:

'EX + 340-34 /Ø14' OR '77773+ -/23IK'

這並不理想與解碼在我的控制器中使用str_replace('-', ' ', $str);因此我需要在選擇替換字符之前檢查大量數據。

但是,如果有人希望這樣做而不需要必須在Codeigniter中使用查詢字符串,這可能是最好的解決方案。

1

你不能真正做到這一點,而無需使用一些JavaScript:

<script type="text/javascript"> 

function update_selections() 
{ 

    var base_url = '<?php echo site_url('shop/kategorier/index'); ?>/' + $('#fabrikat').val() + '/' + $('#type').val() + '/' + $('#model').val(); 
    if($('#produktnummer').val() != "") 
    { 
    base_url = base_url + '/' + $('#produktnummer').val(); 
    } 

    document.location.href = base_url; 
} 

</script> 

刪除當前的形式,並使用一個onclick事件來觸發此。

+0

感謝您的輸入,我以前無法回答您。 – nielsiano

相關問題