2016-07-15 12 views
2

Pimcoreのバルクオブジェクトインポート機能を拡張して、カスタムレイアウトで使用できるフィールドにユーザーを制限しようとしています。Pimcore:組み込みコントローラをオーバーライドする方法

私はオーバーライドする必要があるファイル

pimcore /モジュール/管理/コントローラ/ ObjectController.php

だと私は私が拡張する必要がある方法があると考えている。具体的にこれらの

public function importGetFileInfoAction() 
{ 
    $success = true; 
    $supportedFieldTypes = ["checkbox", "country", "date", "datetime", "href", "image", "input", "language", "table", "multiselect", "numeric", "password", "select", "slider", "textarea", "wysiwyg", "objects", "multihref", "geopoint", "geopolygon", "geobounds", "link", "user", "email", "gender", "firstname", "lastname", "newsletterActive", "newsletterConfirmed", "countrymultiselect", "objectsMetadata"]; 
    $file = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_" . $this->getParam("id"); 
    // determine type 
    $dialect = Tool\Admin::determineCsvDialect(PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_" . $this->getParam("id") . "_original"); 
    $count = 0; 
    if (($handle = fopen($file, "r")) !== false) { 
     while (($rowData = fgetcsv($handle, 0, $dialect->delimiter, $dialect->quotechar, $dialect->escapechar)) !== false) { 
      if ($count == 0) { 
       $firstRowData = $rowData; 
      } 
      $tmpData = []; 
      foreach ($rowData as $key => $value) { 
       $tmpData["field_" . $key] = $value; 
      } 
      $data[] = $tmpData; 
      $cols = count($rowData); 
      $count++; 
      if ($count > 18) { 
       break; 
      } 
     } 
     fclose($handle); 
    } 
    // get class data 
    $class = Object\ClassDefinition::getById($this->getParam("classId")); 
    $fields = $class->getFieldDefinitions(); 
    $availableFields = []; 
    foreach ($fields as $key => $field) { 
     $config = null; 
     $title = $field->getName(); 
     if (method_exists($field, "getTitle")) { 
      if ($field->getTitle()) { 
       $title = $field->getTitle(); 
      } 
     } 
     if (in_array($field->getFieldType(), $supportedFieldTypes)) { 
      $availableFields[] = [$field->getName(), $title . "(" . $field->getFieldType() . ")"]; 
     } 
    } 
    $mappingStore = []; 
    for ($i = 0; $i < $cols; $i++) { 
     $mappedField = null; 
     if ($availableFields[$i]) { 
      $mappedField = $availableFields[$i][0]; 
     } 
     $firstRow = $i; 
     if (is_array($firstRowData)) { 
      $firstRow = $firstRowData[$i]; 
      if (strlen($firstRow) > 40) { 
       $firstRow = substr($firstRow, 0, 40) . "..."; 
      } 
     } 
     $mappingStore[] = [ 
      "source" => $i, 
      "firstRow" => $firstRow, 
      "target" => $mappedField 
     ]; 
    } 
    //How many rows 
    $csv = new SplFileObject($file); 
    $csv->setFlags(SplFileObject::READ_CSV); 
    $csv->setCsvControl($dialect->delimiter, $dialect->quotechar, $dialect->escapechar); 
    $rows = 0; 
    $nbFields = 0; 
    foreach ($csv as $fields) { 
     if (0 === $rows) { 
      $nbFields = count($fields); 
      $rows++; 
     } elseif ($nbFields == count($fields)) { 
      $rows++; 
     } 
    } 
    $this->_helper->json([ 
     "success" => $success, 
     "dataPreview" => $data, 
     "dataFields" => array_keys($data[0]), 
     "targetFields" => $availableFields, 
     "mappingStore" => $mappingStore, 
     "rows" => $rows, 
     "cols" => $cols 
    ]); 
} 

二行:

$class = Object\ClassDefinition::getById($this->getParam("classId"));

$fields = $class->getFieldDefinitions();

私がしたいのは、ユーザーがカスタムレイアウトで見ることができるフィールドを取得し、それに応じて$fieldsをフィルタリングする方法です。私は、コアファイルを上書きすることを避けたいと思うし、代わりにプラグインでそれを拡張するのが大好きです。

+0

上記のファイルを上書きしましたか?答えがある場合は、回答として投稿してください。 –

+0

残念ながら、私は答えを見つけることができませんでした。私はコアファイルを上書きしてしまいました。 –

答えて

2

標準オブジェクトインポートをカスタムオブジェクトに置き換えるには、おそらくUIのメニュー項目をオーバーライドするプラグインを作成する必要があります。

標準のObjectControllerを拡張できるCustomObjectControllerを作成する必要があります。

+0

オーバライダーファイルにプログラム的に教えてください –

関連する問題