既然你已经弄清楚了后端,我将专注于前端。此外,由于您需要做的就是填充您已经创建的列表,这应该很容易。我以前做过类似的事情,我发现只使用 JSON 来查询列表(在你的情况下是城市)并填充下拉列表更容易。我不相信这是最“MVP/正确”的方式,但它比其他方式工作量少。 (至少对我来说是这样。我总是更喜欢 JavaScript 选项,因为它允许将来轻松自定义页面。)
要使用 JSON 方法,您需要使用如下方法创建一个块。您将看到您还必须创建一个资源模型(我不会详细介绍如何创建资源模型或块的详细信息,因为网上已经有比我更好的资源可以深入了解您需要的每一个细节.)。完成后,您可以直接从 .phtml 页面以易于使用的 JSON 数组访问数据。
首先,您需要确保您现在正确地构建了您的模块。下面的新Block应该是这样的结构...
app/code/<VENDOR>/<MODULE>/Block/Wrapper.php (or whatever you name it)
管理块应该在下面的结构中,听起来你已经知道该怎么做了。
app/code/<VENDOR>/<MODULE>/Block/Adminhtml
创建您的 Block 并添加一个方法来创建 JOSN 数组,如下所示...
public function getCityList()
{
$city_array = array();
/** @var \<VENDOR>\<MODULE>\Model\ResourceModel\City\Collection $collection */
$collection = $this->_cityCollectionFactory->create();
$collection->addFieldToFilter('active','1')->addFieldToSelect(['city_id', 'city']);
$collection->getSelect()->order(array('city ASC', 'city_id ASC'));
$count = 0;
foreach ($collection as $model)
{
$city_array["$count"] = $model->getData();
$count++;
}
return \Zend_Json::encode($city_array);
}
仅供参考...上面代码中的 foreach 循环很奇怪,它使用了 $count,因为我需要做一些棘手的事情才能让某些东西正常工作。
然后您可以在 .phtml 文件中创建 Block 以通过 javascript 访问数据。
<?php
$block_obj = $block->getLayout()->createBlock('<VENDOR>\<MODULE>\Block\Wrapper');
?>
<script type="text/javascript">
window.citylistJson = <?php echo $block_obj->getCityList() ?>;
</script>