如何从Magento小部件短代码中提取参数并转换为数组?
提取Block短代码参数为数组的解决方案
嘿,我来帮你搞定这个问题!针对你给出的Magento风格block短代码,咱们可以用PHP结合正则表达式来高效提取参数,转换成你需要的关联数组。下面是具体的实现步骤和代码:
1. 目标短代码示例
首先先明确要处理的短代码字符串:
$shortcode = '{{block type="cms/block" block_id="footer_links" template="ABC/roam/dp.phtml"}}';
2. 正则匹配提取参数
我们可以用正则表达式匹配key="value"的结构,然后把匹配结果转换成关联数组:
// 定义正则规则,匹配参数名和对应的双引号包裹值 $pattern = '/(\w+)\s*=\s*"([^"]+)"/'; // 执行全局匹配 preg_match_all($pattern, $shortcode, $matches); // 初始化参数数组 $params = []; // 遍历匹配结果,组装成关联数组 if (!empty($matches[1]) && !empty($matches[2])) { foreach ($matches[1] as $index => $key) { $params[$key] = $matches[2][$index]; } } // 输出结果,你可以直接在自有模块里使用这个数组 print_r($params);
3. 执行结果
运行上面的代码后,你会得到这样的数组:
Array ( [type] => cms/block [block_id] => footer_links [template] => ABC/roam/dp.phtml )
4. 进阶:处理带转义双引号的参数
如果你的短代码参数值里可能包含转义的双引号(比如description="This is a \"test\" value"),可以把正则规则调整为下面的版本,来兼容这种场景:
$pattern = '/(\w+)\s*=\s*"((?:\\\\.|[^"])*)"/';
这个调整后的正则会正确识别转义的双引号,不会提前终止匹配。
内容的提问来源于stack exchange,提问作者MSQ
相关产品推荐
相关产品推荐

