0

目前我正在为 TYPO3 编写我的第一个 extbase 扩展,其中包含嵌套模型。

存在以下模型:

作者- 属性:名称和描述

新闻- 属性:标题、日期、作者

作者是这样被包含在新闻模型中的

/**
 * @var Tx_Extbase_Persistence_ObjectStorage<Tx_Simplenews_Domain_Model_Author>
 * @lazy
 * @cascade remove
 **/
protected $author = 0;

在 Fluid 中调试也可以,但作者对象有一个键 uuid(例如“000000007d9412bd000000000217f7d0”),它会随每个请求而改变。

我只想在每条新闻上显示作者的名字。一个名字。

所以我必须遍历作者对象,找到键并显示如下名称:

<f:for each="{oneNews.author}" as="author">
    <td>{author.name}</td>`
</f:for>

有没有更好的解决方案?

<f:for each="{news}" as="oneNews">
    <td>{oneNews.author.name}</td>
</f:for>

不会工作。

提前致谢!

4

3 回答 3

1

得到了答案

我刚刚更新了 News.php(模型)中的以下代码:

/**
* @var Tx_Extbase_Persistence_ObjectStorage<Tx_Simplenews_Domain_Model_Author>
* @lazy
**/
protected $author;

构造函数:

public function __construct() {
    $this->author = new Tx_Extbase_Persistence_ObjectStorage();
}

吸气剂:

/**
 * @return Tx_Simplenews_Domain_Model_Author
 */
public function getAuthor() {
    $author = $this->author;
    $author->rewind(); // rewinds the iterator to the first storage element
    return $author->current(); // returns the current storage entry.
}

现在我可以访问作者的名字了{oneNews.author.name}

于 2012-07-03T12:49:52.377 回答
1

那么,为什么首先要为 Author 使用 objectStorage 呢?ObjectStorages 用于存储多个对象。因此,只要您的新闻不能同时有两个或多个作者,您就根本不需要 objectStorage 来存储该属性。getAuthor()然后你不需要通过你的方法返回 objectStorage 的第一个对象。顺便说一句,这使得洞对象存储使用过时。

我假设一条新闻只有一位作者。尝试这个:

新闻模型:

/**
 * @var Tx_Simplenews_Domain_Model_Author
 **/
protected $author;

/**
 * @param Tx_Simplenews_Domain_Model_Author $author
 * @return void
 */
public function setAuthor(Tx_Simplenews_Domain_Model_Author $author) {
  $this->author = $author;
}

/**
 * @return Tx_Simplenews_Domain_Model_Author
 */
public function getAuthor() {
  return $this->author;
}

在您的流体模板中,您仍然拥有:

{oneNews.author.name}

所以,如果你不需要它,就不要使用 objectStorage。

于 2013-11-01T13:53:04.747 回答
0

我创建了一个虚拟新闻扩展,它以您想要的方式列出新闻。请参阅此 git 存储库。我不知道你的情况出了什么问题。顺便说一句,我使用Extension Builder创建了扩展,只是更改List.htmlNews.

于 2012-07-02T14:43:08.187 回答