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?

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

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>

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.