Basis-URL oder dynamische URL abrufen In der Ansicht von Js- oder HTML-Dateien

16

Ich finde es heraus, um dynamische URL im Frontend zu bekommen, wenn ich es brauche, kann ich es einfach definieren mage/urlund verwendenurl.build('<Modulename>/<controllername>/<action>/')

Als ich dasselbe für das Backend ausprobierte, lieferte es mir nicht das erwartete Ergebnis.

Es gab die aktuelle URL und fügte den Pfad hinzu, den ich gegeben hatte.

Kann mir jemand erklären, wie das funktioniert. Muss ich die baseUrl irgendwo definieren?

Priyank
quelle

Antworten:

9

Dank an Khoa für seine Erklärung, was ich erreichen wollte, ist, dass ich in meiner Admin-Form eine externe URL mit Ajax aufrufe. Ich habe einen statischen Pfad verwendet, also wollte ich ihn dynamisch. Also hier ist was ich getan habe.

Meine Layout-XML-Datei

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

Layout-Phtml-Datei Ich habe die baseUrl definiert.

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

Meine Blockdatei, die die Basis-URL zurückgibt

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

Jetzt kann ich es in meinen js-Dateien als verwenden.

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

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

Tun Sie das einfach nur in der js-Datei

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

Ergebnis wird sein:

http://ip_address/<modulename>/<controllername>/<actionname>
Nitesh
quelle
Dies gibt mir nicht das gleiche Ergebnis im Backend. Also muss zuerst die Basis der URL im Block definiert werden
Priyank
Aber in Ihrer Frage erwähnen Sie, dass Sie URL in js wollen, so wird dies hilfreich sein. Nun sag mir, in welcher Datei du die URL haben willst . Ist Ihr Problem gelöst oder nicht?
Nitesh
Wie erhalten wir die Basis-URL der Site mit der Funktion url.build ()?
Prinz Patel
using this -> define (['mage / url']
Nitesh
6

Das Wichtigste, was wir wissen müssen: Wir müssen die Basis-URL festlegen fürurl.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;
        }

Grundsätzlich gibt es zwei Stellen, an denen die Basis-URL festgelegt werden kann:

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

Also müssen Sie in Ihrem Administrator die Basis-URL des Administrators festlegen.

Khoa TruongDinh
quelle
1
Ok, das verstehe ich. Aber ich spreche über Admin-Formulare, bei denen ich diese implementieren muss. Mein Formular wird mit der UI-Komponente erstellt. Wie kann ich die URL so einstellen, wie sie in der Onepage oder im Versand definiert wurde?
Priyank
Hallo, Sie können weitere Details zu Ihrem Problem erläutern. Informationen zur
Khoa TruongDinh