我正在尝试创建一个具有前端和后端功能的模块。就像我需要在商店加载时在主页中询问城市。所有可用的城市都在后端管理面板中输入/管理。
在我以前只为后端写东西之前,前端似乎有些混乱。
有一个完全用于主题开发的设计文件夹。
所有示例都略有不同(https://www.mageplaza.com/magento-2-module-development/,http://inchoo.net/magento-2/how-to-create-a-basic-module-in-magento-2/] 2),他们有routes.xml
,其中route_id
,所有都已定义,但此处我不需要任何额外的路线。在前端页面中需要一些额外的调整。
我创建了模块V_name/M_name/adminhtml/block controllers etc view
...
指导我如何创建一个具有前端和后端连接的模块,应该在admin中输入城市,它们应该显示在前端主页上。
目前,我只是通过添加一些HTML来设法编辑主页内容CMS页面,该页面显示了一个弹出窗口,其中包含页面加载时城市的下拉列表。
答案 0 :(得分:0)
由于你已经知道了后端,我将专注于前端。此外,由于您需要做的就是填充已经创建的列表,这应该很容易。之前我做了类似的事情,我发现使用JSON查询列表(在您的情况下是城市)并填充下拉列表更容易。我不相信这是最“MVP /适当”的方式,但它比其他方式更少的工作。 (至少对我而言。我总是喜欢JavaScript选项,因为它允许以后轻松定制页面。) 要使用JSON方法,您需要使用如下方法创建块。您将看到您还必须创建一个资源模型(我不打算重新创建资源模型或块的详细信息,因为有比我已经在线更好的资源,它将包含您需要的每个细节)。完成后,您可以直接从.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);
}
FYI ...上面代码中的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>