0

4つのドロップダウンと送信ボタンのあるフォームがあります。ユーザーが送信ボタンをクリックすると、入力/出力を処理するコントローラーに移動して、ユーザーに選択肢を提供しますが、URIは正しいです。

ドロップダウンは、ユーザーの選択に応じてAjaxから動的に生成され、最初のドロップダウンを除外します。彼らは絶対にうまく働いています。

ユーザー入力を処理するメソッドは、このコントローラーにあります。/app/controllers/shop/kategorierindexメソッドは次のようになります。

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']);      
}

私の目標は次のとおりです。ユーザーが送信ボタンを押したときに、パラメーターを含む正確なURLでページを表示することはできません。http://app.com/shop/kategorier/index/LG/WASH/FL9834X/0/それが私が本当に欲しいすべてです。

注:このURLへの手動アクセスは正常に機能し、コントローラー/モデルはパラメーターを適切に処理します。

どうすればこれを達成できますか?私は2つのことを試みましたが、どちらも失敗しました。ある種。

  1. jQueryを試してみて、すべてのパラメーターが'/'区切り文字でエンコードされたURL文字列を生成し、送信時に.attr('href')を変更しました。しかし、それは悪夢でした。なぜなら、$modelのいくつかは例えばである可能性があるからです。'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(); ?>

私はどういうわけか物事を複雑にしすぎていると思いますが、今のところ私はまっすぐに考えることができません。何でも詳しく説明させていただきます。よろしくお願いします。

4

2 に答える 2

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イベントを使用してこれをトリガーします。

于 2012-11-20T22:55:55.773 に答える
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'または'77773+-/23IK'

これは、コントローラーでのデコードでは理想的ではないstr_replace('-', ' ', $str);ため、置換文字を選択する前に、多くのデータを調べる必要があります。

ただし、 Codeigniterでクエリ文字列を使用せずにこれを実行したい場合は、これがおそらく最良の解決策です。

于 2012-11-21T12:14:23.280 に答える