TYPO3:为一个分机设置多个存储pid

时间:2016-12-21 15:28:10

标签: typo3 extbase typo3-7.6.x

我构建了一个扩展,其中包含一个'详细信息'表,其中包含标题和描述的详细信息,这些内容包含在另一个对象的内联中。现在新的细节存储在与对象相同的pid中,但我想改变它。

this question回答了{p> Merec,并在评论中指出了一个解决方案(将“pid”列添加到您的模型中,这是该模型首先看到的)但要求制定一个另外一个问题......

我接受了他的建议,但无法让它工作,所以这是单独的问题,此外我想知道如何从配置中获取一个值作为pid使用此

更新:RenéPflamm指出我应该强调我正在尝试将此Pid设置为在后端保存,而不是在前端......我后来基本上认识到了这个命运

my constants.ts:

plugin.tx_myext {
  persistence {
    # cat=plugin.tx_myext/storage/a; type=string; label=Default storage PID
    defaultStoragePid =
    # cat=plugin.tx_myext/storage/a; type=string; label=Details storage PID
    detailsStoragePid =
  }
}

我的setup.ts

plugin.tx_myext {
  persistence {
    storagePid = {$plugin.tx_myext.persistence.defaultStoragePid}
    detailPid = {$plugin.tx_myext.persistence.detailsStoragePid}
  }
}

3 个答案:

答案 0 :(得分:3)

我不确定我是否理解正确但您可以告诉extbase查看多个pid以查找您的记录并说明应该存储的每个记录:

plugin.tx_myext {
  persistence {
    storagePid = {$plugin.tx_myext.persistence.defaultStoragePid},{$plugin.tx_myext.persistence.detailStoragePid}
    classes {
      Vendor\MyExt\Domain\Model\Detail {
        newRecordStoragePid = {$plugin.tx_myext.persistence.detailStoragePid}
      }
    }
  }
}

答案 1 :(得分:2)

模型继承自TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject,其中包含$pid的getter和setter。如果设置该字段,则不使用所有自动设置字段(即typoscript中的newRecordStoragePid)。

有了这个,您可以设置所需的所有存储位置。

$myModel = $this->objectManager->create('Vendor\\Namespace\\Domain\\Model\\MyModel');
$myModel->setPid(4321);

部分来自TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject

/**
 * @var int The id of the page the record is "stored".
 */
protected $pid;

/**
 * Setter for the pid.
 *
 * @param int|NULL $pid
 * @return void
 */
public function setPid($pid)
{
    if ($pid === null) {
        $this->pid = null;
    } else {
        $this->pid = (int)$pid;
    }
}

/**
 * Getter for the pid.
 *
 * @return int The pid or NULL if none set yet.
 */
public function getPid()
{
    if ($this->pid === null) {
        return null;
    } else {
        return (int)$this->pid;
    }
}

答案 2 :(得分:0)

您可以在扩展程序中创建元素时说出应该使用pid的模型。

在你的TS中:

plugin.tx_myext.settings {
  detailPid = {$plugin.tx_myext.persistence.detailsStoragePid}
}

在上面的代码中,它看起来像:

public function createDetailsAction(Detail $detail) {
  $detail->setPid($this->settings['detailPid']);
  $this->detailRepository->add($detail);
}