gpt4 book ai didi

php - Magento 2 : Add custom script just after head tag

转载 作者:可可西里 更新时间:2023-11-01 12:52:05 25 4
gpt4 key购买 nike

我想在 head 标签开始之后添加自定义脚本。

喜欢。

<head>
<script>console.log("I'm loaded!");</script>

我尝试在 default_head_blocks.xml 中添加代码

<referenceContainer name="head.additional">
<block class="Custom\Module\Block\Success" template="Custom_Module::success/head.phtml"/>
</referenceContainer>

=> 输出:

<script>console.log("I'm loaded!");</script>
</head>

此代码在 head 标记结束前使用添加脚本。

请检查下面的代码

Block => Custom/Module/Block/Onepage/Success.php

namespace Custom\Module\Block\Onepage;
use Magento\Framework\View\Element\Template;

class Success extends \Magento\Checkout\Block\Onepage\Success {

public function getOrder()
{
$objectManager =\Magento\Framework\App\ObjectManager::getInstance();
$helper = $objectManager->get('Custom\Module\Helper\Data');

$lastOrderId = $this->getOrderId();

if (empty($lastOrderId))
{
return null;
}
$orderData = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($this->getOrderId());

return $orderData;
}

}

Helper => Custom\Module\Helper\Data.php

namespace Custom\Module\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{

/**
* @param \Magento\Framework\App\Helper\Context $context
*/
protected $_request;

public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\App\Request\Http $request
) {
$this->_request = $request;
parent::__construct($context);

}
public function getConfigValue($value = '') {
return $this->scopeConfig
->getValue($value,\Magento\Store\Model\ScopeInterface::SCOPE_STORE);
}
public function getTemplate()
{
if ($this->getConfigValue('custom_general/general/active') == 1) {
$template = 'Custom_Module::checkout/success.phtml';
} else {
$template = 'Magento_Checkout::success.phtml';
}

return $template;
}
}

di.xml => etc\di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../vendor/magento/framework/ObjectManager/etc/config.xsd">
<preference for="Magento\Checkout\Block\Onepage\Success" type="Custom\Module\Block\Onepage\Success"/>
</config>

Layout Xml => Custom/Module/view/frontend/layout/default.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="require.js">
<action method="setTemplate">
<argument name="template" xsi:type="string">Custom_Module::success/head.phtml</argument>
</action>
</referenceBlock>
</body>
</page>

Template => Custom/Module/view/frontend/templates/success/head.phtml

<script>
console.log("I'm loaded!");

</script>

请帮我解决这个问题

提前致谢。

最佳答案

我不确定这是否正确,但我有线索。

默认情况下,magento 2 使用 root.phtml 文件相应地设置 head 内容,该文件位于 vendor/magento/module-theme/view/base/templates/root.phtml(如果它没有被覆盖)。

在这里,$requireJs 变量首先加载到 head block 中。 $requireJs 变量在 Page 类的 render 方法中定义 - 它位于 vendor/magento/framework/view/结果/Page.php

在此文件中,$requireJs 包含 require.js block 。 require.js block 在 vendor/Magento/module-theme/view/frontend/layout/default.xml 中定义:

<block name="require.js" class="Magento\Framework\View\Element\Template" template="Magento_Theme::page/js/require_js.phtml" />

解决方案

1) 从 vendor/magento/module-theme/view/frontend/templates/page/js 复制 require_js.phtml 到你的主题 app/design/frontend/{VENDOR}/{THEME_NAME}/Magento_Theme/templates/page/js/

2) 现在您可以像这样添加您的脚本:

<script>
console.log("I'm loaded!");

var require = {
"baseUrl": "<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('/') ?>"
};
</script>

更新(使用模块)

覆盖 require.js block 不是一个优雅的解决方案。如果有人有好的解决方案请回答。现在编辑您的布局 xml:

<referenceBlock name="require.js">
<action method="setTemplate">
<argument name="template" xsi:type="string">Custom_Module::success/head.phtml</argument>
</action>
</referenceBlock>

success/head.phtml 里面添加你的代码:

<script>
console.log("I'm loaded!");
var require = {
"baseUrl": "<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('/') ?>"
};
</script>

关于php - Magento 2 : Add custom script just after head tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com