Ottieni URL di base o URL dinamico Nella vista file Js o html


16

Lo capisco per ottenere l'URL dinamico nel front-end, se ho bisogno, posso semplicemente definirlo mage/urle usarlo comeurl.build('<Modulename>/<controllername>/<action>/')

Quando ho provato la stessa cosa per il backend non mi ha restituito il risultato atteso.

Ha fornito l'URL corrente e ha aggiunto il percorso che avevo indicato.

Qualcuno può spiegare come funziona. Devo definire la baseUrl da qualche parte?

Risposte:


9

Grazie a Khoa per la sua spiegazione, ciò che volevo ottenere è nel mio modulo di amministrazione, sto chiamando un URL esterno con Ajax. Stavo usando un percorso statico, quindi lo desideravo in modo dinamico. Quindi ecco cosa ho fatto.

Il mio file XML di layout

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

File Phtml di layout Ho definito baseUrl.

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

Il mio file di blocco che restituisce l'URL di base

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

Ora nei miei file js posso usarlo come.

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

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

8

Fallo solo nel file js

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

Il risultato sarà:

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

Questo non mi darà lo stesso risultato nel backend. Quindi è necessario definire prima la base dell'URL nel blocco
Priyank il

Ma nella tua domanda dici che vuoi l' URL in js, quindi questo sarà utile. Ora dimmi in quale file vuoi l' URL . Il tuo problema è stato risolto o no?
Nitesh,

Come otteniamo l'URL di base del sito usando la funzione url.build ()?
Prince Patel,

usando questo -> define (['mage / url']
Nitesh

6

La cosa più importante che dobbiamo sapere: dobbiamo impostare l'URL di base perurl.build('<Modulename>/<controllername>/<action>/') :

lib / web / mago / url.js

        setBaseUrl: function (url) {
            baseUrl = url;
        },
        build: function(path) {
            if (path.indexOf(baseUrl) != -1) {
                return path;
            }
            return baseUrl + path;
        }

Fondamentalmente, ci sono due posti in cui impostare l'URL di base:

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

Quindi, nel tuo amministratore, devi impostare l'URL di base dell'amministratore.


1
Ok ho capito. Ma parlando di moduli di amministrazione, dove ho bisogno che questo sia implementato. Il mio modulo viene creato utilizzando il componente dell'interfaccia utente, quindi come posso impostare l'URL come è stato definito in onepage o spedizione?
Priyank il

Ciao, puoi spiegare maggiori dettagli sul tuo problema. Informazioni sul componente Ui: magento.stackexchange.com/questions/97291/…
Khoa TruongDinh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.