在使用ERP集成或其他需要Magento申博娱乐的系统中以非常特定的格式进行使用时,存在几个选项。您可以编写自定义模块以处理将Magento申博娱乐直接转换为最终产品所需的格式,或者您可以使用已构建的模块。
最近我发现自己在客户拥有需要重新格式化申博娱乐的自定义ERP集成的情况下。此外,格式在Magento申博娱乐的格式之外非常有点。对于这样的情况,我转向使用Xtento订单导出,因为它具有XSLT选项。
这只会覆盖其中的XSLT部分。 Xtento. 有关于如何利用其产品的优秀文档。
IT中最简单的XSLT是一种语言,可以将XML转换为其他格式,例如其他格式的格式不同。
如果您有一些如下结构的XML:
1 2 3 4 5 6 7 8 9 10 11 |
<?XML. 版本="1.0" 编码=“UTF-8”?> <巴斯特> <名>杰米</名> <姓 >hy</姓 > <PET_NAME.>零</PET_NAME.> </巴斯特> <巴斯特> <名>凯莉</名> <姓 >拜伦</姓 > <PET_NAME.>Gertie..</PET_NAME.> </巴斯特> |
也许你只想从本文件中获取宠物名称。以下XSLT代码将完成该目标。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?XML. 版本="1.0" 编码=“UTF-8”?> <XSL.:样式表 版本="1.0" XMLNS.:XSL.="http://www.w3.org/1999/XSL/Transform"> <XSL.:模板 比赛=“/”> <UL.> <XSL.:为了-每个 选择=“巴斯特”> <李> <XSL.:价值-的 选择="PET_NAME." /> </李> </XSL.:为了-每个> </UL.> </XSL.:模板> </XSL.:样式表> |
上面的XSLT的输出如下,考虑到我们可以手动完成的申博娱乐样本的大小,并且它不会是一种压倒性的工作。
1 2 |
零 Gertie.. |
现在我们有一个工作的知识,以及我们可以实现什么样的结果的想法,让我们移动有点有用。我们将从可爱的Cats Inc.将Magento订单XML转换为他们的ERP预期的XML格式。
这是企业至关重要,因为人们需要他们可爱的猫图片来出去,因此从客户的角度来看越快。
出于以下示例的目的,我们将使用以下产品的订单:
1 2 3 |
产品 姓名 产品 斯科 产品 QTY.. 产品 价格 猫, 惊人的 150-斯科-01 1 $699.00 猫, 凉爽的 150-斯科-02 1 $555.00 |
以下是我们将与之合作的XML结构的示例。 Magento通过XML将其订单以可预测的方式存储。此示例不是精确的,但它足以追随我们的示例的目的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<! - 简化 的 如何 玛托托 店 命令 信息 在 一个 XML. - > <! - 可爱的 猫 在corporated. - 我们 专业 在 可爱 - > <订单> <命令> <在crentment_id.>100000034</在crentment_id.> <命令_Item.> <姓名>猫, 惊人的</姓名> <斯科>150-斯科-01</斯科> <QTY..>1</QTY..> <价格>699.000</QTY..> </命令_Item.> <命令_Item.> <姓名>猫, 惊人的</姓名> <斯科>150-斯科-01</斯科> <QTY..>1</QTY..> <价格>699.000</QTY..> </命令_Item.> </命令> </订单> |
我们尝试达到的格式就是这样的例子:
1 2 3 4 5 6 |
<! - 例子 ERP. 格式 为了 订单 - > <! - 商业 作为 通常 LLC. - ERP. 分配 - > 100000034,1 <! - 命令 ID, 数字 的 命令 (如果 你 有 多 订单 这个 将 增量) - > 猫 惊人的,150-斯科-01,1.0000,699.0000, <! - 物品 姓名, 斯科, QTY., 价格 - > 猫 凉爽的,150-斯科-02,1.0000,555.0000, <! - <! - 物品 姓名, 斯科, QTY., 价格 - > |
要完成此操作,我们将创建一个XSL模板,该模板将用于Magento的所有订单。定义了XSLT模板,以便在文档中提供要输出的XML预定义位置。
XSL模板的基本结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?XML. 版本="1.0"?> <! - 这 文件 标签 是 到 抓住 每一个 文件 我们 工作 和, 它的 一 在 最多 案件 和 Xtento. - > <文件> <! - 这 文件 标签 是 为了 每个 个人 文件 - > <! - 你 能够 控制 这 姓名 的 这 文件 输出 这里 作为 看 在 这 文件名 属性 - > <文件 文件名=“%lastorderincrementid%.so”> <! - 这 XSL.:样式表 是 在哪里 这 实际的 XSL. 开始 它 是 重要的 到 包括 这 XMLNS. 到 PHP. 为了 Xtento. - > <XSL.:样式表 版本="1.0" XMLNS.:XSL.="http://www.w3.org/1999/XSL/Transform" XMLNS.:PHP.="http://php.net/xsl"> <! - 这 输出 方法 文本 讲 这 XSL. 什么 种类 的 输出 它 将要 是 - > <XSL.:输出 方法=“文本”/> <! - 常数 是 宣称 如果 你 计划 到 采用 他们 为了 更多的 比 一 事物 I 一般来说 创造 一 为了 分离器 - > <XSL.:多变的 姓名=“肌肉” 选择=“'“/> <XSL:变量名称=“sepend”选择=“','“/> <! - 如果我的CSV将有一个 - 我还为空值创建一个 - > <XSL:变量名称=“eftheval”选择=“'~'“/> <! - XSL模板匹配这告诉它匹配模板的字符 - > <xsl:template match="/"> <! - 模板 将要 走 这里 - > <! - 这个 是 在哪里 我们 将要 是 正在做 最多 的 这 工作 在 这个 博客 - > </XSL.:模板> </XSL.:样式表> </文件> </文件> |
我们可以定义常量变量,这些可以保存字段分隔符,因为我所做的工作或想要保持不变的任何值,然后可以在整个XSLT模板中引用这些值。
1 2 3 |
<XSL.:多变的 姓名=“肌肉” 选择=“'“/> <XSL:变量名称=“sepend”选择=“','“/> <XSL:变量名称=“eftheval”选择=“'~'“ /> |
我计划使用该系统检查三个案例,该系统很有用,一个简单的示例,一个使用PHP本机功能的示例,以及使用自定义构建静态方法的更复杂的解决方案来将申博娱乐与管理字段进行比较。这种多层复杂度允许您根据需要更改申博娱乐以实际上适应任何要求。
出于我们简单的例子的目的,我们将查看我们需要简单的CSV输出的情况:订购的每个项目的SKU,订购数量和价格。
使用Xtento我们将拥有一些基本结构,允许我们循环订单项,并获得访问内部的申博娱乐。
1 2 3 4 |
<! - 环形 例子 - > <XSL.:为了-每个 选择=“订单/订单”> <! - 环形 超过 订单 这里 - > </XSL.:为了-每个> |
首先让我们看看我们如何使用XML节点的基本字段申博娱乐。
1 |
<XSL.:价值-的 选择="斯科"/> |
这将返回以下内容:
1 |
150-斯科-01, |
这不是很多代码,并且在该形式也相当可读。您将获得所选的任何节点的值(在这种情况下,“SKU”).
因此,使用我们研究的循环组合一些申博娱乐,以及如何从节点中拉出申博娱乐看起来像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<XSL.:为了-每个 选择=“订单/订单”> <! - 命令 ID - > <XSL.:价值-的 选择="在crentment_id."/> <XSL.:价值-的 选择=“$ sepend” /> <XSL.:文本> </XSL.:文本> <! - 这个 插入 a 线 休息 - > <XSL.:为了-每个 选择=“物品/项目”> <! - 环形 超过 命令 项目 - > <! - 斯科 - > <XSL.:价值-的 选择="斯科"/> <XSL.:价值-的 选择=“$ sepend” /> <! - QTY.. 订购 - > <XSL.:价值-的 选择=“qty_ordered”/> <XSL.:价值-的 选择=“$ sepend” /> <! - 价格 - > <XSL.:价值-的 选择="价格"/> <XSL.:价值-的 选择=“$ sepend” /> <XSL.:文本> </XSL.:文本> </XSL.:为了-每个> </XSL.:为了-每个> |
它将输出以下内容:
1 2 3 |
100000034, <! - 命令 ID - > 150-斯科-01,1.0000,699.0000, <! - 斯科, QTY.. 订购, 价格 - > 150-斯科-02,1.0000,555.0000, <! - 斯科, QTY.. 订购, 价格 - > |
只有在XSLT中只有一个短模板,订单已经从长XML文档更改为一小块CSV申博娱乐,完全是所需的细节。
现在有一个更复杂的示例,我们可以在哪里调用一些PHP本机功能。可以直接从XSL模板使用任何PHP函数。在这种情况下,我想包括我的产品的标题或名称,但它们包括逗号,以便这是一个问题,因为它会破坏CSV结构。有几种方法可以解决这个问题,一个人将整个文件解决整体文档,然后是这种更集中的方法。
首先,让我们来看看自己召唤PHP功能:
1 |
<XSL.:价值-的 选择=“PHP:functionstring('preg_replace','/ [,] /','',name)”/> |
这允许我们调用PHP函数“PREG_REPLACE”,通过REGEX来删除逗号,然后替换那些。我们通过了我们想要传递作为参数的字段ID,就像我们在经常使用PHP中使用该功能时一样。
所以,如果我们要将其插入到XSL模板中,我们已经从上面已经看起来像:
1 2 3 4 5 6 7 8 9 10 |
... <XSL.:为了-每个 选择=“物品/项目”> <! - 环形 超过 命令 项目 - > <! - 姓名 - > <XSL.:价值-的 选择=“PHP:functionstring('preg_replace','/ [,] /','',name)”/> <XSL.:价值-的 选择=“$ sepend” /> <! - 斯科 - > ... |
这将输出以下内容:
1 2 3 |
100000034, 猫 惊人的,150-斯科-01,1.0000,699.0000, 猫 凉爽的,150-斯科-02,1.0000,555.0000, |
正如你所看到的那样,我们现在拥有这两个非常重要的产品的名字,“猫令人敬畏”和“猫酷”,这是可爱猫公司的骨干。
让我们为我们的例子说,我们的客户可爱Cats Inc.希望为拥有特定的批发客户提供免费送货,他们可以在管理员中设置(在另一个模块中建立)。这些人追究他们最重要的产品,所以让我们特别照顾他们。为了实现此目的,我们需要创建一个静态方法来执行任务。
要首先执行此操作,我们必须在Magento最佳实践之后的模块中创建一个XSL.php帮助器,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/ ** * * app / code / local / cls / errepexport / helper / xsl.php */ 班级 cls_orderexport_helper_xsl. 延伸 xtento_orderexport_helper_xsl. { const XML._free_shipping_wholesale_id. = 'path / to / admin / config / field'; / ** *如果根据管理员中的批发ID提供免费送货,则返回 * @param $orderId * * @return int */ 静态的 功能 getisfreeeshingavingavailable.($命令id.) { $FreeshippingWhonsaleIn = 法师::getstoreconfig(自己::XML._free_shipping_wholesale_id.); / ** @var. $命令mage_sales_model_order * / $命令 = 法师::GetModel.('销售订单')->加载($命令id.); $顾客 = 法师::GetModel.('客户/客户')->加载($命令->getCustomerid.()); 如果 ($顾客->getwhonsaleid() ==. $FreeshippingWhonsaleIn) { 返回 1; } 返回 0; } } |
然后我们需要调用该函数并从命令中传递到entity_id到方法,以便它可以完成逻辑工作。
1 2 3 4 5 6 7 8 9 10 |
... <! - 自由 运输 1 为了 是的, 0 为了 不 - > <XSL.:价值-的 选择=“PHP:functionstring('cls_orderexport_helper_xsl :: getisfreeeshippingavailable',entity_id)”/> <XSL.:价值-的 选择=“$ sepend” /> <XSL.:文本> </XSL.:文本> <XSL.:为了-每个 选择=“物品/项目”> ... |
使用此完成,我们现在能够使用自定义功能给我们一个输出:
1 2 3 |
100000034,1 猫 惊人的,150-斯科-01,1.0000,699.0000, 猫 凉爽的,150-斯科-02,1.0000,555.0000, |
这条排行完全适用于ERP集成从客户端的期望。我们不仅完成了任务,我们不必手动编辑任何XML,或在PHP中写出多个短方法。
正如您可以看到使用Xtento模块,为您提供了很多速度来击中地面运行,您可以用几行XSLT从框中使用它以以所需的任何格式格式化文本,并具有一点额外的工程您可以执行复杂的逻辑以使输出模拟您需要的内容。下面我们拥有整个XSLT模板,我们已将所有编译成一个条目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<?XML. 版本="1.0"?> <! - 这 文件 标签 是 到 抓住 每一个 文件 我们 工作 和, 它的 一 在 最多 案件 和 Xtento. - > <文件> <! - 这 文件 标签 是 为了 每个 个人 文件 - > <! - 你 能够 控制 这 姓名 的 这 文件 输出 这里 作为 看 在 这 文件名 属性 - > <文件 文件名=“%lastorderincrementid%.so”> <! - 这 XSL.:样式表 是 在哪里 这 实际的 XSL. 开始 它 是 重要的 到 包括 这 XMLNS. 到 PHP. 为了 Xtento. - > <XSL.:样式表 版本="1.0" XMLNS.:XSL.="http://www.w3.org/1999/XSL/Transform" XMLNS.:PHP.="http://php.net/xsl"> <! - 这 输出 方法 文本 讲 这 XSL. 什么 种类 的 输出 它 将要 是 I 有 绝不 用过的 任何事物 其他 比 文本 - > <XSL.:输出 方法=“文本”/> <! - 常数 是 宣称 如果 你 计划 到 采用 他们 为了 更多的 比 一 事物 I 一般来说 创造 一 为了 分离器 - > <XSL.:多变的 姓名=“肌肉” 选择=“'“/> <XSL:变量名称=“sepend”选择=“','“/> <! - 如果我的CSV将有一个 - 我还为空值创建一个 - > <XSL:变量名称=“eftheval”选择=“'~'“/> <! - XSL模板匹配这告诉它匹配模板的字符 - > <XSL:模板匹配=“/”> <! - 模板会去这里 - > <XSL:for-eply select =“订单/订单”> <!-- order id --> <XSL:值选择=“increntment_id."/> <XSL:Value-of Select =“$ Sepend”/> <! - 免费送货1为是,0表示 - > <xsl:值选择=“php:functionstring('cls_orderexport_helper_xsl.::getisfreeeshingavingavailable.',entity_id)“/> <XSL:Value-of Select =“$ Sepend”/> <xsl:text> </xsl:text> <! - 这插入了一条线条 - > <XSL:for-eply select =“项目/项目”> <! - 循环订单项目 - > <!-- name --> <xsl:值选择=“php:functionstring('PREG._代替','/[,]/','',姓名)"/> <XSL:值选择=“$证明“/> <!-- sku --> <XSL:值选择=“斯科"/> <XSL:值选择=“$证明“/> <!-- qty ordered --> <XSL:值选择=“QTY.._订购"/> <XSL:值选择=“$证明“/> <!-- price --> <XSL:值选择=“价格"/> <XSL:值选择=“$证明" /> <XSL.:文本> </XSL.:文本> </XSL.:为了-每个> </XSL.:为了-每个> </XSL.:模板> </XSL.:样式表> </文件> </文件> |
Xtento模块与Magento接口无缝链接,为您提供一个丢弃XSL模板的好地方。它还带来了一些其他功能,您可以利用使用Magento的申博娱乐。
在Xtento导出XSL中使用的一些其他功能是:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<! - 静态的 输出 - > <XSL.:文本>任何 你 想 到 输出 去 这里.</XSL.:文本> <! - 映射 如果/然后/别的 - > <XSL.:选择> <XSL.:什么时候 测试=“shipping_method ='abc'”><XSL.:文本>输出 这个 文本</XSL.:文本></XSL.:什么时候> <XSL.:什么时候 测试=“shipping_method ='xyz'”><XSL.:文本>输出 某物 别的</XSL.:文本></XSL.:什么时候> <XSL.:否则><XSL.:文本>没有什么 火柴, 输出 这个</XSL.:文本></XSL.:否则> </XSL.:选择> <! - 代替 全部 人物 在 领域 - > <文件 文件名=“file_name.csv” 搜索=“,;” 代替=“ - ”> <! - 这个 是 实际上 穿过 全部 领域 所以 很多 更宽的 比 这 PREG_REPLACE. 例子 以上 哪一个 是 只要 a 单身的 场地 - > |
您可以找到购买信息 Xtento订单导出模块 & their 文件 是 also available.