codeigniter分页下拉选择过滤器


codeigniter pagination dropdown select filter

我创建了一个网站,在这里我将项目分组。当用户从提供的下拉菜单中选择一个项目并提交时,与该项目编号相关的项目将被检索并发送回控制器。

我的控制器

public function dwg_list()
{
    $data['proj_num'] = $this->model_proj->proj_num_all();
    $num_row = 1;
    if ($this->input->post('project_no') != '0')
    {
        $data['result'] = $this->model_issue->list_dwg($this->input->post('project_no'));
        if (count($data['result']) > 0)
        {
            $num_row = count($data['result']);
        } else $num_row = 1;
    }
    $this->load->library('pagination');
    $config['base_url'] = base_url() . '/index.php/dwg_issue/dwg_list/page';
    $config['total_rows'] = $num_row;
    $config['per_page'] = 2; 
    $this->pagination->initialize($config); 

    $data['main_content'] = 'dwg_list';
    $this->load->view('includes/template.php', $data);
}

我的视图

<h1>This page displays all the registered drawings</h1>
<br>
<div id="body">
<div class="row">
        <div class="form-group-sm"><lable class="col-sm-2 control-label">Project number:</lable>
    <?php
        $js = 'onchange="this.form.submit()" class="form-control" id="focusInput"';
        echo form_open('dwg_issue/dwg_list');
        echo "<div class='"col-xs-2'">" . form_dropdown('project_no',$proj_num, $this->input->post('project_no'),$js)."</div>";
        echo form_error('project_no', '<div class="col-xs-4"><div class="alert alert-danger fade in"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>','</div></div>');
    ?>
        </div>
        </div>
        <br>
<?php
echo "<noscript>".form_submit('submit','Submit')."</noscript>";
?>
        <table title="List of drawings" class="table table-hover" style="font-size: 14px">
            <caption><b>List of drawings</b></caption>
        <thead>
            <tr><th>Project number</th><th>Drawing number</th><th>Client drawing number</th>
                <th>Title</th><th>Size</th><th>Drawn by</th><th>Revision</th><th>Drawn Date</th></tr>
        </thead>    
        <tbody> &nbsp;
        <?php
            if(!empty($result))
            {
                foreach($result as $row)
                { 
                    echo "<tr>";
                    echo "<td>" . $row->project_no . "</td>";
                    echo "<td>" . $row->sws_dwg_no . "</td>";
                    echo "<td>" . $row->client_dwg_no . "</td>";
                    echo "<td>" . $row->dwg_title . "</td>";
                    echo "<td>" . $row->dwg_size . "</td>";
                    echo "<td>" . $row->dwg_by . "</td>";
                    echo "<td>" . $row->dwg_rev . "</td>";
                    echo "<td>" . date('Y/m/d', strtotime($row->dwg_date)) . "</td>"; 
                    echo "</tr>";
                }
            }
        ?>
        </tbody>
       </table>
       <?php echo $this->pagination->create_links(); ?>
</div>

我看到的问题是,当我单击下一个页码时,页面被刷新,下拉选择返回到默认值,然后提交给控制器。控制器无法向模型提交任何要从数据库中检索的内容。

那么我该如何克服这个问题呢。

如果我正确理解你的问题,我认为你可以使用URI Segments传递你的项目编号,这样你就可以在不张贴或使用张贴方法的情况下访问你选择的项目编号。

public function dwg_list($porject_no){
    echo $porject_no;
    ......
}

示例:www.your-domain.com/controller/dwg_list/{project_no}

我希望这能给你一些想法。

这里有一个链接,我认为可以帮助:

https://codeigniter.com/userguide2/general/controllers.html

也许将当前选择保存在表单处理程序"dwg_issue/dwg_list"中的会话变量中是有意义的

$this->session->set_userdata('selectedDropDownItem',$receivedDropDownItem);

无论何时渲染视图,都会查看是否设置了会话变量"selectedDropDownItem",然后在编写。。。您将打印"选定"选项。

看看这个。。。

echo "<select>";
foreach ($selectOptions as $as){
            //check session if default option set....
            if (isset($this->session->userdata['selectedOption'])){
                $defOption = $this->session_userdata['selectedOption'];
            }else{
                  $defOption= "";
            }

            if (!strcmp($defOption,$as)){ // if the current option is equal to the session stored option...
                echo "<option value='"".$as."'" selected='"selected'">".$as."</option>";
            }else{
                echo "<option value='"".$as."'">".$as."</option>";  
            }           
        }
echo "</select>";