如何解决当在magento 2中更改产品的Url键时,如何不替换?
当我尝试重写产品的URL密钥时,是否有一种方法可以防止magento 2用select *,right(remind,charindex (',',reverse(remind))-1)
from t t1
cross apply (select stuff(col,charindex(',857',col),len(col),'') as remind) t2
替换/
?
解决方法
我需要完全一样。我通过为 \Magento\Catalog\Model\Product\Url
中的 formatUrlKey() 方法创建一个环绕插件来完成它[编辑] 最好的方法是只启用您想要的字符,因此我们仍然删除特殊字符和空格。我添加的代码只允许 / 和 _
只需创建一个文件: app/code/YourVendorName/YourModule/Plugin/FormatUrlKeyPlugin.php
<?php
declare(strict_types=1);
namespace YourVendorName\YourModule\Plugin;
/**
* Class FormatUrlKeyPlugin
* @package YourVendorName\YourModule\Plugin
*/
class FormatUrlKeyPlugin
{
/**
* FormatUrlKeyPlugin constructor.
* @param Translit $translit
*/
public function __construct(\Magento\Framework\Filter\Translit $translit)
{
$this->translit = $translit;
}
/**
* Prevent Magento from replacing slashes in url_key
*
* @param \Magento\Catalog\Model\Product\Url $subject
* @param callable $proceed
* @param $str
* @return mixed
*/
public function aroundFormatUrlKey(\Magento\Catalog\Model\Product\Url $subject,callable $proceed,$str)
{
$str = preg_replace('#[^0-9a-z_/]+#i','-',$this->translit->filter($str));
$str = strtolower($str);
$str = trim($str,'-');
return $str;
}
}
并将插件添加到 di.xml(如果您的模块中没有它,请创建一个新插件) app/code/YourVendorName/YourModule/etc/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Model\Product\Url">
<plugin name="FormatUrlKeyPlugin" type="YourVendorName\YourModule\Plugin\FormatUrlKeyPlugin" sortOrder="1" disabled="false"/>
</type>
</config>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。