.. highlight:: typoscript
.. _typoscriptGeneral:

================
General settings
================

Any setting needs to be prefixed with  :typoscript:`plugin.tx_news.settings.`.


.. contents:: Properties
      :depth: 1
      :local:

.. _tsCssFile:

cssFile
=======

.. confval:: cssFile

   :type: string
   :Default: Depends on the chosen layout
   :Path: plugin.tx_news.settings

   Path to the css file. This is included with the Layouts.

.. _tsFormat:

format
======

.. confval:: format

   :type: string
   :Default: html
   :Path: plugin.tx_news.settings

   Set a different format for the output. Use e.g. :code:`xml` for RSS feeds.

useStdWrap
==========

.. confval:: useStdWrap

   :type: string
   :Default: singleNews
   :Path: plugin.tx_news.settings

   Add all TypoScript properties as a comma separated list which need
   support for stdWrap.

   As an example: ::

      settings {
         useStdWrap = singleNews

         singleNews.stdWrap.cObject = CONTENT
         singleNews.stdWrap.cObject {
            # ...
         }
      }


.. _tsOverrideFlexformSettingsIfEmpty:

overrideFlexformSettingsIfEmpty
===============================


.. confval:: overrideFlexformSettingsIfEmpty

   :type: string
   :Path: plugin.tx_news.settings
   :Default: cropMaxCharacters,dateField,timeRestriction,orderBy,orderDirection,
      backPid,listPid,startingpoint,
      recursive,list.paginate.itemsPerPage,list.paginate.templatePath


   The default behaviour of Extbase is to override settings from
   TypoScript by the one of the FlexForms. This is even valid if the setting is
   left empty in the FlexForms.

   Therefore you can define those settings which value should be taken from
   TypoScript if nothing is set in the plugin.

.. _tsDisplayDummyIfNoMedia:

displayDummyIfNoMedia
=====================


.. confval:: displayDummyIfNoMedia

   :type: boolean
   :Path: plugin.tx_news.settings
   :Default: 1

   If set and no preview image is defined in the record, a placeholder
   image defined via :confval:`list.media.dummyImage` is shown.

.. confval:: list.media.dummyImage

   :type: string
   :Default: typo3conf/ext/news/Resources/Public/Images/dummy-preview-image.png

   If preview image is defined, the defined placeholder is displayed.

Example: Display a dummy image from your sitepackage
----------------------------------------------------

.. code-block:: typoscript
   :caption: my_sitepackage/Configuration/TypoScript/setup.typoscript

   plugin.tx_news.settings {
     displayDummyIfNoMedia = 1
     list.media.dummyImage = EXT:my_sitepackage/Resources/Public/Images/News/MyPreviewImage.png
   }


Example: Remove dummy image from list view
------------------------------------------

.. code-block:: typoscript
   :caption: my_sitepackage/Configuration/TypoScript/setup.typoscript

   plugin.tx_news.settings {
     displayDummyIfNoMedia = 0
   }

.. _tsDetailPidDetermination:

detailPidDetermination
======================

.. confval:: detailPidDetermination

   :type: string, comma separated list of keywords
   :Default: "flexform, categories, default"
   :Path: plugin.tx_news.settings

   This setting defines which page is used for the link to the detail view.
   3 possible options are available which processed in the given order until
   a page has been found.

   flexform
      This setting tries to get the detail page from the plugin's setting
      :confval:`detailPid` :guilabel:`PageId for single news display` which
      can also be set by using TypoScript::

         # If set via TypoScript, also add detailPid to the setting "overrideFlexformSettingsIfEmpty"
         plugin.tx_news.settings.detailPid = 123

   categories
      A detail page can also be defined for every category. Use the field
      **Single-view page for news from this category** for that.

   **default**
      This type tries to get the value from the setting :confval:`defaultDetailPid`::

         plugin.tx_news.settings.defaultDetailPid = 456

.. _tsDefaultDetailPid:

defaultDetailPid
================

.. confval:: defaultDetailPid

   :type: int
   :Default: 0
   :Path: plugin.tx_news.settings

   If :confval:`detailPidDetermination` contains the keyword "default" this
   value is used to determine the pid used for detail links of news records.

.. _tsHideIdList:

hideIdList
==========

.. confval:: hideIdList

   :type: string
   :Default: (none)
   :Path: plugin.tx_news.settings


   Define a list of ids of news articles which are excluded in the view. This
   is similar to the setting :confval:`excludeAlreadyDisplayedNews` but the
   exclusion is defined in TypoScript instead of the template.

Example: Hide current news in the list
--------------------------------------

As an example this excludes the news record of a detail action of the
same page::

   plugin.tx_news.settings {
      useStdWrap := addToList(hideIdList)
      hideIdList.cObject = TEXT
      hideIdList.cObject {
         data = GP:tx_news_pi1|news
      }
   }

.. _tsOrderByAllowed:

orderByAllowed
==============

.. confval:: orderByAllowed

   :type: string
   :Default: sorting,author,uid,title,teaser,author,tstamp,crdate,datetime,categories.title
   :Path: plugin.tx_news.settings


   Due to restrictions of Extbase itself it is required to define all fields
   which are allowed for sorting results.

.. _tsAnalyticsSocial:

analytics.social
================

.. confval:: analytics.social

   :type: array

   Use additional code for google analytics tracking of the social
   functionalities.

   Default::

      analytics.social {
         facebookLike = 1
         facebookShare = 1
         twitter = 1
      }

.. _tsDemandClass:

demandClass
===========

.. confval:: demandClass

   :type: string
   :Path: plugin.tx_news.settings

   Overload the demand object which is used to build the queries. Read more
   about how to use and extend :ref:`demands <demands>`.

.. _tsLinkHrDate:

link.hrDate
===========

.. confval:: link.hrDate

   :type: boolean / array
   :Default: 0
   :Path: plugin.tx_news.settings

   The url to a single news record contains only the uid of the record.
   Sometimes it is nice to have the date in url too (for example
   :samp:`https://example.org/news/2021/8/news-title.html`).

   If this setting is enabled parameters for year, month and day are added
   to the URL. A :ref:`Routing configuration <routing>` can then be used
   to create a human readable date like the example above.

   Each parameter (day, month, year) can be separately configured by using
   the full options of the `php function date()
   <http://at2.php.net/manual/en/function.date.php>`_ . This example will
   add the day as a number without leading zeros, the month with leading
   zeros and the year by using 4 digits::

      link = 1
      link {
         hrDate = 1
         hrDate {
            day = j
            month = m
            year = Y
         }
      }

   This option is only applied if the build-in
   :ref:`LinkViewHelper <viewHelperLink>` is used

.. _tsLinkTypesOpeningInNewWindow:

link.typesOpeningInNewWindow
============================

.. confval:: link.typesOpeningInNewWindow

   :type: string
   :Default: 2
   :Path: plugin.tx_news.settings

   Comma separated list of news types which open with :html:`target="_blank"`
   Default is 2 which is the news type "Link to external page".

   This option is only applied if the build-in
   :ref:`LinkViewHelper <viewHelperLink>` is used.


.. _tsOpengraph:

opengraph
=========

.. confval:: opengraph

   :type: array
   :Path: plugin.tx_news.settings

   Additional open graph properties can be defined using TypoScript.
   Those are included in the the template partial
   :file:`EXT:news/Resources/Private/Partials/Detail/Opengraph.html`.

   The most important properties are filled automatically:

   og:title
      is filled with the field **Alternative title** or if that is empty
      with the **Title**.

   og:description
      is filled with the field **Description** or if that is empty with
      the **Teaser**.

   og:image
      is filled with the first preview image.

   og:url
      is filled with the current url.

   Check out https://dev.twitter.com/cards/getting-started for more information
   regarding the twitter cards.

   Default::

      opengraph {
         site_name =  {$plugin.tx_news.opengraph.site_name}
         type = article
         locale =
         admins =
         twitter {
            card = {$plugin.tx_news.opengraph.twitter.card}
            site = {$plugin.tx_news.opengraph.twitter.site}
            creator = {$plugin.tx_news.opengraph.twitter.creator}
         }
      }

.. _tsDetailMedia:

detail.media
============

.. confval:: detail.media

   :type: array
   :Path: plugin.tx_news.settings

   Configuration for media elements in the detail view.

   .. attention::
      If you need different options like using **width** instead of
      **maxWidth** you need also to adopt the template files.

   Default::

      detail.media {
         image {
            maxWidth = 282
            maxHeight =

            # If using fluid_styled_content
            lightbox {
               enabled = {$styles.content.textmedia.linkWrap.lightboxEnabled}
               class = {$styles.content.textmedia.linkWrap.lightboxCssClass}
               width = {$styles.content.textmedia.linkWrap.width}
               height = {$styles.content.textmedia.linkWrap.height}
            }
            # If using css_styled_content, use those settings
            # lightbox {
            #    enabled = {$styles.content.imgtext.linkWrap.lightboxEnabled}
            #    class = {$styles.content.imgtext.linkWrap.lightboxCssClass}
            #    width = {$styles.content.imgtext.linkWrap.width}
            #    height = {$styles.content.imgtext.linkWrap.height}
            #    rel = lightbox[myImageSet]
            # }
         }

         video {
            width = 282
            height = 300
         }
      }



.. _tsDetailErrorHandling:

detail.errorHandling
====================

.. confval:: detail.errorHandling

   :type: string
   :Path: plugin.tx_news.settings
   :Default: "showStandaloneTemplate,EXT:news/Resources/Private/Templates/News/DetailNotFound.html,404"

   If no news entry is found, it is possible to use various types of error handling.

   showStandaloneTemplate
      A template is rendered. The syntax is
      `showStandaloneTemplate,<path>,<errorCode>`, for example
      `showStandaloneTemplate,EXT:news/Resources/Private/Templates/News/DetailNotFound.html,404`

   redirectToListView
      Redirect to the list view on the same page.

   redirectToPage
      Redirect to any page by using the syntax redirectToPage,<pageid>,<status>.
      This means e.g. redirectToPage,123,301 to redirect to the page with UID 123 and error code 301.

      .. hint::
         Note, that it is not possible to redirect to a page with a 404 error code.

   pageNotFoundHandler
      The page not found handler defined in the site configuration is called.

Example: Show a custom not found template
-----------------------------------------

If the current news record is not found, show the custom template instead and
return the HTTP-code `404` (not found)::

   plugin.tx_news.settings.detail.errorHandling = showStandaloneTemplate,EXT:my_sitepackage/Resources/Private/Templates/NotFound.html,404

Example: Redirect to page 123 if news record is not found
---------------------------------------------------------

If the current news record is not found, forward to page 123 with
the HTTP-code `301` (moved permanently)::

   plugin.tx_news.settings.detail.errorHandling = redirectToPage,123,301


.. _tsDetailCheckPidOfNewsRecord:

detail.checkPidOfNewsRecord
===========================

.. confval:: detail.checkPidOfNewsRecord

   :type: boolean
   :Default: 0

   If set, the detail view checks the incoming news record against the defined
   :confval:`startingpoint`.

   If those don't match, the news record won't be displayed and
   :confval:`detail.errorHandling` applied.

.. _tsDetailShowMetaTags:

detail.showMetaTags
===================

.. confval:: detail.showMetaTags

   :type: boolean
   :Path: plugin.tx_news.settings
   :Default:  1

   If enabled, the meta tags including title, description and various
   open graph tags (defined in :confval:`opengraph`) are rendered.

.. _tsDetailShowPrevNext:

detail.showPrevNext
===================

.. confval:: detail.showPrevNext

   :type: boolean
   :Default:  0

   If enabled, links to the previous and next news records are shown

.. _tsDetailRegisterProperties:

detail.registerProperties
=========================

.. confval:: detail.registerProperties

   :type: string
   :Path: plugin.tx_news.settings
   :Default: keywords,title

   This property is currently not used.

.. _tsDetailShowSocialShareButtons:

detail.showSocialShareButtons
=============================

.. confval:: detail.showSocialShareButtons

   :type: boolean
   :Default: 1

   If the extension `rx_shariff <https://extensions.typo3.org/extension/rx_shariff>`__
   is installed and this option is enabled,
   the social share functionality provided by rx\_shariff is shown.

   You can install this extension with composer:

   .. code-block:: bash
      :caption: bash

      composer req reelworx/rx-shariff

list.media
==========

.. confval:: list.media

   :type: array
   :Path: plugin.tx_news.settings

   Configuration for media elements in the list view.

   .. attention::
      If you need different options like using **width** instead of **maxWidth** you need also
      to adopt the template files!

   Default::

      list.media {
         image {
            maxWidth = 100
            maxHeight = 100
         }
      }

.. _tsListPaginate:

list.paginate
=============

.. confval:: list.paginate

   :type: array
   :Path: plugin.tx_news.settings


   EXT:news uses a custom ViewHelper to render the pagination.

   The following settings are available:

   class
      The class that should be used for the pagination

   itemsPerPage
      Define how many items are shown on one page.

   insertAbove
      Set it to `0` to hide the pagination before the actual news items.

   insertBelow
      Set it to `0` to hide the pagination after the actual news items.

   maximumNumberOfLinks
      If set, not all pages of the pagination are shown but only the given amount. Imagine
      1000 news records and 10 items per page. This would result in 100
      links in the frontend.

      .. hint::
         EXT:numbered_pagination must be installed for this setting to work.

   Default::

      list.paginate {
         class = GeorgRinger\NumberedPagination\NumberedPagination
         itemsPerPage = 10
         insertAbove = 1
         insertBelow = 1
         maximumNumberOfLinks = 3
      }

.. _tsListRss:

list.rss
========


.. confval:: list.rss

   :type: array
   :Path: plugin.tx_news.settings

   Additional settings for the RSS view.

   See the :ref:`RSS configuration <rss>`.

   Default::

      rss {
         channel {
            title = {$plugin.tx_news.rss.channel.title}
            description = {$plugin.tx_news.rss.channel.description}
            language = {$plugin.tx_news.rss.channel.language}
            copyright = {$plugin.tx_news.rss.channel.copyright}
            generator = {$plugin.tx_news.rss.channel.generator}
            link = {$plugin.tx_news.rss.channel.link}
         }
      }

.. _tsSearchFields:

search.fields
=============

.. confval:: search.fields

   :type: string
   :Path: plugin.tx_news.settings
   :Default: teaser,title,bodytext

   Comma separated list of fields which are used for the search.

   .. hint::
      You can also search in relations, e.g. the category title by using
      :code:`categories.title` or :code:`contentElements.header` to search in related content elements.

      Be aware that searching in relations might create big queries and makes the search even slower.
      Use ke_search or solr as alternatives!

search.splitSearchWord
======================


.. confval:: search.splitSearchWord

   :type: boolean
   :Path: plugin.tx_news.settings
   :Default: 0


   If set to `1`, the search subject will be split by spaces and it will
   not only find the phrase but also if the search terms are scattered
   in a field.

   As an example: Searching for *hello world* will give you as result also
   the news item with the title `hello the world`. The search terms must be
   found in the same field, which means that a news item with the world
   *hello* in the `title` and the word *world* in the bodytext won't be found.

   .. hint::
      If you need a better search experience, think about using something like EXT:solr!
