我需要将使用osCommerce制作的整个电子商店导入OpenCart。到现在为止还挺好。我已经成功导入了几乎所有东西,除了SEO和一些稀疏数据位,但我的地址格式有问题。
osCommerce使用 $ firstname $ lastname $ cr $ streets $ cr $ city,$ postcode $ cr $ statecomma $ country ,而OpenCart使用 {company} {firstname} {lastname} {address_1 } {address_2} {postcode} {city} {country} 。
也许我错了,但看看这些字符串集之间的基本差异,我认为正则表达式是将osCommerce格式的地址格式字符串转换为OpenCart格式的地址格式字符串的合适工具。< / p> 但是,我在正则表达式中完全无效。有谁能告诉我哪种正则表达式最适合我的需要?或者,如果它没有正则表达式或者它们是一个坏主意,我应该尝试使用哪种方法?
答案 0 :(得分:2)
我假设cr
代表回车符或换行符,并且源字符串中有文字美元符号$
。
对于重新排序,您必须捕获地址的各个部分并在替换字符串中使用它们
^\$(.+?)\$(.+?)\$.\$(.+?)\$.\$(.+?)\$(.+?)\$.\$(.+?)\$(.+?)\$(.+)$
然后用
替换它{}{$1}{$2}{$3}{}{$5}{$4}{$7}
所以这会变成
$re = '/^\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$(.+)$/s';
$replacement = '{}{$1}{$2}{$3}{}{$5}{$4}{$7}';
$new_address = preg_replace($re, $replacement, $address);
但您也可以使用explode
进行拆分
$parts = explode('$', $address);
然后通过重新排序和插入大括号将部件再次放在一起。
答案 1 :(得分:1)
OpenCart地址存储为每个数据片段的单独字段。您提供的OC格式仅用于可视数据,如发票上的地址。但是,该地址的所有数据都有自己的字段,如果您查看address
或order
表,就可以看到该字段。值得注意的是,地址也附有ISO代码,因此在导入时需要考虑到这一点,以避免出现问题。假设osCommerce以类似的方式存储数据(我没有亲自使用过),那么您只需要将旧列映射到新列。但是,如果它们存储为单个文本而您需要将其解压缩,则可以使用此
%^(\w+) (\w+)\s+([\w ]+)\s+([\w ]+)\s+([\w ]+)\s+([\w]+),\s*(\w+)$%
使用此作为示例地址进行测试
My Name
Street name
City name
P05T C0D3
State, Country