Получить базовый URL или динамический URL в представлении файлов JS или HTML

16

Я понимаю, чтобы получить динамический URL-адрес в переднем конце, если мне нужно, я могу просто определить mage/urlи использовать его какurl.build('<Modulename>/<controllername>/<action>/')

Когда я попробовал то же самое для бэкэнда, он не дал мне ожидаемого результата.

Это дало текущий URL и добавило путь, который я дал.

Может кто-нибудь объяснить, как это работает. Нужно ли где-нибудь определять baseUrl?

Priyank
источник

Ответы:

9

Спасибо Khoa за его объяснение того, чего я хотел достичь, в форме администратора, я называю внешний URL с помощью ajax. Я использовал статический путь, поэтому я хотел его динамически. Итак, вот что я сделал.

XML-файл My Layout

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
                <uiComponent name="namespace_modulename_form"/>
                <block class="Namespace\Modulename\Block\Adminhtml\Edit" name="edit" template="Namespace_Modulename::edit.phtml" />
        </referenceContainer>
    </body>
</page>

Layout Phtml File Я определил baseUrl.

    <script>
        require([
            'mage/url'
        ], function(url) {
            return url.setBaseUrl('<?php /* @escapeNotVerified */ echo $block->getAdminBaseUrl();?>');
        })
    </script>

Мой файл блока, который возвращает базовый URL

<?php

namespace Namespcae\Modulename\Block\Adminhtml;

class Edit extends \Magento\Framework\View\Element\Template
{

    protected $_configReader;

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Framework\App\DeploymentConfig\Reader $configReader
    ) {
        $this->_configReader = $configReader;
        parent::__construct($context);
    }

    public function getAdminBaseUrl(){
        $config = $this->_configReader->load();
        $adminSuffix = $config['backend']['frontName'];
        return $this->getBaseUrl() . $adminSuffix . '/';
    }
}

Теперь в моих файлах JS я могу использовать его как.

define([
    'Magento_Ui/js/form/element/abstract',
    'mage/url'
], function (Abstract, url) {
    'use strict';

    return Abstract.extend({
        url.build('namespace_module/controllername/action/');
    });
});
Priyank
источник
8

Просто сделай это только в файле JS

define(['mage/url'], 
  function (url) {
   'use strict';
    var url = url.build('<modulename>/<controllername>/<actionname>');
});

Результат будет:

http://ip_address/<modulename>/<controllername>/<actionname>
Nitesh
источник
Это не даст мне тот же результат в бэкэнде. Поэтому сначала нужно определить базовый URL в блоке
Priyank
Но в вашем вопросе вы упоминаете, что вы хотите URL в js, так что это будет полезно. Теперь скажите мне, в каком файле вы хотите URL . Ваша проблема решена или нет?
Нитеш
Как получить базовый URL сайта с помощью функции url.build ()?
Принц Патель
используя это -> define (['mage / url']
Nitesh
6

Самое важное, что нам нужно знать: нам нужно установить базовый URL дляurl.build('<Modulename>/<controllername>/<action>/') :

Библиотека / веб / Mage / url.js

        setBaseUrl: function (url) {
            baseUrl = url;
        },
        build: function(path) {
            if (path.indexOf(baseUrl) != -1) {
                return path;
            }
            return baseUrl + path;
        }

В основном, есть два места, где можно установить базовый URL:

vendor/magento/module-checkout/view/frontend/templates/onepage.phtml vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml

return url.setBaseUrl('<?php /* @escapeNotVerified */ echo $block->getBaseUrl();?>');

Таким образом, в вашем админе, вы должны установить базовый URL администратора.

Кхоа ЧыонгДинь
источник
1
Хорошо, я понял. Но говорить об административных формах, где мне нужно это реализовать. Моя форма создается с использованием компонента пользовательского интерфейса, так как я могу установить URL, как он был определен на одной странице или доставки?
Приянк
Здравствуйте, вы можете объяснить более подробно о вашей проблеме. О компоненте пользовательского интерфейса
Khoa TruongDinh