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?

Priyank
fuente

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/');
    });
});
Priyank
fuente
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>
Nitesh
fuente
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.

Khoa TruongDinh
fuente
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