2017-05-08 150 views
0

我想创建一个既有前端功能又有后端功能的模块。就像我在商店加载时需要在主页上询问城市一样。所有可用城市都在后台管理面板中输入/管理。如何修改magento前端页面

在我以前只写后端的东西之前,前端似乎没什么混淆。

有一个完全用于主题开发的设计文件夹。

所有的例子都有点不同(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 ...

指导我如何创建一个模块,同时具有前端和后端连接,城市应该在管理员进入,他们应该能显示在前端网页。

现在,我只设法编辑主页内容CMS页面,通过添加一些显示弹出式页面加载页面的城市下拉菜单的HTML页面。

回答

0

既然您已经掌握了后端,我将专注于前端。而且,因为你需要做的就是填充你已经创建的列表应该很容易。我之前做过这样的事情,我发现使用JSON查询列表(在您的情况下是城市)并填充下拉列表更容易。我不认为这是最“MVP /合适”的路线,但是其他方面的工作较少。 (至少对我来说是这样,我总是比较喜欢JavaScript选项,因为它允许将来进行简单的页面自定义。) 要使用JSON方法,您需要使用类似下面的方法创建一个Block。你会看到你还必须创建一个资源模型(我不打算重新创建资源模型或块的细节,因为有比我已经在线的资源好得多的资源,将会进入你需要的每一个细节)。完成此操作后,您可以直接从简单易用的JSON数组中的.phtml页面访问数据。

首先,您需要确保您现在正确地构建模块。下面新的块应该是这样的结构...

app/code/<VENDOR>/<MODULE>/Block/Wrapper.php (or whatever you name it) 

管理模块应该是下面的结构,它听起来就像你已经知道该怎么做。

app/code/<VENDOR>/<MODULE>/Block/Adminhtml 

创建块,并加入到创建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循环是怪异,并使用$计,因为我需要做一些棘手的事情来完成某些工作。

然后,您可以在您的.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>