如何修改magento前端页面

时间:2017-05-08 16:48:25

标签: php magento magento2

我正在尝试创建一个具有前端和后端功能的模块。就像我需要在商店加载时在主页中询问城市。所有可用的城市都在后端管理面板中输入/管理。

在我以前只为后端写东西之前,前端似乎有些混乱。

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

所有示例都略有不同(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页面,该页面显示了一个弹出窗口,其中包含页面加载时城市的下拉列表。

1 个答案:

答案 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>