Как изменить интерфейсные страницы 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-код, который показывает всплывающее окно с раскрывающимся списком для городов при загрузке страницы.


person Mann    schedule 08.05.2017    source источник


Ответы (1)


Поскольку у вас уже есть серверная часть, я сосредоточусь на интерфейсе. Кроме того, поскольку все, что вам нужно сделать, это заполнить список, который вы уже создали, это должно быть легко. Я делал что-то подобное раньше, и мне было проще просто использовать JSON для запроса списка, в вашем случае городов, и заполнения раскрывающегося списка. Я не верю, что это самый лучший / правильный способ, но это меньше работы, чем другие способы. (По крайней мере, для меня это так. Я всегда предпочитаю вариант JavaScript, поскольку он позволяет легко настраивать страницу в будущем.) Чтобы использовать метод JSON, вам необходимо создать блок с помощью метода, подобного приведенному ниже. Вы увидите, что вам также нужно будет создать модель ресурсов (я не собираюсь переходить к созданию модели ресурсов или деталям блоков, так как есть гораздо лучшие ресурсы, чем я, уже онлайн, которые будут включать каждую деталь, которая вам нужна. .). После этого вы можете получить доступ к данным прямо со страницы .phtml в удобном массиве JSON.

Сначала вам нужно убедиться, что вы правильно структурируете свои модули. Новый блок ниже должен иметь такую ​​структуру ...

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);
}

К вашему сведению ... Цикл 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>
person CommonKnowledge    schedule 08.05.2017