2

我有一个在 pimcore 3 上开发的现有项目。我在本地化类的现有字段时面临挑战,因为将字段移动到本地化字段容器中意味着使用此类的所有对象中的字段数据丢失。我不想丢失该数据,而是希望将该数据移动到该本地化字段容器的英语中。

假设我有一个包含以下字段的类“测试”:

  • 姓名(文字)
  • 描述(文本区域)
  • 类型(文本)
  • 类别(对象)

假设现在我想将以下 3 个字段本地化为 English 、 French 和 German 。

  • 姓名(文字)
  • 描述(文本区域)
  • 类别(对象)

但我不希望我现有的数据丢失,而是我希望该本地化领域的英语被现有数据填充。

提前致谢。

4

1 回答 1

2

不幸的是,这并不完全简单。在最简单的情况下,您应该编写两个简单的脚本。

遵循以下工作流程:

  • 复制三个字段,例如。NameTemp、DescTemp 和 CategoryTemp
  • 创建一个脚本,将数据从 Name 复制到 NameTemp,从 Desc 复制到 DescTemp,将 Category 复制到 CategoryTemp

复制后执行以下操作:

  • 将字段 Name、Desc、Category 移动到本地化字段 -(您的数据仍留在 NameTemp、DescTemp 和 CategoryTemp 中)
  • 现在创建一个新脚本,将数据从 NameTemp 复制到 Name,DescTemp 复制到 Desc,CategoryTemp 复制到 Category

示例脚本(未测试):

// First run copyValueFromFieldsToTempFieldsAction(), 
// then move the fields into localized field,
// afterwards run copyValueFromTempFieldsToFieldsAction()
// in the end remove temp fields
public function copyValueFromFieldsToTempFieldsAction(){
  $this->disableViewAutoRender();

  $objectList = new \Pimcore\Model\YourObject\Listing();
  //$object_list->setObjectTypes(array(Object_Abstract::OBJECT_TYPE_VARIANT));

  /* @var $object Object_PrdktResetkeNaZalogi */
  foreach($objectList as $object){
      $object->setNameTemp($object->getName());
      $object->setDescTemp($object->getTemp());
      $object->setCategoryTemp($object->getCategory());

      $object->save();
  }
}

public function copyValueFromTempFieldsToFieldsAction(){
  $this->disableViewAutoRender();

  $objectList = new \Pimcore\Model\YourObject\Listing();
  //$object_list->setObjectTypes(array(Object_Abstract::OBJECT_TYPE_VARIANT));

  /* @var $object Object_PrdktResetkeNaZalogi */
  foreach($objectList as $object){
      $object->setTemp($object->getNameTemp());
      $object->setDesc($object->getTemp());
      $object->setCategory($object->getCategorTemp());

      $object->save();
  }
}
于 2016-03-22T14:26:24.937 回答