ビューJsまたはhtmlファイルでベースURLまたは動的URLを取得する


16

必要に応じてフロントエンドで動的なURLを取得して、単純に定義mage/urlして使用することができますurl.build('<Modulename>/<controllername>/<action>/')

バックエンドに対して同じことを試みたとき、期待した結果が返されませんでした。

現在のURLを指定し、指定したパスを追加します。

誰もこれがどのように機能するか説明できますか。どこかでbaseUrlを定義する必要がありますか?

回答:


9

Khoaの説明に感謝します。私が達成したかったのは、管理フォームであり、外部URLをajaxで呼び出しています。静的パスを使用していたので、動的にそれが必要でした。だからここに私がやったことがあります。

私のレイアウト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>

これにより、バックエンドで同じ結果が得られません。最初にブロックのURLをベースに定義する必要があります
-Priyank

しかし、あなたの質問では、あなたjsにURLが欲しいと言っているので、これは役に立ちます。次に、どのファイルにURLが必要かを教えてください。問題は解決されましたか?
ニテシュ

url.build()関数を使用してサイトのベースURLを取得する方法は?
プリンスパテル

これを使用する-> define(['mage / url']
Nitesh

6

知っておく必要がある最も重要なこと:ベースURLを設定する必要がありますurl.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を設定する場所は2つあります。

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コンポーネントを使用して作成されているため、onepageまたはshippingで定義されているURLをどのように設定できますか?
Priyank

こんにちは、問題の詳細を説明できます。UIコンポーネントについて:magento.stackexchange.com/questions/97291/...
Khoa TruongDinh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.