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?

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

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>

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.