使用 php 脚本将 pimcore 中的现有数据对象导出到 XML 文件
Posted
技术标签:
【中文标题】使用 php 脚本将 pimcore 中的现有数据对象导出到 XML 文件【英文标题】:Exporting existing data objects in pimcore to an XML file using php scripting 【发布时间】:2016-02-09 13:21:27 【问题描述】:我正在尝试使用 php 脚本从 CVS 文件导入数据对象并从 Pimcore 将数据导出到 XML 文件。我已经设法从 CVS 文件导入数据,但是我不知道如何导出到 XML 文件。
我试过在网上四处寻找,官方文档并没有说太多(www.pimcore.org/wiki/display/PIMCORE/External+System+Interaction):
数据对象的导出可以通过编程或通过 pimcore CSV 导出。单击某个按钮时可以找到 UI 导出 对象文件夹并选择“搜索、编辑和导出”选项卡。
我找到了各种“loose code”,例如:
include("pimcore/cli/startup.php"); $class= Object_Class::getById(1); echo Object_Class_Service::generateClassDefinitionXml($class);
我什至设法找到了上面示例中提到的“Object_Class_Service”,但无济于事,每当我尝试使用它时,它都会出错,据我所知,它甚至无法正常工作这应该。
我已经寻找了各种帮助程序和其他方法来找到将 pimcore 数据对象导出到 XML 的正确方法,但实际上似乎什么都没有。
导出非常简单,一个数据对象,我们将其命名为 User,输入字段带有 getter/setter“名称”。
我需要创建 PHP 脚本来导出数据对象“用户”以及数据。您究竟是如何通过脚本实现这一目标的?
【问题讨论】:
你只是想将 csv 转换为 xml 吗? 不,不是 CSV,我以类的形式存储在 php 文件和数据库(如 mysql)中的原始格式。 不,不知道你刚才说了什么 它是将数据库导出为 XML 格式,IE 获取 SQL 数据并将其放入 XML 文件中,为了实现这一点,我需要数据库结构以及与之相关的数据。然后需要将这两件事写入 XML 文档。为了知道要获取什么,我需要 ZendFramework 和/或 Pimcore 中的某种帮助程序。 【参考方案1】:保存类定义的最佳方式是使用 JSON,因为这是 Pimcore 用于类定义导出和导入的方法。
/*
* Export class definition
*/
// !!! This is the id of the object class, not the id of object instance.
// Go to Settings > Object > Classes and find the object class ID there
$classId = 5;
$class = Pimcore\Model\Object\ClassDefinition::getById($classId);
$classDefinitionJson = Pimcore\Model\Object\ClassDefinition\Service::generateClassDefinitionJson($class);
header("Content-type: application/json");
header("Content-Disposition: attachment; filename=\"class_" . $class->getName() . "_export.json\"");
echo $classDefinitionJson;
/*
* Import class definition
*/
$nameOfTheClass = "someClass";
$class = Pimcore\Model\Object\ClassDefinition::getByName($name);
if (!$class)
$class = new Pimcore\Model\Object\ClassDefinition();
$class->setName($name);
$classDefinitionJson = @file_get_contents($classDefinitionJson);
$classDefinitionJson = json_decode($classDefinitionJson, true);
Pimcore\Model\Object\ClassDefinition\Service::importClassDefinitionFromJson($class, $classDefinitionJson);
请注意,对象类 ID 和对象类的名称不保存在对象定义文件中。这就是为什么需要这样做:
$nameOfTheClass = "someClass";
$class = Pimcore\Model\Object\ClassDefinition::getByName($name);
【讨论】:
首先感谢您的回答!是的,我同意 JSON 是首选。如果我要改用 XML 导出,我需要更改以下行: Pimcore\Model\Object\ClassDefinition\Service::generateClassDefinitionJson($class);到:Pimcore\Model\Object\ClassDefinition\Service::generateClassDefinitionXml($class);对吗? 没有方法 generateClassDefinitionXml。它可能存在于旧版本的 Pimcore 中,但从来没有版本只有 json 方法。我的意思是,您可能只是以某种方式将 json 转换为 XML,但我不明白这一点。以上是关于使用 php 脚本将 pimcore 中的现有数据对象导出到 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章
Pimcore 5:以编程方式将块添加到Areablock(文档自动化)