Obtener URL base o URL dinámica en vista Js o archivos html


16

Lo descubro para obtener una URL dinámica en el front end si lo necesito, simplemente puedo definirlo mage/urly usarlo comourl.build('<Modulename>/<controllername>/<action>/')

Cuando intenté lo mismo para el backend, no me devolvió el resultado esperado.

Le dio la url actual y anexó el camino que le había dado.

¿Alguien puede explicar cómo funciona esto? ¿Necesito definir la baseUrl en alguna parte?

Respuestas:


9

Gracias a Khoa por su explicación, lo que quería lograr es en mi formulario de administrador. Llamo a una url externa con ajax. Estaba usando una ruta estática, así que la quería dinámicamente. Entonces esto es lo que he hecho.

Mi archivo XML de diseño

<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 File Definí la baseUrl.

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

Mi archivo de bloque que devuelve la url 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 . '/';
    }
}

Ahora en mis archivos js puedo usarlo como.

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

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

8

Solo haz eso solo en el archivo js

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

El resultado será:

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

Esto no me dará el mismo resultado en el backend. Así que primero necesito definir la base de la url en el bloque
Priyank

Pero en su pregunta, usted menciona que desea URL en js, así que esto será útil. Ahora dime en qué archivo quieres URL . ¿Su problema está resuelto o no?
Nitesh

¿Cómo obtenemos la URL base del sitio usando la función url.build ()?
Prince Patel

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

6

Lo más importante que debemos saber: necesitamos establecer la URL base paraurl.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;
        }

Básicamente, hay dos lugares donde configurar la url 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();?>');

Entonces, en su administrador, debe configurar la url de la base de administración.


1
Ok, entiendo eso. Pero hablando de formularios de administración, donde necesito que esto se implemente. Mi formulario se crea usando el componente ui, entonces, ¿cómo puedo configurar la URL como se ha definido en una página o envío?
Priyank

Hola, puedes explicar más detalles sobre tu problema. Acerca del componente Ui: magento.stackexchange.com/questions/97291/…
Khoa TruongDinh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.