【问题标题】:select recursion with one option selected php codeigniter选择一个选项的递归 php codeigniter
【发布时间】:2021-04-09 19:14:12
【问题描述】:

我有递归函数,可以在我的选择下拉列表中填充数据。

我如何传递一个值,如果它与下拉列表中的任何值匹配,就会被选中?

这是我模型上的功能:

function get_all_cat($parent,$level=0,$s){
        $ui = '';
        $this->db->order_by($this->id, $this->order);
        $this->db->where('parent',$parent);
        $query=$this->db->get($this->table)->result();
        
        foreach ($query as $qu) {
        if($s==$qu->id){
        $y = 'selected';
        }
        $repeat = str_repeat('--', $level);
        
        $ui .= '<option value="'. $qu->id .'" '.$y.' >' .$repeat. $qu->title.'</option>';
        
        $new_level = $level+1;
        $ui .= '' .$this->get_all_cat($qu->id,$new_level) .'';
        }
        return $ui;
}

这是我在视图中的选择选项:

<div class="form-group">
    <select name="category" class="form-control chosen-select">
        <option value="">Any Category</option>
        <?php
        $cat =   $this->Dbc_categories_model->get_all_cat(0,0,$this-session->userdata('clicked_id');
        echo $cat;
        ?>
    </select>
</div>

【问题讨论】:

  • 你为什么要标记这个recursion?,还有你的问题在哪里?您能否解释一下,组合中没有控制器,那么视图如何从中获取数据?
  • 哦,刚刚看到了,直接从视图中调用模型函数....有点打破框架的MVC概念
  • 可以直接从codeigniter的视图中调用模型函数。真正的问题是选择下拉列表是从数据库类别表中递归生成的。现在我想当我单击该选项时,它应该被发送到控制器并将该值放在会话中,当返回视图并再次调用递归函数时,如果任何类别 id 等于会话中的 id 应该选择 id .
  • 我不是说你不能从视图中调用模型,这是可能的,但是违背了 CI 的概念。无论如何,你想做什么,取决于你的递归。 php + javascript/jQuery 解决方案会有所帮助,因为您可以检测到选择的 on('change') 并通过 ajax 填充相应的内容
  • 好吧,让我只使用 jquery,我正试图逃避它.. 但无论如何感谢您的建议。

标签: php codeigniter recursion select dropdown


【解决方案1】:

我捡到的一些笔记...

1.) 永远不要使用像 $s => 这样容易迷失方向的变量名称,并且该名称不会告诉您变量包含或做什么

2.) 您没有将选定的值传递给隐蔽函数(缺少第三个参数)

否则看起来这是有效的代码。

【讨论】:

  • 永远不要使用像 $s 这样的变量名:这完全是基于意见的......在一个简短的函数中,将它用作局部变量,它不仅仅是阅读您的代码的其他人可读
  • 当我要阅读您的代码时,我需要弄清楚变量的作用......这就是所谓的坏习惯。相信我....如果他命名为 selectedVariable 你不必这样做。
猜你喜欢
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多