【问题标题】:codeigniter pagination dropdown select filtercodeigniter 分页下拉选择过滤器
【发布时间】:2016-01-12 08:57:27
【问题描述】:

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

我的控制器

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>

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

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

【问题讨论】:

    标签: php codeigniter pagination


    【解决方案1】:

    如果我正确理解您的问题,我认为您可以使用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

    【讨论】:

    • 感谢您的帮助。我能够将 URI 段传递给页面并且它几乎可以工作。我正在使用onchange submit 提交下拉列表,我认为这让我感到困惑。有什么想法吗?
    【解决方案2】:

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

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

    每当您渲染视图时,您都会查看是否设置了会话变量“selectedDropDownItem”,然后在编写您的...时打印“selected”选项。

    看看这个……

    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>";
    

    【讨论】:

    • 使用 users 会话变量是个好主意。如果用户离开页面或单击另一个链接,则必须刷新或终止会话变量 - 我该怎么做?
    • 在读取用于在选择框中定义默认值的会话变量后,您将删除 view_file 中的会话数据。您可以使用 $this->session->unset_userdata('some_name');在 CI 用户指南中查找此内容
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多