Nhận Url cơ sở hoặc Url động khi xem tệp Js hoặc html


16

Tôi tìm ra nó để có được url động ở mặt trước nếu tôi cần tôi có thể chỉ cần xác định mage/urlvà sử dụng nó như làurl.build('<Modulename>/<controllername>/<action>/')

Khi tôi thử điều tương tự cho phần phụ trợ, nó không trả về cho tôi kết quả như mong đợi.

Nó đã cho url hiện tại và nối thêm đường dẫn mà tôi đã đưa ra.

Bất cứ ai có thể giải thích làm thế nào điều này làm việc ra. Tôi có cần xác định baseUrl ở đâu không?

Câu trả lời:


9

Cảm ơn Khoa đã giải thích cho anh ấy những gì tôi muốn đạt được là ở dạng quản trị viên của tôi, tôi đang gọi một url bên ngoài bằng ajax. Tôi đã sử dụng một đường dẫn tĩnh vì vậy tôi muốn nó một cách linh hoạt. Vì vậy, đây là những gì tôi đã làm.

Tệp XML Bố cục của tôi

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

Bố cục tệp Phtml Tôi đã xác định baseUrl.

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

Tệp khối của tôi trả về url cơ sở

<?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 . '/';
    }
}

Bây giờ trong các tập tin js của tôi, tôi có thể sử dụng nó như.

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

    return Abstract.extend({
        url.build('namespace_module/controllername/action/');
    });
});

8

Chỉ làm điều đó Chỉ trong tập tin js

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

Kết quả sẽ là:

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

Điều này sẽ không cho tôi kết quả tương tự trong phụ trợ. Vì vậy, trước tiên cần xác định url cơ sở trong khối
Priyank

Nhưng trong câu hỏi của bạn, bạn đề cập rằng bạn muốn URL trong js vì vậy điều này sẽ hữu ích. Bây giờ hãy cho tôi biết tập tin nào bạn muốn URL . Vấn đề của bạn đã được giải quyết hay chưa?
Nitesh

Làm cách nào chúng tôi có được url cơ sở của trang web bằng hàm url.build ()?
Hoàng tử Patel

bằng cách sử dụng này -> xác định (['mage / url']
Nitesh

6

Điều quan trọng nhất chúng ta cần biết: Chúng ta cần đặt url cơ sở chourl.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;
        }

Về cơ bản, có hai nơi để đặt url cơ sở:

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();?>');

Vì vậy, trong quản trị viên của bạn, bạn phải đặt url cơ sở quản trị.


1
Ok tôi hiểu rồi Nhưng nói về các hình thức quản trị, nơi tôi cần thực hiện điều này. Biểu mẫu của tôi được tạo bằng thành phần ui, vậy làm cách nào tôi có thể đặt url như đã được xác định trong onepage hoặc giao hàng?
Priyank

Xin chào, bạn có thể giải thích chi tiết hơn về vấn đề của bạn. Giới thiệu về thành phần Ui: magento.stackexchange.com/questions/97291/ Kẻ
Khoa TruongDinh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.