首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式迁移cs-cart布局?

如何以编程方式迁移cs-cart布局?
EN

Stack Overflow用户
提问于 2015-06-25 15:01:15
回答 2查看 291关注 0票数 0

在一个cs-cart项目中,我正在寻找一种干净的方式,以全自动的方式自动迁移当前的主题。

迁移主题文件很容易,因为每个主题都位于一个专用的目录中。然而,一些页面是从后端使用布局WYSIWIG编辑器创建的。这个编辑器是一个很好的特性,它允许生成一个描述所有布局的XML文件,并且可以导入到另一个环境中。这需要手动操作(登录到后端,单击按钮...)我想要完全自动化这一点。

到目前为止,我能找到的唯一解决方案是直接从数据库迁移数据,方法是生成与布局相关的表的转储并将其导入目标环境。这个解决方案似乎有效,但在我看来有点冒险。

cs-cart是否提供命令行界面来导出和导入当前布局?

EN

回答 2

Stack Overflow用户

发布于 2015-07-06 19:11:10

我为这个任务写了一个小脚本:

代码语言:javascript
复制
<?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();
}

如果您将此代码放入控制器文件(例如,放入您的/app/addons/my_changes/controllers/backend/layout_export.php中)并通过url (在我的示例中为:/youradmin.php?dispatch=layout_export.do)调用此代码,它将下载默认主题的主布局结构。

请注意,我使用的是版本4.3.3。然而,我认为这段代码适用于4.x版本的任何类型的CS-Cart

票数 1
EN

Stack Overflow用户

发布于 2015-07-07 16:47:31

完整解决方案(带my_changes附加组件)

/app/addons/my_changes/schemas/permissions/trusted_controllers.post.php

代码语言:javascript
复制
<?php

$schema['layout_exim']['allow']['export'] = true;
$schema['layout_exim']['allow']['import'] = true;

return $schema;

/app/addons/my_changes/controllers/backend/layout_exim.php

代码语言:javascript
复制
<?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();
}

在此之后,请清除您的缓存。如果你做的一切都是正确的,你将能够在没有认证的情况下调用这两个控制器(但是我建议你在get参数中设置密码,因为现在,这是非常不安全的!)

要通过URL调用控制器:

http://path-to-your-admin.com/admin.php?dispatch=layout_exim.import&filepath=path/to/file

http://path-to-your-admin.com/admin.php?dispatch=layout_exim.export

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31043371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档