在一个cs-cart项目中,我正在寻找一种干净的方式,以全自动的方式自动迁移当前的主题。
迁移主题文件很容易,因为每个主题都位于一个专用的目录中。然而,一些页面是从后端使用布局WYSIWIG编辑器创建的。这个编辑器是一个很好的特性,它允许生成一个描述所有布局的XML文件,并且可以导入到另一个环境中。这需要手动操作(登录到后端,单击按钮...)我想要完全自动化这一点。
到目前为止,我能找到的唯一解决方案是直接从数据库迁移数据,方法是生成与布局相关的表的转储并将其导入目标环境。这个解决方案似乎有效,但在我看来有点冒险。
cs-cart是否提供命令行界面来导出和导入当前布局?
发布于 2015-07-06 19:11:10
我为这个任务写了一个小脚本:
<?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
发布于 2015-07-07 16:47:31
完整解决方案(带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;/app/addons/my_changes/controllers/backend/layout_exim.php
<?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
https://stackoverflow.com/questions/31043371
复制相似问题