Migration 如何以编程方式迁移cs购物车布局?
在一个cs cart项目中,我正在寻找一种干净的方法,以全自动的方式自动迁移当前主题 迁移主题文件很容易,因为每个主题都位于一个专用目录中。 尽管如此,有些页面是从后端使用layouts WYSIWIG编辑器创建的。这个编辑器是一个很好的特性,它允许生成一个描述所有布局的XML文件,并且可以导入到另一个环境中。这需要手动操作(登录到后端,单击按钮…),我想完全自动化 到目前为止,我能找到的唯一解决方案是直接从数据库迁移数据,方法是生成布局相关表的转储并将其导入目标环境。这个解决方案似乎有效,但在我看来有点冒险Migration 如何以编程方式迁移cs购物车布局?,migration,cs-cart,Migration,Cs Cart,在一个cs cart项目中,我正在寻找一种干净的方法,以全自动的方式自动迁移当前主题 迁移主题文件很容易,因为每个主题都位于一个专用目录中。 尽管如此,有些页面是从后端使用layouts WYSIWIG编辑器创建的。这个编辑器是一个很好的特性,它允许生成一个描述所有布局的XML文件,并且可以导入到另一个环境中。这需要手动操作(登录到后端,单击按钮…),我想完全自动化 到目前为止,我能找到的唯一解决方案是直接从数据库迁移数据,方法是生成布局相关表的转储并将其导入目标环境。这个解决方案似乎有效,但在
cs cart是否提供用于导出和导入当前布局的命令行界面?我为此任务编写了一个小脚本:
<?php
use Tygh\BlockManager\Layout;
use Tygh\BlockManager\Exim;
if ($mode == "do") {
$location_ids = array();
$default_layout_data = Layout::instance()->getDefault();
$layout_id = $default_layout_data['layout_id'];
$content = Exim::instance()->export($layout_id, $location_ids);
header("Content-Type: text/xml");
header("Content-Length: " . strlen($content));
header('Content-Disposition: attachment; filename=layouts.xml');
header('Expires: 0');
print $content;
exit();
}
完整解决方案(带my_changes附加模块)
/app/addons/my_changes/schemas/permissions/trusted_controllers.post.php
<?php
$schema['layout_exim']['allow']['export'] = true;
$schema['layout_exim']['allow']['import'] = true;
return $schema;
importFromFile($\u请求['filepath']);
如果($结果){
打印“真”;
}否则{
打印“假”;
}
退出();
}
之后,请清除缓存。如果一切正常,您将能够在不进行身份验证的情况下调用这2个控制器(但是我建议您在get参数中设置密码,因为现在,这是非常不安全的!)
要通过URL调用控制器,请执行以下操作:
好主意!这是出口部分。事实上,我现在寻找的恰恰相反;最终,这就是将XML放在某个地方,并在部署时自动触发导入到目标环境中。当您点击PHP调用时,是否可以从PHPCLI脚本运行一些东西,而不需要在之前进行任何身份验证?
<?php
use Tygh\BlockManager\Layout;
use Tygh\BlockManager\Exim;
if ($mode == "export") {
$location_ids = array();
$default_layout_data = Layout::instance()->getDefault();
$layout_id = $default_layout_data['layout_id'];
$content = Exim::instance()->export($layout_id, $location_ids);
header("Content-Type: text/xml");
header("Content-Length: " . strlen($content));
header('Content-Disposition: attachment; filename=layouts.xml');
header('Expires: 0');
print $content;
exit();
} elseif ($mode == "import") {
$result = Exim::instance()->importFromFile($_REQUEST['filepath']);
if ($result) {
print "true";
} else {
print "false";
}
exit();
}