在视图Js或html文件中获取基本网址或动态网址


16

我想出了要在前端获取动态网址的方法,我可以简单地定义mage/url并将其用作url.build('<Modulename>/<controllername>/<action>/')

当我为后端尝试相同的操作时,它没有返回预期的结果。

它给出了当前的URL,并附加了我给出的路径。

谁能解释这是怎么回事。我需要在某个地方定义baseUrl吗?

Answers:


9

感谢Khoa的解释,我想要实现的是在我的管理表单中,我正在用ajax调用外部URL。我使用的是静态路径,所以我希望动态地使用它。这就是我所做的。

我的布局XML文件

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

布局Phtml文件我定义了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/');
    });
});

8

只在js文件中这样做

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

结果将是:

http://ip_address/<modulename>/<controllername>/<actionname>

在后端,这不会给我相同的结果。因此,需要首先在代码块中定义基本的网址
Priyank

但是在您的问题中,您提到您想要js中的URL,所以这将有所帮助。现在告诉我您想要URL哪个文件。您的问题解决了吗?
Nitesh

我们如何使用url.build()函数获取网站的基本URL?
帕特尔王子(Patel Patel)

使用此-> define(['mage / url']
Nitesh

6

我们需要知道的最重要的事情:我们需要为设置基本URLurl.build('<Modulename>/<controllername>/<action>/')

lib / web / 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
好吧,我明白了。但是谈论管理表单,我需要在这里实现它。我的表单是使用ui组件创建的,那么如何设置页面或运输中定义的url?
Priyank

您好,您可以解释有关您问题的更多详细信息。关于UI组件:magento.stackexchange.com/questions/97291/...
夸TruongDinh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.