Arhn - архитектура программирования

TYPO3 Extbase: вложенные модели в жидкости

На данный момент я пишу свое первое расширение extbase для TYPO3 с вложенными моделями.

Существуют следующие модели:

Автор - атрибуты: имя и описание.

Новости - атрибуты: заголовок, дата, автор.

Автор входит в модель новостей вот так

/**
 * @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>

не сработает.

Заранее спасибо!


  • У вас есть подходящие геттеры для $authors? Разместите весь класс модели News. 02.07.2012
  • полная модель News.php: gist.github.com/f4b8efaac83200454cb6 02.07.2012
  • Вы можете сравнить свой код с расширением новостей: git.typo3.org/TYPO3v4/ Расширения / news.git 03.07.2012
  • Этот плагин полезен. Я попробую. Спасибо! 03.07.2012

Ответы:


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}

03.07.2012

2

Итак, почему вы вообще используете objectStorage для Author? ObjectStorages предназначены для хранения нескольких объектов. Итак, пока у ваших новостей не может быть двух или более авторов одновременно, вам вообще не нужен objectStorage для этого свойства. Тогда вам не нужно просто возвращать первый объект objectStorage через ваш getAuthor() метод. Это, кстати, делает устаревшим использование хранилища дырочных объектов.

Я предполагаю, что у новости только один автор. Попробуй это:

Новостная модель:

/**
 * @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;
}

В вашем Fluid-Template все еще есть:

{oneNews.author.name}

Итак, просто не используйте objectStorage, если он вам не нужен.

01.11.2013
  • У меня есть связанная проблема: в Fluid я не могу получить доступ к некоторым родителям (n: 1) с помощью {news.author.name}. Различные объекты имеют несколько отношений n: 1 (все они определены одинаково в ext_tables.sql, TCA и модели). Это происходит только в некоторых случаях. 02.02.2019

  • 3

    Я создал фиктивное расширение новостей, которое перечисляет новости так, как вы этого хотите. См. этот репозиторий git. Я не знаю, что пошло не так в вашем случае. Кстати, я использовал Extension Builder для создания расширения и просто изменил шаблон List.html для News.

    02.07.2012
  • Я попытался удалить аннотацию @lazy и $ author без инициализации. Но по-прежнему не может напрямую получить доступ к объекту автора 02.07.2012
  • Я просто хотел создать расширение без построителя расширений, чтобы понять extbase. Спасибо за фиктивное расширение, теперь у меня есть ответ. Подождите несколько минут 03.07.2012
  • ИМХО подход, основанный на соглашении по сравнению с конфигурацией, имеет много преимуществ. Однако ошибки по неосторожности могут случиться так легко. Вот почему я считаю, что построитель расширений - это очень хороший способ начать работу. У вас есть основа работающего кода, где вы можете применять свои изменения и получать больше информации о Extbase / Fluid с каждой настройкой. 04.07.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..