我想制作3个dependents下拉列表,每个下拉依赖于前一个下拉列表,所以当我从第一个下拉列表中选择一个项目时,所有数据从数据库中获取并添加到第二个下拉列表作为项目。 我知道如何在使用ajax的普通php页面中执行此操作,但由于opencart使用MVC我不知道如何获取所选值
答案 0 :(得分:0)
为每个列表添加一个事件处理程序,当它发生更改时(您已知的部分)获取其选定值,详细教程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")
}
通过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
的文件