Obtenir l'URL de base ou l'URL dynamique en vue des fichiers Js ou html

16

Je le trouve pour obtenir une URL dynamique dans le front-end si j'ai besoin, je peux simplement le définir mage/urlet l'utiliser commeurl.build('<Modulename>/<controllername>/<action>/')

Lorsque j'ai essayé la même chose pour le backend, cela ne m'a pas retourné le résultat attendu.

Il a donné l'url actuelle et ajoute le chemin que j'avais donné.

Quelqu'un peut-il expliquer comment cela fonctionne? Dois-je définir la baseUrl quelque part?

Priyank
la source

Réponses:

9

Merci à Khoa pour son explication ce que je voulais réaliser est dans mon formulaire d'administration que j'appelle une URL externe avec ajax. J'utilisais un chemin statique donc je le voulais dynamiquement. Voici donc ce que j'ai fait.

Mon fichier XML de mise en page

<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 J'ai défini la baseUrl.

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

Mon fichier de bloc qui renvoie l'url de 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 . '/';
    }
}

Maintenant, dans mes fichiers js, je peux l'utiliser comme.

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

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

Faites-le seulement dans le fichier js

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

Le résultat sera:

http://ip_address/<modulename>/<controllername>/<actionname>
Nitesh
la source
Cela ne me donnera pas le même résultat en backend. Il faut donc définir la base de l'URL dans le bloc en premier
Priyank
Mais dans votre question, vous mentionnez que vous voulez une URL en js, donc cela vous sera utile. Maintenant, dites-moi dans quel fichier voulez-vous l' URL . Votre problème est-il résolu ou non?
Nitesh
Comment obtenir l'url de base du site en utilisant la fonction url.build ()?
Prince Patel
en utilisant ceci -> define (['mage / url']
Nitesh
6

La chose la plus importante que nous devons savoir: nous devons définir l'URL de base poururl.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;
        }

Fondamentalement, il existe deux endroits où définir l'URL de 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();?>');

Donc, dans votre administrateur, vous devez définir l'URL de base de l'administrateur.

Khoa TruongDinh
la source
1
Ok je comprends. Mais en parlant des formulaires d'administration, où j'ai besoin de cela pour être implémenté. Mon formulaire est créé à l'aide du composant ui, alors comment puis-je définir l'URL telle qu'elle a été définie dans une page ou une expédition?
Priyank
Bonjour, vous pouvez expliquer plus de détails sur votre problème. A propos du composant Ui: magento.stackexchange.com/questions/97291/…
Khoa TruongDinh