Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Migration 如何以编程方式迁移cs购物车布局?_Migration_Cs Cart - Fatal编程技术网

Migration 如何以编程方式迁移cs购物车布局?

Migration 如何以编程方式迁移cs购物车布局?,migration,cs-cart,Migration,Cs Cart,在一个cs cart项目中,我正在寻找一种干净的方法,以全自动的方式自动迁移当前主题 迁移主题文件很容易,因为每个主题都位于一个专用目录中。 尽管如此,有些页面是从后端使用layouts WYSIWIG编辑器创建的。这个编辑器是一个很好的特性,它允许生成一个描述所有布局的XML文件,并且可以导入到另一个环境中。这需要手动操作(登录到后端,单击按钮…),我想完全自动化 到目前为止,我能找到的唯一解决方案是直接从数据库迁移数据,方法是生成布局相关表的转储并将其导入目标环境。这个解决方案似乎有效,但在

在一个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();
}