รับ URL พื้นฐานหรือ URL ไดนามิกในการดูไฟล์ Js หรือ html


16

ฉันคิดว่ามันจะได้รับ URL แบบไดนามิกในส่วนหน้าถ้าฉันต้องการฉันสามารถกำหนดmage/urlและใช้มันเป็นurl.build('<Modulename>/<controllername>/<action>/')

เมื่อฉันลองสิ่งเดียวกันกับแบ็กเอนด์มันก็ไม่ได้ผลตามที่คาดหวัง

มันให้ URL ปัจจุบันและต่อท้ายเส้นทางที่ฉันได้รับ

ทุกคนสามารถอธิบายวิธีการนี ฉันจำเป็นต้องกำหนด baseUrl ที่ใดที่หนึ่งหรือไม่?

คำตอบ:


9

ขอบคุณ Khoa สำหรับคำอธิบายของเขาสิ่งที่ฉันต้องการบรรลุคือในแบบฟอร์มผู้ดูแลระบบของฉันฉันกำลังเรียก url ภายนอกด้วย ajax ฉันกำลังใช้เส้นทางแบบคงที่ดังนั้นฉันต้องการมันแบบไดนามิก ดังนั้นนี่คือสิ่งที่ฉันได้ทำ

ไฟล์ XML ของเลย์เอาต์ของฉัน

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

เลย์เอาต์ไฟล์ HTML ที่ฉันกำหนด baseUrl

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

ไฟล์บล็อกของฉันซึ่งส่งคืน URL พื้นฐาน

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

ตอนนี้ในไฟล์ js ของฉันฉันสามารถใช้มันเป็น

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

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

8

ทำแบบนั้นเฉพาะในไฟล์ js

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

ผลลัพธ์จะเป็น:

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

สิ่งนี้จะไม่ให้ผลลัพธ์เดียวกันกับฉันในแบ็กเอนด์ ดังนั้นจำเป็นต้องกำหนด URL ฐานในบล็อกก่อน
Priyank

แต่ในคำถามคุณพูดถึงว่าคุณต้องการURLในjsนี้จะเป็นประโยชน์ ตอนนี้บอกฉันในแฟ้มที่ไม่ต้องการ u URL ปัญหาของคุณแก้ไขหรือไม่?
Nitesh

เราจะรับ url พื้นฐานของเว็บไซต์โดยใช้ฟังก์ชัน url.build () ได้อย่างไร
เจ้าชาย Patel

ใช้สิ่งนี้ -> define (['mage / url']
Nitesh

6

สิ่งที่สำคัญที่สุดที่เราต้องรู้: เราจำเป็นต้องตั้งค่า URL ฐานสำหรับurl.build('<Modulename>/<controllername>/<action>/') :

lib / เว็บ / ผู้วิเศษ / url.js

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

โดยทั่วไปมีอยู่สองที่ที่จะตั้ง url ฐาน:

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

ดังนั้นในผู้ดูแลระบบของคุณคุณต้องตั้งค่า URL ฐานผู้ดูแลระบบ


1
ตกลงฉันเข้าใจแล้ว แต่การพูดคุยเกี่ยวกับรูปแบบผู้ดูแลระบบที่ฉันต้องการให้ดำเนินการนี้ แบบฟอร์มของฉันสร้างขึ้นโดยใช้องค์ประกอบ UI ดังนั้นฉันจะตั้งค่า URL ตามที่กำหนดไว้ใน onepage หรือการจัดส่งได้อย่างไร
Priyank

สวัสดีคุณสามารถอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับปัญหาของคุณได้ เกี่ยวกับองค์ประกอบของ Ui: magento.stackexchange.com/questions/97291/…
Khoa TruongDinh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.