使用 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(文档自动化)

pimcore 调试

Pimcore 5:从 4.6.2 升级到 5.0 后卡在维护模式

php Pimcore Navigaton面包屑

Pimcore 内存限制错误

将 PHP 错误日志文件存储在脚本目录中,而不向现有脚本添加 PHP 代码