Demands

A demand is a configuration object used by the repository to decide which news records should be fetched.

The default demand class implementation for the frontend output of news is \GeorgRinger\News\Domain\Model\Dto\NewsDemand. It has a couple of useful properties that can be used to filter news records, for example $categories, $searchFields, $author and many more.

There is also the property $customSettings an array of custom settings by extensions. You should use your extension name as key in this array.

Demand objects can be changed in a couple of ways, see below:

URL Parameter

The URL parameter overwriteDemand can be used to override properties of the demand.

You can set this parameter in a Fluid link (see Set overwriteDemand in Frontend) or via TypoScript in a typolink (See TypoScript reference: typolink).

It would even be possible to configure a LinkHandler for this parameter.

Via TypoScript

TypoScript can be used to define a class containing a custom implementation of the demand object. This can be achieved by the TypoScript setting settings.demandClass.

Custom controllers

The demand object can be used in a custom controller used in an extension extending EXT:news. Read more about using a demand object in a custom controller: Extension based on EXT:news: FilterController.php.

Events

Multiple events can change or use demand objects. For example the events of the main actions in the NewsController, for example NewsListActionEvent and NewsDetailActionEvent. For more information refer to the chapter Events.

Custom demand class

All custom frontend news demand classes must extend \GeorgRinger\News\Domain\Model\Dto\NewsDemand. The demand object is a simple configuration object. It should contain no business logic. For each property there must be a setter and a getter.

Example:

<?php

namespace Vendor\MyNews\Domain\Model\Dto;

use \GeorgRinger\News\Domain\Model\Dto\NewsDemand;

class MyNewsDemand extends NewsDemand {

   /**
   * @var string
   */
   protected $myCustomField = '';

   /**
   * Set myCustomField
   *
   * @param string $myCustomField
   * @return NewsDemand
   */
   public function setMyCustomField(string $myCustomField): NewsDemand
   {
      $this->myCustomField = $myCustomField;
      return $this;
   }

   /**
   * Get myCustomField
   *
   * @return string
   */
   public function getMyCustomField(): string
   {
      return $this->myCustomField;
   }
}
Copied!