2012-11-20 5 views
0

J'ai un formulaire avec 4 listes déroulantes et un bouton soumettre. Quand un utilisateur clique sur le bouton soumettre je veux aller à mon contrôleur manipulant l'entrée/sortie donnant aux utilisateurs des choix, mais avec un URI correct.Codeigniter: Soumettre les paramètres au contrôleur, besoin correct URI

Les listes déroulantes sont générées dynamiquement à partir d'Ajax en fonction des choix des utilisateurs, barre la première liste déroulante. Ils travaillent absolument bien.

La méthode de gestion de l'entrée utilisateur se trouve dans ce contrôleur: /app/controllers/shop/kategorier, méthode d'index ressemble à ceci:

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

Mon but est la suivante: Lorsque les utilisateurs ont frappé le bouton d'envoi, je wan » t eux de voir la page avec cette URL exacte en incluant les paramètres, par exemple. http://app.com/shop/kategorier/index/LG/WASH/FL9834X/0/ C'est tout ce que je veux vraiment.

Remarque: L'accès à cette URL fonctionne correctement, et le contrôleur/modèle gère les paramètres comme ils le devraient.

Comment puis-je accomplir ceci? J'ai essayé deux choses, elles ont échoué toutes les deux. Sorte de.

  1. J'ai essayé avec jQuery, et a généré une chaîne de encodedURL avec tous les paramètres avec un séparateur '/', et a changé le .attr ('href') sur soumettre. Mais ce fut un cauchemar, puisque certains des modèles $ peuvent être par exemple. 'CE1000C-T/XEE' etc.

  2. J'ai essayé de faire une méthode « proxy » dans le contrôleur Kategorier prendre toutes les entrées-> postes et les annexant à un redirect('kategorier/'.$fabrikat.'/'.$etc), mais c'était plutôt stupide.

Je préfère ne pas utiliser les chaînes de requête comme /kategorier?fabrikat=LG&type=WASH etc

Ma forme ressemble à ceci:

<?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(); ?> 

Je crois que je suis en quelque sorte les choses trop compliquer, mais maintenant je peux Je ne pense pas directement. Je serai plus qu'heureux d'élaborer quelque chose. J'espère vraiment que quelqu'un pourra m'aider, merci d'avance.

Répondre

0

@Repox J'ai trouvé une approche hier soir qui était en fait assez similaire à votre solution. Voici ce que je faisais:

$("#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); 
}); 

Bien que je dois être très prudent lors de la manipulation des paramètres dans mes contrôleurs et modèles, ils doivent être codés et décodés correctement par la suite.Une légère partie des chaînes de modèle pourrait être quelque chose comme:

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

Ce qui est pas idéale avec le décodage Dans mon contrôleur utilisant str_replace('-', ' ', $str);, j'ai donc besoin d'examiner beaucoup de données avant de choisir un caractère de remplacement.

Cependant, c'est probablement la meilleure solution si l'on veut faire sans avoir à utiliser des chaînes de requête dans Codeigniter.

1

Vous ne pouvez pas vraiment réaliser ce sans utiliser un peu de 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> 

Retirez la forme actuelle et d'utiliser un événement onclick pour déclencher cela.

+0

Merci pour votre contribution, je n'ai pas pu vous répondre plus tôt. – nielsiano