Uzyskaj podstawowy adres URL lub dynamiczny adres URL W widoku Pliki JS lub HTML


16

Rozumiem, aby uzyskać dynamiczny adres URL w interfejsie, jeśli potrzebuję, mogę po prostu zdefiniować mage/urli użyć go jakourl.build('<Modulename>/<controllername>/<action>/')

Kiedy spróbowałem tego samego dla backendu, nie zwróciło to oczekiwanego rezultatu.

Podał aktualny adres URL i dopisał ścieżkę, którą podałem.

Czy ktoś może wyjaśnić, jak to działa. Czy muszę gdzieś zdefiniować baseUrl?

Odpowiedzi:


9

Dzięki Khoa za wyjaśnienie, co chciałem osiągnąć, to w moim formularzu administratora dzwonię na zewnętrzny adres URL za pomocą ajax. Użyłem ścieżki statycznej, więc chciałem ją dynamicznie. Oto co zrobiłem.

Plik XML mojego układu

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

Układ Plik phtml Zdefiniowałem baseUrl.

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

Mój plik bloku, który zwraca podstawowy adres 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 . '/';
    }
}

Teraz w moich plikach js mogę go używać jako.

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

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

8

Po prostu zrób to tylko w pliku js

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

Wynik będzie:

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

To nie da mi tego samego wyniku w backend. Więc najpierw musisz zdefiniować adres URL w bloku
Priyank

Ale w twoim pytaniu wspominasz, że chcesz adres URL w js, więc to będzie pomocne. Teraz powiedz mi, w którym pliku chcesz adres URL . Czy Twój problem został rozwiązany?
Nitesh

Jak uzyskać podstawowy adres URL witryny za pomocą funkcji url.build ()?
Prince Patel

używając tego -> zdefiniuj (['mag / url']
Nitesh

6

Najważniejszą rzeczą, którą musimy wiedzieć: musimy ustawić podstawowy adres URL dlaurl.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;
        }

Zasadniczo istnieją dwa miejsca, w których można ustawić podstawowy adres 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();?>');

Tak więc, u administratora musisz ustawić podstawowy adres URL administratora.


1
Ok, rozumiem Ale mówiąc o formularzach administracyjnych, gdzie muszę to zaimplementować. Mój formularz został utworzony przy użyciu komponentu interfejsu użytkownika, więc w jaki sposób mogę ustawić adres URL zdefiniowany na stronie lub w wysyłce?
Priyank

Witaj, możesz wyjaśnić więcej szczegółów na temat swojego problemu. Informacje o komponencie interfejsu użytkownika
Khoa TruongDinh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.