三个依赖下拉列表opencart

时间:2015-07-16 11:03:30

标签: ajax opencart

我想制作3个dependents下拉列表,每个下拉依赖于前一个下拉列表,所以当我从第一个下拉列表中选择一个项目时,所有数据从数据库中获取并添加到第二个下拉列表作为项目。  我知道如何在使用ajax的普通php页面中执行此操作,但由于opencart使用MVC我不知道如何获取所选值

1 个答案:

答案 0 :(得分:0)

基本上,你需要两件事:

(1)处理清单变更

为每个列表添加一个事件处理程序,当它发生更改时(您已知的部分)获取其选定值,详细教程here以防有人需要它
只是一个建议(用于代码优化),而不是将单独的JS函数关联到每个列表并重复代码,您可以编写一次函数,将更改列表的ID与ID一起传递给它依赖列表并在任何地方使用。

您的HTML应该是这样的

<select id="list1" onchange="populateList('list1', 'list2')">
  ...
</select>

<select id="list2" onchange="populateList('list2', 'list3')">
  ...
</select>

<select id="list3">
  ...
</select>

和你的JS

function populateList(listID, depListID)
{
    // get the value of the changed list thorugh fetching the elment with ID "listID"
    var listValue = ... 
    // get the values to be set in the depending list through AJAX
    var depListValues = ...
    // populate the depending list (element with ID "depListID")
}

(2)填充依赖列表

通过AJAX将值发送到相应的PHP函数并获取值以更新依赖列表(您要求的部分),AJAX详细教程here
open cart使用前端控制器设计模式进行路由,URL始终如下:
bla bla bla.bla/index.php?route=x/y/z&other parameters x =包含一组类文件的文件夹名称, y =包含特定类的文件名, z =要在该类中调用的函数(如果省略,将调用index()

所以你的问题的答案是:

(步骤1)在AJAX请求中使用以下URL:
index.php?route=common/home/populateList

(第2步)打开文件<OC_ROOT>/catalog/controller/common/home.php,您会找到class ControllerCommonHome,添加名为populateList的新功能并在那里添加您的逻辑
(步骤3)为了使用数据库对象,我之前回答了here

注意:如果您在管理员方面,所有链接中都必须存在安全令牌以及路径,请使用该URL:
index.php?route=common/home/populateList&token=<?php echo $this->session->data['token'] ?>并操纵admin文件夹而不是catalog的文件

<小时/> PS :每当用户更改列表#i 中的选定值时,您应该更新列表#i + 1 中的选项并重置以下所有列表列表#i + 2,列表#i + 3 ...,所以在您的情况下,您应该在第一个列表值更改时重置第三个列表 P.P.S :OC 1.5.x =&gt;的非常好的指南here(它也可以作为OC 2.x的参考,并进行一些修改)