【问题标题】:CakePHP drop down, selected item redirect to view for itemCakePHP 下拉,选中的项目重定向到项目查看
【发布时间】:2012-04-30 16:53:01
【问题描述】:

我想要下拉列表药物,重定向到所选特定药物的视图。所以说他们点击药物“对乙酰氨基酚”我希望它把他们送到那个药物的视图。我可以在不添加提交按钮的情况下这样做吗?

我的下拉代码:

<?php
echo $form->input('Drug.generic', array('type' => 'select', 'label' => 'Quick Select:',
  'empty' => 'Select', 'options' => $alldrugs)
);
?>

索引控制器动作(查看下拉是打开的)

  function index() {
    $this->set('drugs', $this->Drug->find('all'));
    $this->set('alldrugs', $this->Drug->find('list', array('fields' => array('id','generic'), 'order' => 'Drug.generic', 'recursive' => -1,)));
  }

【问题讨论】:

  • 研究使用JsHelper::event 函数为“更改”事件附加一个处理程序。
  • 你可以使用 jQuey 轻松做到这一点,无需 JS 助手。
  • @thecodeparadox 在我尝试 JsHelper 之前你能不能说得更具体一点?
  • 你想使用 jQuery 的 JS 助手吗?我认为 jQuery 比 Js Helper 更容易

标签: cakephp redirect drop-down-menu


【解决方案1】:

您可以将根 url 存储在 default.ctp 的 js 变量中,如下所示:

将此代码放入 default.ctp &lt;head&gt;&lt;/head&gt; 部分。

<script>
  var _ROOT = "<?php echo $this->Html->url('/', true); ?>";
</script>

并且在&lt;head&gt; 标记内将此行附加到&lt;/head&gt; 结束之前:

<?php echo $this->Html->script(array('jquery', 'drug_list')); ?>

然后使用_ROOT,如下所示:

window.location = _ROOT + 'drugs/view/' + val;

放置 jquery 库并在 app/webroot/js 文件夹中创建一个 YOURNAME.js 文件,并将以下代码与 YOURNAME.js 文件一起放置。

你的名字如你所愿

$(function() {
   $('#ID_OF_YOUR_SELECT_BOX').change(function() {   // replace the ID_OF_YOUR_SELECT_BOX with the id to your select box given by Cake
       var val = $(this).val();  // val is the drug id
       window.location = _ROOT + 'drugs/view/' + val;
    });
});

【讨论】:

  • 那么我是直接将其放入视图中,还是将其放入控制器中?
  • 所以看起来我会把它放在它自己的文件中并在视图顶部调用它?
  • @Jonathan 您也可以在顶部调用它,但好的做法是制作单独的 js 文件并将其包含在 default.ctp 文件或相应的视图文件中使用此代码的位置
  • 我创建了 drug_list.js 文件,将变量放在 default.ctp 中,并有 echo $javascript->link('drug_list');在 default.ctp 头部部分。但它没有重定向,我可能没有正确地完成库部分。
  • cakephp 1.3,哈哈。我没有实现其他所有内容,只是使用之前完成的工作。
【解决方案2】:

我会将选择放在一个没有提交按钮的表单中,并在选择中添加一个onclick(实际上你并不需要一个完整的框架):

<?php
echo $form->input('Drug.generic', array('type' => 'select', 'label' => 'Quick Select:',
  'empty' => 'Select', 'options' => $alldrugs, 'onchange'=>'this.form.submit();')
);
?>

当然,在控制器中,您必须检查 this-&gt;data 并根据选择将用户重定向到正确的页面,或者如果您不想重定向用户,只需更改 find() 上的条件.

希望这会有所帮助,

【讨论】:

    【解决方案3】:

    结合使用 jQuery 和 PHP,您可以直接重定向到您想要的操作:

    <?php
    echo $form->input('Drug.generic', array('type' => 'select', 'label' => 'Quick Select:',
      'empty' => 'Select', 'options' => $alldrugs, 'id' => 'drug_select')
    );
    ?>
    
    $(document).ready(function(){
    
        $("#drug_select").change(function(){
            var drug_id = $(this).val();
            if(drug_id.length > 0)
            {
                window.location = "<?php echo Router::url(array('controller' => 'drugs', 'action' => 'view'), true) ?>/" + drug_id;
            }
        });
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多