Отримайте базовий URL або динамічний URL-адрес у вигляді Js або html-файлів


16

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

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

Він дав поточний URL і додав шлях, який я провів.

Хтось може пояснити, як це виходить. Чи потрібно десь визначити baseUrl?

Відповіді:


9

Дякую Хої за його пояснення, чого я хотів досягти, це у моїй формі адміністратора я дзвоню зовнішній 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

Але в ур-питанні згадайте, що ви хочете URL у js, тому це стане в нагоді. Тепер скажіть мені, у якому файлі ви хочете URL . Вирішена ваша проблема чи ні?
Нітеш

Як ми отримуємо базовий URL-адресу сайту за допомогою функції url.build ()?
Принц Патель

використовуючи це -> 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:

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 так, як це було визначено на одній сторінці чи доставці?
Приянк

Привіт, ви можете пояснити більше деталей щодо своєї проблеми. Про компонент інтерфейсу: magento.stackexchange.com/questions/97291/…
Khoa TruongDinh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.