我试图创建一个模块,既有前端和后端的功能。例如,当商店加载时,我需要在主页中询问城市。所有可用的城市都是在后台管理面板中输入/管理的。
在我以前只写后端的东西之前,前端似乎有点令人困惑。
所有的例子都有一点不同(https://www.mageplaza.com/magento-2-module-development/,http://inchoo.net/magento-2/how-to-create-a-basic-module-in-magento-2/](http://inchoo.net/magento-2/how-to-create-a-basic-module-in-magento-2/])2),,它们都有routes.xml,where route_id,以及都是定义的,但是这里我不需要任何额外的路由。
我创建了模块V_name/M_name/adminhtml/block controllers etc view ...
指导我如何创建一个模块,其中既有前端和后端连接,城市应该进入管理,他们应该在前端主页上显示。
目前,我只能通过添加一些HTML来编辑主页内容CMS页面,当页面加载时,它会显示带有城市下拉菜单的弹出窗口。
发布于 2017-05-09 01:38:35
既然您已经弄清楚了后端,我将把重点放在前端。此外,由于您需要做的是填充已创建的列表,因此这应该很容易。我以前做过类似的事情,我发现只需使用JSON查询一个列表(在本例中是城市)并填充下拉列表会更容易。我不认为这是最“MVP/适当”的方法,但它比其他方法更少的工作量。(至少对我来说是这样。我总是更喜欢JavaScript选项,因为它允许将来轻松地进行页面定制。)要使用JSON方法,您需要使用如下所示的方法创建一个Block。您将看到,您还必须创建一个资源模型(我不会重复创建资源模型或块的详细信息,因为已经有比我更好的在线资源,这些资源将深入到您需要的每一个细节中)。完成此操作后,您可以在一个易于使用的.phtml数组中直接从JSON页面访问数据。
首先,您需要确保现在正确地构建了您的模块。下面的新积木应该是这样的结构…
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文件中创建该块,以便通过javascript访问数据。
<?php
$block_obj = $block->getLayout()->createBlock('<VENDOR>\<MODULE>\Block\Wrapper');
?>
<script type="text/javascript">
window.citylistJson = <?php echo $block_obj->getCityList() ?>;
</script>https://stackoverflow.com/questions/43853085
复制相似问题