有没有一种方法可以在sql中进行字符串替换/替换?

时间:2018-09-12 15:59:28

标签: sql regex substitution

我在CMS中有一些记录,其中包括带有小部件工具自定义标签的HTML片段。 CMS的制造商显然已更新了CMS,但未提供适当的数据转换。他们的小部件使用按键根据屏幕宽度进行布局,例如block_lg,block_md,block_sm。问题开始于他们曾经拥有一个block_xs,现在已经将它们全部转移了-放下block_xs,而是将block_xl放在另一端。 我们实际上并没有使用这些东西,但是它们的窗口小部件配置却使用了。对我们来说,这意味着每个键的值都相同。当更新的CMS代码在任何小部件定义标签中查找“ block_xl”时,便会出现问题,找不到并出错。

然后我在想的是,由于其读取标签的方式,新代码似乎将“忽略” block_xs。 (同样,旧代码将忽略block_xl)。由于每个参数的值都相同,因此我基本上需要读取任何小部件定义,并向其添加一个block_xl值,使其与其他[width]参数中的任何一个匹配。 >

由于最好的顺序排列是在block_lg值之前,因此,按以下步骤操作可能最简单:

将与posix样式正则表达式匹配的任何东西替换为/ block_lg(=“ \ d +,\ d +”)/的代码:block_xl =“ $ 1” block_lg =“ $ 1”

或与之等效的任何东西。

具有多个窗口小部件定义的现有CMS块的示例:

<div>{{widget type="CleverSoft\CleverBlock\Block\Widget"
      widget_title="The Album" classes="highlight-bottom modish greenfont font52 fontlight"
      enable_fullwidth="0" block_ids="127" lazyload="0"
      block_lg="127,12," block_md="127,12," block_sm="127,12," block_xs="127,12,"
      template="widget/block.phtml" scroll="0" background_overlay_o="0"}}</div>
<!-- Image Block -->
<div>{{widget type="CleverSoft\CleverBlock\Block\Widget"
       widget_title="What’s Your Favorite Cover Style?"
       classes="zoo-widget-style2 modish grey font26 fontlight"
       enable_fullwidth="0" block_ids="126" lazyload="0"
       block_lg="126,12," block_md="126,12," block_sm="126,12," block_xs="126,12,"
       template="widget/block.phtml" scroll="0" background_overlay_o="0"}}</div>

我希望从上面得到的结果(添加block_xl):

<div>{{widget type="CleverSoft\CleverBlock\Block\Widget"
      widget_title="The Album" classes="highlight-bottom modish greenfont font52 fontlight"
      enable_fullwidth="0" block_ids="127" lazyload="0"
      block_xl="127,12," block_lg="127,12," block_md="127,12," block_sm="127,12," block_xs="127,12,"
      template="widget/block.phtml" scroll="0" background_overlay_o="0"}}</div>
<!-- Image Block -->
<div>{{widget type="CleverSoft\CleverBlock\Block\Widget"
       widget_title="What’s Your Favorite Cover Style?"
       classes="zoo-widget-style2 modish grey font26 fontlight"
       enable_fullwidth="0" block_ids="126" lazyload="0"
       block_xl="126,12," block_lg="126,12," block_md="126,12," block_sm="126,12," block_xs="126,12,"
       template="widget/block.phtml" scroll="0" background_overlay_o="0"}}</div>

我知道如何在php中执行此操作,如果需要,我将其替换为本地数据库,并编写一个sql脚本来更新修改后的记录,但是html块在某些情况下可能很大。如果可能的话,最好在SQL中进行正确的替换,但是我不确定该怎么做或者是否有可能做。 是的,在任何给定的cms页面或块中可以有一个以上的小部件实例。 (即可能需要将多个不同的本地“值”分配给block_lg进行这样的替换)

如果有人可以帮助我用SQL做到这一点,将不胜感激。

供参考,受影响的表分别称为cms_pagecms_block,在两种情况下行的名称均为content SW

0 个答案:

没有答案
相关问题