PHP& HTML:如何创建动态下拉列表

时间:2015-01-21 18:25:51

标签: php jquery

我有点问题。

我现在正在网上搜索相当长的一段时间才找到合适的解决方案,但到目前为止我还没有成功。

这就是我想要的:

  • 首先,我选择类别

  • 然后,在第二个选择中包含来自类别选择的所有商店结果。

这是我的第一个下拉列表,其中包含Category:

<select name="category" class="form-control" id="select1">
    <option value="-1"> - Choose One -</option>
         <?php
           $StoreCategoriesAPIAccessor = new StoreCategoriesAPIService(GuzzleClient::getClient());
           $stores = $StoreCategoriesAPIAccessor->getStoreCategories();
           foreach ($stores as $store):      
         ?>
     <option value="<?php echo $store->getStoreCategoryId(); ?>"><?php echo $store->getCategory(); ?></option>
         <?php endforeach; ?>
 </select>

这是我的第二个下拉列表:

<select name="category" class="form-control" id="select2">
    <option value="-1"> - Choose One -</option>
         <?php
            $StoreAPIAccessor = new StoreAPIService(GuzzleClient::getClient());
            $stores = $StoreAPIAccessor->getStores();
            foreach ($stores as $store):      
         ?>
         <option value="<?php echo $store->getStoreId(); ?>"><?php echo $store->getStoreName(); ?></option>
          <?php endforeach; ?>
</select>

有人知道如何为这种情况实施动态下拉列表吗?

1 个答案:

答案 0 :(得分:1)

首先,我想要求您尽可能地将业务逻辑与视图逻辑分开,因此我将在此答案中执行此操作。

其次,你拥有的第二个下拉框逻辑不包含任何可以检索给定类别的商店的内容,因此我会做出一些假设,你可以根据它进行调整。

<?php
$StoreCategoriesAPIAccessor = new StoreCategoriesAPIService(GuzzleClient::getClient());
$categories = $StoreCategoriesAPIAccessor->getStoreCategories();

if (!empty($_GET['category'])) {
    $category_id = $_GET['category'];
    $StoreAPIAccessor = new StoreAPIService(GuzzleClient::getClient());
    $stores = $StoreAPIAccessor->getStores($category_id); // Assumption, the call to getStores() accepts category_id as a parameter
} else { // Optional as you don't need to declare variables in PHP, but its better practice to do so
    $category_id = null;
    $stores = array();
}
?>
<select id="select_category" name="category" class="form-control" onchange="window.location='?category=' + this.value">
    <option value="">- Choose One -</option>
    <?php foreach ($categories as $category): ?>
        <option value="<?php echo $category->getStoreCategoryId() ?>"><?php echo $category->getCategory() ?></option>
    <?php endforeach ?>
</select>

<select id="select_store" name="store" class="form-control"<?php echo $category_id == null ? " disabled='disabled'" : "">
    <option value="">- Choose One -</option>
    <?php foreach ($stores as $store): ?>
        <option value="<?php echo $store->getStoreId() ?>"><?php echo $store->getStoreName() ?></option>
    <?php endforeach ?>
</select>