TYPO3 Blog Extension

Author

TYPO3 GmbH Team <info@typo3.com>

License

GPL 3.0

Rendered

Fri, 22 Aug 2025 13:08:56 +0000

Description

The blog extension for TYPO3 provides a blog based on TYPO3s core features - pages and content element. Use all your favorite and well-known elements to create a full-blown blog with ease.

Features

The main goal for this blog extension was to use TYPO3s core concepts and elements to provide a full-blown blog that users of TYPO3 can instantly understand and use.

Pages as blog entries

Blog entries are simply pages with a special page type blog entry and can be created and edited via the well-known page module. Creating new entries is as simple as dragging a new entry into the page tree.

Post information in backend page header

The TYPO3 page and the list module show additional information for blog posts. Information that is normally hidden in the page settings is now visible to the editor. The new information bar is enabled by default but can be disabled in the extension settings.

Use all your content elements

All your existing elements can be used on the blog pages - including backend layouts, custom content elements or plugins.

Flexible positioning

All parts of your new blog are usable on their own, so you can just use the elements you want. The different elements include for example the comments and comment form, a sidebar or the list of blog posts. All these elements can be used as separate content elements and therefor be positioned and used wherever you want.

Customizable Templates

Templating is done via Fluid templates. If you want your blog to have a custom look and feel just replace the templates and styles with your own. If you just want a quick blog installation, use the templates provided by the extension and just add your stylesheets.

Categorizing and Tagging

Use categories and tags to add meta information to your blog posts. Let your users explore your posts based on their interests navigating via tags or categories to find similar entries. Add posts from the same category to your posts to get your readers to read even more.

Integration and Standalone Mode

The blog features three different modes - expert, standalone and integration.

Installation

Install TYPO3 Blog Extension like any other TYPO3 extension.

  1. Composer

    composer require t3g/blog
    Copied!
  2. Git

    cd typo3conf/ext/
    git clone git@github.com:TYPO3GmbH/blog.git
    Copied!
  3. Extension Manager

    1. Log into your TYPO3
    2. Go to Admin Tools / Extensions
    3. Select "Get Extensions" in the Document-Header
    4. Click "Update now"
    5. Search for "TYPO3 Blog Extension"
    6. Click Import and Install

Activation

  1. Go to Admin Tools / Extensions
  2. Select "Installed Extensions" in the Document-Header
  3. Activate the "TYPO3 Blog Extension"

Setup

Setup Wizard

The Setup Wizard creates a fully configured standalone instance of the TYPO3 Blog Extension. If you already have an existing site, you might dislike the result of having an additional and unplanned root page. In that case, please read the manual setup instructions.

Setup Wizard

Manual Setup

The manual setup helps you to build an integrated instance of the TYPO3 Blog Extension. If you want a standalone Blog and do not have an existing site, please go with the Setup Wizard instructions.

Manual Setup

Setup Wizard

The Setup Wizard creates a fully configured standalone instance of the TYPO3 Blog Extension. If you already have an existing site, you might dislike the result of having an additional and unplanned root page. In that case, please read the Manual Setup instructions.

  1. Click on "Setup" in the "Blog" section of your module menu in the backend

  2. Click on the "Setup a new blog" button

  3. Enter a title for your blog

  4. Click on the "Setup" button, to create the blog

  5. The blog setup is now completed

  6. Enable your blog

    1. Select the page module
    2. Right click on your blog
    3. Enable the page
  7. Explore your Blog

Manual Setup

The manual setup helps you to build an integrated instance of the TYPO3 Blog Extension. If you want a standalone Blog and do not have an existing site, please go with the Setup Wizard instructions.

Prerequisites:

  1. Ensure the TYPO3 Blog Extension is installed and activated
  2. Ensure your logged in as Administrator
  1. Open your existing template record (optional)

  2. Add the static template to your existing template

    Option A: Add the static template to your existing template record

    Option B: Add nessesary includes to your sitepackage

    # Setup
    <INCLUDE_TYPOSCRIPT: source="FILE:EXT:blog/Configuration/TypoScript/Integration/setup.typoscript">
    Copied!
    # Constants
    <INCLUDE_TYPOSCRIPT: source="FILE:EXT:blog/Configuration/TypoScript/Integration/constants.typoscript">
    Copied!
  3. Create Blog Pages

    1. Right click the page you want the Blog to list below
    2. Select "More options"
    3. Select "Create multiple pages"

    Create the following Pages, make sure they have the correct Type

    Name Type
    Blog Blog Page
    Authors Blog Page
    Categories Blog Page
    Tags Blog Page
    Archive Blog Page
    Data Folder

    Edit the newly generated Data folder to contain the "Blog"

    1. Edit the page "Data" and select the "Behaviour" tab
    2. Select "Blog" at "Contains Plugin"
    3. Save the Page

    Sort the pages like the following screenshot

  4. Configure the page ids in the typoscript constants

    These go either in the root template record or in the constants file of your sitepackage.

    plugin.tx_blog.settings.blogUid     = ID_of_Page_Blog
    plugin.tx_blog.settings.categoryUid = ID_of_Page_Categories
    plugin.tx_blog.settings.authorUid   = ID_of_Page_Authors
    plugin.tx_blog.settings.tagUid      = ID_of_Page_Tags
    plugin.tx_blog.settings.archiveUid  = ID_of_Page_Archive
    plugin.tx_blog.settings.storagePid  = ID_of_Page_Data
    Copied!
  5. Configure the PageTS to point the blog to the storage folder "Data"

    TCEFORM.pages.tags.PAGE_TSCONFIG_ID       = ID_of_Page_Data
    TCEFORM.pages.authors.PAGE_TSCONFIG_ID    = ID_of_Page_Data
    TCEFORM.pages.categories.PAGE_TSCONFIG_ID = ID_of_Page_Data
    Copied!

    Option A: Add the configuration to the root page

    1. Select the page module
    2. Select and edit your root page
    3. Select the resources tab
    4. Add the "Page TSconfig" configuration

    Option B: Add configuration to your Page TSconfig in your Sitepackage

  6. Frontend Routing

    The extension provides a frontend route enhancer configuration that you can include it in your site configuration.

    imports:
       - { resource: "EXT:blog/Configuration/Routes/Default.yaml" }
    Copied!
  7. Add Plugins to Blog Pages

    Example: Blog Listing

    1. Select the Page module
    2. Select the Blog page
    3. Click the Button to add content
    1. Select the "Blog" tab
    2. Add plugin "Blog: List of posts"
    Page Plugin
    Blog Blog: List of posts
    Authors Blog: List by author
    Categories Blog: List by category
    Tags Blog: List by tag
    Archive Blog: Archive
  8. Congratulations

    Your blog is now ready, please read on in the capters about "how to add a blog post" and learn more about configuration options.

Categories

Create a new Category

  1. Go to the list module
  2. Click on the page where you want to create the new category
  3. Click on the "new record" button on the top and choose category
  4. Enter a title for the category and choose a possible parent
  5. Click "Save"

Tags

Create a new Tag

  1. Go to list module
  2. Click on the page where you want to create the new tag
  3. Enter a title for the tag
  4. Click "Save"

Posts

Create a new post

  1. Create blog post

    Create a new blog post page

    1. Click on the page module
    2. Click on the plus icon on top of the page tree
    3. Drag the blog post into your data folder
  2. Edit your blog post

    1. Select the blog post you created
    2. Click "Edit Post Meta-Data" or the edit button in the page header
  3. Check the title of your blog post

    1. Select the "General" tab
    2. Edit the title of your blog post
  4. Adjust publish date and feature image

    1. Click the "Blog" tab
    2. Adjust the publish date if nessesary
    3. Upload a new image for your blog post or select an existing one
  5. Save your changes and close the post meta data interface

    1. Save your changes
    2. Close the post meta data interface
  6. Add content blocks to your post

    1. Click the "Add content" Button
    1. Select any content block you want to insert, for example "Regular Text Element"
    1. Insert content for your block
    2. Save the content
    3. Close the content block
  7. Enable your blog post

    1. Right click on the post you want to enable
    2. Click on "Enable"
  8. View your Blog Post

    Click on the "View" Button in the document header

    Congratulations you published your blog post

Configuration

TypoScript Reference

This section covers all settings, which can be defined by TypoScript Constants.

TYPO3 Blog

Page ID settings

Property Type Default
plugin.tx_blog.settings.blogUid_ int+ 0
plugin.tx_blog.settings.authorUid_ int+ 0
plugin.tx_blog.settings.categoryUid_ int+ 0
plugin.tx_blog.settings.tagUid_ int+ 0
plugin.tx_blog.settings.archiveUid_ int+ 0
plugin.tx_blog.settings.storagePid_ int+ 0
plugin.tx_blog.settings.blogUid
Property
plugin.tx_blog.settings.blogUid
Data type
int+
Default
0
Description
List posts UID: Location of the "Blog: List of posts" plugin. This page UID is the root page for the blog. All blog post pages are located below this page.
plugin.tx_blog.settings.authorUid
Property
plugin.tx_blog.settings.authorUid
Data type
int+
Default
0
Description
Author UID: Location of the "Blog: Author" plugin. Shows posts by author.
plugin.tx_blog.settings.categoryUid
Property
plugin.tx_blog.settings.categoryUid
Data type
int+
Default
0
Description
List by category UID: Location of the "Blog: List by category" plugin. Shows all posts from one category.
plugin.tx_blog.settings.tagUid
Property
plugin.tx_blog.settings.tagUid
Data type
int+
Default
0
Description
List by tags UID: Location of the "Blog: List by tags" plugin. Shows all posts from one tag.
plugin.tx_blog.settings.archiveUid
Property
plugin.tx_blog.settings.archiveUid
Data type
int+
Default
0
Description
Archive UID: Location of the "Blog: Archive" plugin. Shows archived posts.
plugin.tx_blog.settings.storagePid
Property
plugin.tx_blog.settings.storagePid
Data type
int+
Default
0
Description
Storage folder: Storage folder of all categories and tags for this blog.

Templates

Property Type Default
plugin.tx_blog.view.templateRootPaths_ string EXT:blog/Resources/Private/Templates/
plugin.tx_blog.view.partialRootPaths_ string EXT:blog/Resources/Private/Partials/
plugin.tx_blog.view.layoutRootPaths_ string EXT:blog/Resources/Private/Layouts/
plugin.tx_blog.view.widget.templateRootPaths_ string EXT:blog/Resources/Private/Templates/
plugin.tx_blog.view.emails.templateRootPaths_ string EXT:blog/Resources/Private/Mails/Templates/
plugin.tx_blog.view.emails.partialRootPaths_ string EXT:blog/Resources/Private/Mails/Partials/
plugin.tx_blog.view.emails.layoutRootPaths_ string EXT:blog/Resources/Private/Mails/Layouts/
plugin.tx_blog.view.templateRootPaths
Property
plugin.tx_blog.view.templateRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Templates/
Description
Template Root Path: Path to templates folder
plugin.tx_blog.view.partialRootPaths
Property
plugin.tx_blog.view.partialRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Partials/
Description
Partial Root Path: Path to partial folder
plugin.tx_blog.view.layoutRootPaths
Property
plugin.tx_blog.view.layoutRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Layouts/
Description
Layout Root Path: Path to layout folder
plugin.tx_blog.view.widget.templateRootPaths
Property
plugin.tx_blog.view.widget.templateRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Templates/
Description
Widget-Template Root Path: Path to templates folder
plugin.tx_blog.view.emails.templateRootPaths
Property
plugin.tx_blog.view.emails.templateRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Mails/Templates/
Description
Email-Template Root Path: Path to templates folder
plugin.tx_blog.view.emails.partialRootPaths
Property
plugin.tx_blog.view.emails.partialRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Mails/Partials/
Description
Email-Partial Root Path: Path to partial folder
plugin.tx_blog.view.emails.layoutRootPaths
Property
plugin.tx_blog.view.emails.layoutRootPaths
Data type
string
Default
EXT:blog/Resources/Private/Mails/Layouts/
Description
Email-Layout Root Path: Path to layout folder

Listings

Property Type Default
plugin.tx_blog.settings.lists.pagination.itemsPerPage_ int+ 10
plugin.tx_blog.settings.lists.pagination.insertAbove_ int+ 0
plugin.tx_blog.settings.lists.pagination.insertBelow_ int+ 1
plugin.tx_blog.settings.lists.pagination.maximumNumberOfLinks_ int+ 10
plugin.tx_blog.settings.lists.posts.maximumDisplayedItems_ int+ 0
plugin.tx_blog.settings.lists.posts.dateFormat_ string %d.%m.%Y
plugin.tx_blog.settings.latestPosts.limit_ int+ 3
plugin.tx_blog.settings.relatedPosts.limit_ int+ 5
plugin.tx_blog.settings.relatedPosts.categoryMultiplier_ int+ 1
plugin.tx_blog.settings.relatedPosts.tagMultiplier_ int+ 1
plugin.tx_blog.settings.lists.pagination.itemsPerPage
Property
plugin.tx_blog.settings.lists.pagination.itemsPerPage
Data type
int+
Default
10
Description
Number of post that should be displayed per page:
plugin.tx_blog.settings.lists.pagination.insertAbove
Property
plugin.tx_blog.settings.lists.pagination.insertAbove
Data type
int+
Default
0
Description
Show the pagination above the posts:
plugin.tx_blog.settings.lists.pagination.insertBelow
Property
plugin.tx_blog.settings.lists.pagination.insertBelow
Data type
int+
Default
1
Description
Show the pagination below the posts:
plugin.tx_blog.settings.lists.posts.maximumDisplayedItems
Property
plugin.tx_blog.settings.lists.posts.maximumDisplayedItems
Data type
int+
Default
0
Description
Maximum displayed items: Maximum number of posts to be displayed (0 = no limit).
plugin.tx_blog.settings.lists.posts.dateFormat
Property
plugin.tx_blog.settings.lists.posts.dateFormat
Data type
string
Default
%d.%m.%Y
Description
Date format: The format for the list items (default: %d.%m.%Y).
plugin.tx_blog.settings.latestPosts.limit
Property
plugin.tx_blog.settings.latestPosts.limit
Data type
int+
Default
3
Description
Limit: The limit of displayed items (default: 3).

Listings: Archive

Property Type Default
plugin.tx_blog.settings.archive.showCounter_ boolean 1
plugin.tx_blog.settings.archive.yearDateFormat_ string %Y
plugin.tx_blog.settings.archive.monthDateFormat_ string %B
plugin.tx_blog.settings.archive.showCounter
Property
plugin.tx_blog.settings.archive.showCounter
Data type
boolean
Default
1
Description
Show counter: If enabled, the count of posts is visible (default: 1).
plugin.tx_blog.settings.archive.yearDateFormat
Property
plugin.tx_blog.settings.archive.yearDateFormat
Data type
string
Default
%Y
Description
Year format: The format of the year (default: %Y).
plugin.tx_blog.settings.archive.monthDateFormat
Property
plugin.tx_blog.settings.archive.monthDateFormat
Data type
string
Default
%B
Description
Month format: The format of the month (default: %B).

Widget: Comment

Property Type Default
plugin.tx_blog.settings.widgets.comments.limit_ int+ 5
plugin.tx_blog.settings.widgets.comments.limit
Property
plugin.tx_blog.settings.widgets.comments.limit
Data type
int+
Default
5
Description
Limit: The limit of displayed items (default: 5).

Widget: Recent posts

Property Type Default
plugin.tx_blog.settings.widgets.recentposts.limit_ int+ 5
plugin.tx_blog.settings.widgets.recentposts.limit
Property
plugin.tx_blog.settings.widgets.recentposts.limit
Data type
int+
Default
5
Description
Limit: The limit of displayed items (default: 5).

Widget: Tags

Property Type Default
plugin.tx_blog.settings.widgets.tags.limit_ int+ 20
plugin.tx_blog.settings.widgets.tags.minSize_ int+ 100
plugin.tx_blog.settings.widgets.tags.maxSize_ int+ 100
plugin.tx_blog.settings.widgets.tags.limit
Property
plugin.tx_blog.settings.widgets.tags.limit
Data type
int+
Default
20
Description
Limit: The limit of displayed items (default: 20).
plugin.tx_blog.settings.widgets.tags.minSize
Property
plugin.tx_blog.settings.widgets.tags.minSize
Data type
int+
Default
100
Description
Minimum size: The minimum size of the font (default: 100).
plugin.tx_blog.settings.widgets.tags.maxSize
Property
plugin.tx_blog.settings.widgets.tags.maxSize
Data type
int+
Default
100
Description
Maximum size: The maximum size of the font (default: 200).

Widget: Archive

Property Type Default
plugin.tx_blog.settings.widgets.archive.showCounter_ boolean 1
plugin.tx_blog.settings.widgets.archive.groupByYear_ boolean 1
plugin.tx_blog.settings.widgets.archive.groupByMonth_ boolean 1
plugin.tx_blog.settings.widgets.archive.yearDateFormat_ string %Y
plugin.tx_blog.settings.widgets.archive.monthDateFormat_ string %B
plugin.tx_blog.settings.widgets.archive.showCounter
Property
plugin.tx_blog.settings.widgets.archive.showCounter
Data type
boolean
Default
1
Description
Show counter: If enabled, the count of posts is visible (default: 1).
plugin.tx_blog.settings.widgets.archive.groupByYear
Property
plugin.tx_blog.settings.widgets.archive.groupByYear
Data type
boolean
Default
1
Description
Group by year: If enabled, the posts are grouped by year (default: 1).
plugin.tx_blog.settings.widgets.archive.groupByMonth
Property
plugin.tx_blog.settings.widgets.archive.groupByMonth
Data type
boolean
Default
1
Description
Group by month: If enabled, the posts are grouped by year and month (default: 1).
plugin.tx_blog.settings.widgets.archive.yearDateFormat
Property
plugin.tx_blog.settings.widgets.archive.yearDateFormat
Data type
string
Default
%Y
Description
Year format: The format of the year (default: %Y).
plugin.tx_blog.settings.widgets.archive.monthDateFormat
Property
plugin.tx_blog.settings.widgets.archive.monthDateFormat
Data type
string
Default
%B
Description
Month format: The format of the month (default: %B).

Comments

Property Type Default
plugin.tx_blog.settings.comments.active_ boolean 1
plugin.tx_blog.settings.comments.features.urls_ boolean 0
plugin.tx_blog.settings.comments.moderation_ options[0,1,2] 0
plugin.tx_blog.settings.comments.respectPostLanguageId_ options[0,1,-1] 1
plugin.tx_blog.settings.comments.date.format_ string %B %e, %Y
plugin.tx_blog.settings.comments.disqus_ boolean 0
plugin.tx_blog.settings.comments.disqus.shortname_ string  
plugin.tx_blog.settings.comments.google_recaptcha_ boolean 0
plugin.tx_blog.settings.comments.google_recaptcha.website_key_ string  
plugin.tx_blog.settings.comments.google_recaptcha.secret_key_ string  
plugin.tx_blog.settings.comments.active
Property
plugin.tx_blog.settings.comments.active
Data type
boolean
Default
1
Description
Enable Comments: Activate comments as a general feature
plugin.tx_blog.settings.comments.features.urls
Property
plugin.tx_blog.settings.comments.features.urls
Data type
boolean
Default
0
Description
Enable Urls: Activate the url field in the comment form and output the submitted url
plugin.tx_blog.settings.comments.moderation
Property
plugin.tx_blog.settings.comments.moderation
Data type
options[0,1,2]
Default
0
Description
Comments moderation mode: 0 = no moderation, 1 = moderation active, 2 = moderation only on first comment
plugin.tx_blog.settings.comments.respectPostLanguageId
Property
plugin.tx_blog.settings.comments.respectPostLanguageId
Data type
options[0,1,-1]
Default
1
Description
Respect post_language_id: 0 = show all comments also on translated posts, 1 = show only comments written in current language or language all (-1)
plugin.tx_blog.settings.comments.date.format
Property
plugin.tx_blog.settings.comments.date.format
Data type
string
Default
%B %e, %Y
Description
Date format: The format for the comments (default: %B %e, %Y).
plugin.tx_blog.settings.comments.disqus
Property
plugin.tx_blog.settings.comments.disqus
Data type
boolean
Default
0
Description
Enable Disqus: Use disqus instead of internal comments?
plugin.tx_blog.settings.comments.disqus.shortname
Property
plugin.tx_blog.settings.comments.disqus.shortname
Data type
string
Description
Disqus shortname: The shortname / forum id of your disqus setup.
plugin.tx_blog.settings.comments.google_recaptcha
Property
plugin.tx_blog.settings.comments.google_recaptcha
Data type
boolean
Default
0
Description
Google Recaptcha v2: Enable google recaptcha for comments?
plugin.tx_blog.settings.comments.google_recaptcha.website_key
Property
plugin.tx_blog.settings.comments.google_recaptcha.website_key
Data type
string
Description
Google Recaptcha Website-Key:
plugin.tx_blog.settings.comments.google_recaptcha.secret_key
Property
plugin.tx_blog.settings.comments.google_recaptcha.secret_key
Data type
string
Description
Google Recaptcha Secret-Key:

Authors

Property Type Default
plugin.tx_blog.settings.authors.avatar.provider.size_ int+ 72
plugin.tx_blog.settings.authors.avatar.provider.default_ string mm
plugin.tx_blog.settings.authors.avatar.provider.rating_ options[g, pg, r, x] g
plugin.tx_blog.settings.authors.avatar.provider.size
Property
plugin.tx_blog.settings.authors.avatar.provider.size
Data type
int+
Default
72
Description
Author Avatar Size: The size in px for the author avatar
plugin.tx_blog.settings.authors.avatar.provider.default
Property
plugin.tx_blog.settings.authors.avatar.provider.default
Data type
string
Default
mm
Description
Author Avatar Default: The default image for an author avatar
plugin.tx_blog.settings.authors.avatar.provider.rating
Property
plugin.tx_blog.settings.authors.avatar.provider.rating
Data type
options[g, pg, r, x]
Default
g
Description
Define the gravatar rating for images:
g: suitable for display on all websites with any audience type. pg: may contain rude gestures, provocatively dressed individuals, the lesser swear words, or mild violence. r: may contain such things as harsh profanity, intense violence, nudity, or hard drug use. x: may contain hardcore sexual imagery or extremely disturbing violence.

Notifications

Property Type Default
plugin.tx_blog.settings.notifications.email.senderName_ string TYPO3 Blog
plugin.tx_blog.settings.notifications.email.senderMail_ string no-reply@example.com
plugin.tx_blog.settings.notifications.CommentAddedNotification.author_ boolean 1
plugin.tx_blog.settings.notifications.CommentAddedNotification.admin_ boolean 1
plugin.tx_blog.settings.notifications.CommentAddedNotification.admin.email_ string admin@example.com
plugin.tx_blog.settings.notifications.email.senderName
Property
plugin.tx_blog.settings.notifications.email.senderName
Data type
string
Default
TYPO3 Blog
Description
Sender name: Global sender name for notifications
plugin.tx_blog.settings.notifications.email.senderMail
Property
plugin.tx_blog.settings.notifications.email.senderMail
Data type
string
Default
no-reply@example.com
Description
Sender mail: Global sender email address for notifications
plugin.tx_blog.settings.notifications.CommentAddedNotification.author
Property
plugin.tx_blog.settings.notifications.CommentAddedNotification.author
Data type
boolean
Default
1
Description
Author notifications: Send notification to author of a blog post
plugin.tx_blog.settings.notifications.CommentAddedNotification.admin
Property
plugin.tx_blog.settings.notifications.CommentAddedNotification.admin
Data type
boolean
Default
1
Description
Admin notifications: Send notification to admin of the blog
plugin.tx_blog.settings.notifications.CommentAddedNotification.admin.email
Property
plugin.tx_blog.settings.notifications.CommentAddedNotification.admin.email
Data type
string
Default
admin@example.com
Description
Admin mail: Global admin (receiver) email address for notifications

TYPO3 Blog: Post

Post Header

Property Type Default
plugin.tx_blog.settings.meta.postheader.enable_ boolean 1
plugin.tx_blog.settings.meta.postheader.modifier_ options[simple,condensed,extended,modern] simple
plugin.tx_blog.settings.meta.postheader.elements.authors.enable_ boolean 1
plugin.tx_blog.settings.meta.postheader.elements.authors.avatar.enable_ boolean 0
plugin.tx_blog.settings.meta.postheader.elements.authors.avatar.size_ int+ 20
plugin.tx_blog.settings.meta.postheader.elements.categories.enable_ boolean 0
plugin.tx_blog.settings.meta.postheader.elements.tags.enable_ boolean 0
plugin.tx_blog.settings.meta.postheader.elements.published.enable_ boolean 1
plugin.tx_blog.settings.meta.postheader.elements.published.format_ string %d.%m.%Y
plugin.tx_blog.settings.meta.postheader.elements.comments.enable_ boolean 1
plugin.tx_blog.settings.meta.postheader.enable
Property
plugin.tx_blog.settings.meta.postheader.enable
Data type
boolean
Default
1
Description
Display meta information in the header:
plugin.tx_blog.settings.meta.postheader.modifier
Property
plugin.tx_blog.settings.meta.postheader.modifier
Data type
options[simple,condensed,extended,modern]
Default
simple
Description
Meta information display style:
plugin.tx_blog.settings.meta.postheader.elements.authors.enable
Property
plugin.tx_blog.settings.meta.postheader.elements.authors.enable
Data type
boolean
Default
1
Description
Show authors in the meta section:
plugin.tx_blog.settings.meta.postheader.elements.authors.avatar.enable
Property
plugin.tx_blog.settings.meta.postheader.elements.authors.avatar.enable
Data type
boolean
Default
0
Description
Enable author avatars in the meta section:
plugin.tx_blog.settings.meta.postheader.elements.authors.avatar.size
Property
plugin.tx_blog.settings.meta.postheader.elements.authors.avatar.size
Data type
int+
Default
20
Description
Size of the author avatars: The size in px for the author avatar
plugin.tx_blog.settings.meta.postheader.elements.categories.enable
Property
plugin.tx_blog.settings.meta.postheader.elements.categories.enable
Data type
boolean
Default
0
Description
Show categories in the meta section:
plugin.tx_blog.settings.meta.postheader.elements.tags.enable
Property
plugin.tx_blog.settings.meta.postheader.elements.tags.enable
Data type
boolean
Default
0
Description
Show tags in the meta section:
plugin.tx_blog.settings.meta.postheader.elements.published.enable
Property
plugin.tx_blog.settings.meta.postheader.elements.published.enable
Data type
boolean
Default
1
Description
Show the publish date in the meta section:
plugin.tx_blog.settings.meta.postheader.elements.published.format
Property
plugin.tx_blog.settings.meta.postheader.elements.published.format
Data type
string
Default
%d.%m.%Y
Description
Published date format: Default: %d.%m.%Y
plugin.tx_blog.settings.meta.postheader.elements.comments.enable
Property
plugin.tx_blog.settings.meta.postheader.elements.comments.enable
Data type
boolean
Default
1
Description
Show comments in the meta section:

Post Footer

Property Type Default
plugin.tx_blog.settings.meta.postfooter.enable_ boolean 1
plugin.tx_blog.settings.meta.postfooter.modifier_ options[simple,condensed,extended,modern] simple
plugin.tx_blog.settings.meta.postfooter.elements.authors.enable_ boolean 0
plugin.tx_blog.settings.meta.postfooter.elements.authors.avatar.enable_ boolean 0
plugin.tx_blog.settings.meta.postfooter.elements.authors.avatar.size_ int+ 20
plugin.tx_blog.settings.meta.postfooter.elements.categories.enable_ boolean 1
plugin.tx_blog.settings.meta.postfooter.elements.tags.enable_ boolean 1
plugin.tx_blog.settings.meta.postfooter.elements.published.enable_ boolean 0
plugin.tx_blog.settings.meta.postfooter.elements.published.format_ string %d.%m.%Y
plugin.tx_blog.settings.meta.postfooter.elements.comments.enable_ boolean 0
plugin.tx_blog.settings.meta.postfooter.enable
Property
plugin.tx_blog.settings.meta.postfooter.enable
Data type
boolean
Default
1
Description
Display meta information in the footer:
plugin.tx_blog.settings.meta.postfooter.modifier
Property
plugin.tx_blog.settings.meta.postfooter.modifier
Data type
options[simple,condensed,extended,modern]
Default
simple
Description
Meta information display style:
plugin.tx_blog.settings.meta.postfooter.elements.authors.enable
Property
plugin.tx_blog.settings.meta.postfooter.elements.authors.enable
Data type
boolean
Default
0
Description
Show authors in the meta section:
plugin.tx_blog.settings.meta.postfooter.elements.authors.avatar.enable
Property
plugin.tx_blog.settings.meta.postfooter.elements.authors.avatar.enable
Data type
boolean
Default
0
Description
Enable author avatars in the meta section:
plugin.tx_blog.settings.meta.postfooter.elements.authors.avatar.size
Property
plugin.tx_blog.settings.meta.postfooter.elements.authors.avatar.size
Data type
int+
Default
20
Description
Size of the author avatars: The size in px for the author avatar
plugin.tx_blog.settings.meta.postfooter.elements.categories.enable
Property
plugin.tx_blog.settings.meta.postfooter.elements.categories.enable
Data type
boolean
Default
1
Description
Show categories in the meta section:
plugin.tx_blog.settings.meta.postfooter.elements.tags.enable
Property
plugin.tx_blog.settings.meta.postfooter.elements.tags.enable
Data type
boolean
Default
1
Description
Show tags in the meta section:
plugin.tx_blog.settings.meta.postfooter.elements.published.enable
Property
plugin.tx_blog.settings.meta.postfooter.elements.published.enable
Data type
boolean
Default
0
Description
Show the publish date in the meta section:
plugin.tx_blog.settings.meta.postfooter.elements.published.format
Property
plugin.tx_blog.settings.meta.postfooter.elements.published.format
Data type
string
Default
%d.%m.%Y
Description
Published date format: Default: %d.%m.%Y
plugin.tx_blog.settings.meta.postfooter.elements.comments.enable
Property
plugin.tx_blog.settings.meta.postfooter.elements.comments.enable
Data type
boolean
Default
0
Description
Show comments in the meta section:

TYPO3 Blog: List

Element Header

Property Type Default
plugin.tx_blog.settings.meta.listheader.enable_ boolean 1
plugin.tx_blog.settings.meta.listheader.modifier_ options[simple,condensed,extended,modern] simple
plugin.tx_blog.settings.meta.listheader.elements.authors.enable_ boolean 0
plugin.tx_blog.settings.meta.listheader.elements.authors.avatar.enable_ boolean 0
plugin.tx_blog.settings.meta.listheader.elements.authors.avatar.size_ int+ 20
plugin.tx_blog.settings.meta.listheader.elements.categories.enable_ boolean 0
plugin.tx_blog.settings.meta.listheader.elements.tags.enable_ boolean 0
plugin.tx_blog.settings.meta.listheader.elements.published.enable_ boolean 1
plugin.tx_blog.settings.meta.listheader.elements.published.format_ string %d.%m.%Y
plugin.tx_blog.settings.meta.listheader.elements.comments.enable_ boolean 1
plugin.tx_blog.settings.meta.listheader.enable
Property
plugin.tx_blog.settings.meta.listheader.enable
Data type
boolean
Default
1
Description
Display meta information in the header:
plugin.tx_blog.settings.meta.listheader.modifier
Property
plugin.tx_blog.settings.meta.listheader.modifier
Data type
options[simple,condensed,extended,modern]
Default
simple
Description
Meta information display style:
plugin.tx_blog.settings.meta.listheader.elements.authors.enable
Property
plugin.tx_blog.settings.meta.listheader.elements.authors.enable
Data type
boolean
Default
0
Description
Show authors in the meta section:
plugin.tx_blog.settings.meta.listheader.elements.authors.avatar.enable
Property
plugin.tx_blog.settings.meta.listheader.elements.authors.avatar.enable
Data type
boolean
Default
0
Description
Enable author avatars in the meta section:
plugin.tx_blog.settings.meta.listheader.elements.authors.avatar.size
Property
plugin.tx_blog.settings.meta.listheader.elements.authors.avatar.size
Data type
int+
Default
20
Description
Size of the author avatars: The size in px for the author avatar
plugin.tx_blog.settings.meta.listheader.elements.categories.enable
Property
plugin.tx_blog.settings.meta.listheader.elements.categories.enable
Data type
boolean
Default
0
Description
Show categories in the meta section:
plugin.tx_blog.settings.meta.listheader.elements.tags.enable
Property
plugin.tx_blog.settings.meta.listheader.elements.tags.enable
Data type
boolean
Default
0
Description
Show tags in the meta section:
plugin.tx_blog.settings.meta.listheader.elements.published.enable
Property
plugin.tx_blog.settings.meta.listheader.elements.published.enable
Data type
boolean
Default
1
Description
Show the publish date in the meta section:
plugin.tx_blog.settings.meta.listheader.elements.published.format
Property
plugin.tx_blog.settings.meta.listheader.elements.published.format
Data type
string
Default
%d.%m.%Y
Description
Published date format: Default: %d.%m.%Y
plugin.tx_blog.settings.meta.listheader.elements.comments.enable
Property
plugin.tx_blog.settings.meta.listheader.elements.comments.enable
Data type
boolean
Default
1
Description
Show comments in the meta section:

Plugins

The following plugins are available after installing the extension.

Blog Page Plugins

Blog page plugins are usually used in conjunction with a sidebar, it is recommended to provide a separate template for these pages.

Example:

<f:layout name="Default" />
<f:section name="Main">

   <div class="container">
      <div class="blogcontainer">
            <main class="blogcontainer-main" role="main">
               <f:cObject typoscriptObjectPath="lib.dynamicContent" data="{
                        colPos: '0'
                  }" />
            </main>
            <aside class="blogcontainer-sidebar">
               <f:render section="renderPlugin" arguments="{listType: 'blog_sidebar'}" />
            </aside>
      </div>
   </div>

</f:section>
<f:section name="renderPlugin">

   {blogvh:data.contentListOptions(listType: listType)}
   <f:cObject typoscriptObjectPath="tt_content.list" data="{contentObjectData}" table="tt_content"/>

</f:section>
Copied!

List of posts

Displays a list of blog posts ordered by date. All non-hidden, non-deleted and non-archived posts are shown in the list.

Latest posts

Displays a number of latest posts. You can specify the amount of items yourself.

List by category

If you add this element and you have selected a category on the categories tab, it will show an overview of posts for that category. If you have no categories selected, it will show an overview of categories.

List by author

Displays all posts belonging to the chosen author.

List by tags

Allows the users to show all posts tagged with a specific keyword.

Archive

The archive plugin displays all posts categorized by year and month.

Blog Post Plugins

If possible, do not add the following plugins manually on each blog post. Provide them via a Dedicated Page Template, so your editor can concentrate on the content.

Example:

<f:layout name="Default" />
<f:section name="Main">

   <div class="container">
      <div class="blogcontainer">
            <main class="blogcontainer-main" role="main">
               <f:render section="renderPlugin" arguments="{listType: 'blog_header'}" />
               <f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '0'}" />
               <f:render section="renderPlugin" arguments="{listType: 'blog_footer'}" />
               <f:render section="renderPlugin" arguments="{listType: 'blog_authors'}" />
               <f:render section="renderPlugin" arguments="{listType: 'blog_comments'}" />
               <f:render section="renderPlugin" arguments="{listType: 'blog_commentform'}" />
               <f:render section="renderPlugin" arguments="{listType: 'blog_relatedposts'}" />
            </main>
            <aside class="blogcontainer-sidebar">
               <f:render section="renderPlugin" arguments="{listType: 'blog_sidebar'}" />
            </aside>
      </div>
   </div>

</f:section>
<f:section name="renderPlugin">

   {blogvh:data.contentListOptions(listType: listType)}
   <f:cObject typoscriptObjectPath="tt_content.list" data="{contentObjectData}" table="tt_content"/>

</f:section>
Copied!

Comment Form

Displays the comment form for a post.

Comments

Displays the comments for a post.

Authors

Displays post authors, like name, title, avatar, social links..

Shared Plugins

Extending

AvatarProvider

The default AvatarProvider is the GravatarProvider, this means the avatar of an author is received from gravatar.com. The extension provides also an ImageProvider for local stored images.

But you can also implement your own AvatarProvider:

  1. Create a class which implements the AvatarProviderInterface.
  2. Add your provider to the TCA field “avatar_provider” to make it selectable in the author record

Note: Since v10 the proxying of gravatar loading is used which means that TYPO3 downloads the gravatar, stores it on the filesystem and delivers the image locally from typo3temp. This is privacy related and useful if users didn't give their consent for fetching gravatars client side.

FAQ

Where to report bugs or improvements?

Please visit our github project to report bugs or request improvements.

Slack channel

Visit us on slack in channel #t3g-ext-blog

Contributions

Any contributor is welcome to join our team. All you need is an github account. If you already have an account, visit the: github project.

Clone / git repo

The git repository is public and you can clone it like every git repository:

git clone https://github.com/TYPO3GmbH/blog.git
Copied!

Changelog

master

Table of contents

v10.0.0

Table of contents

Breaking Changes

Features

Breaking: Remove fontawesome dependency

Description

All Icons are now delivered by default as svgs and are rendered inline, this makes them easy to style and adjust. New templates have been introduced that only delivers the markup for the icons. This can be overwritten if you want to exchange the icons used. Default avatar size was also slightly increased to better match renderings.

Templates added:

  • Partials/General/BlogIcons.html
  • Partials/General/SocialIcons.html

Templates changed:

  • Partials/Archive/Menu.html
  • Partials/Post/Author.html
  • Partials/Post/Meta.html
  • Templates/Post/ListPostsByAuthor.html
  • Templates/Post/ListPostsByCategory.html
  • Templates/Post/ListPostsByDate.html
  • Templates/Post/ListPostsByTag.html

Change

https://github.com/TYPO3GmbH/blog/commit/4bf2ae83639399c46a35e75b2476353cb43ee96c

Breaking: Modernize metadata rendering

Description

The metadata implementation for authors, categories, tags, publish date and comments were really hard to customize. It was used in multiple places and was also reliant on font awesome for icons.

To provide a better out of the box experience the templates were completely refactored and rebuilt from the ground up. A generic set was introduced that provides a lot of flexibility without the need to touch the templates at all. This set is now replacing all current usages of the metadata.

The old metadata plugin will now throw a deprecation message and is planned to be removed with Version 11. Instead of using the old one, there are now two new plugins for post header and post footer that can be configured individually through TypoScript constants. While the post header plugin will also render the post title, the post footer will only render the metadata for now. Also, the list rendering of posts has now two dedicated sections for rendering the metadata.

Each section like authors or categories can be configured per position. If you do not want to have a section rendered at all, you can also simply disable it. If comments are disabled for a post, the comment section will not be rendered.

We are now shipping 3 different layouts you can choose from that will change the look of how the metadata will be displayed.

Simple: Is a compact version, showing icon and value in one line.

Condensed: In addition to the icon and value, there is now also a prefix visible.

Extended: Prefix and value are now in separate lines.

You will find settings for this in the constant editor. Example Configuration for the postheader position:

plugin.tx_blog.settings.meta.postheader {
   enable = 1
   modifier = simple
   elements {
      authors {
         enable = 0
      }
      categories {
         enable = 0
      }
      tags {
         enable = 1
      }
      published {
         enable = 1
         format = %d.%m.%Y
      }
      comments {
         enable = 1
      }
   }
}
Copied!

Templates added:

  • Partials/Meta/Default.html
  • Partials/Meta/Elements/Authors.html
  • Partials/Meta/Elements/Categories.html
  • Partials/Meta/Elements/Comments.html
  • Partials/Meta/Elements/Published.html
  • Partials/Meta/Elements/Tags.html
  • Partials/Meta/ListFooter.html
  • Partials/Meta/ListHeader.html
  • Partials/Meta/PostFooter.html
  • Partials/Meta/PostHeader.html
  • Partials/Meta/Rendering/Group.html
  • Partials/Meta/Rendering/Item.html
  • Partials/Meta/Rendering/Section.html
  • Templates/Post/Footer.html
  • Templates/Post/Header.html

Templates changed:

  • Partials/General/BlogIcons.html
  • Partials/List/Post.html
  • Templates/Post/Metadata.html

Change

https://github.com/TYPO3GmbH/blog/commit/28ef430ad58fa3d0ac22cd7b0a1fe6cfc33f621e

Breaking: Adapt section names to follow recommendations

Description

Section names are recommended to be uppercase as well as partials or layout names. This is a breaking change.

If you have customized templates please ensure you check the casing of your section names after applying this patch.

Migrated section names:

  • actions => Actions
  • content => Content
  • intro => Intro
  • paginator => Paginator

Change

https://github.com/TYPO3GmbH/blog/commit/3b1fad6d194f5aacb45db3f56d17e6555e559f67

Breaking: Modernize post author rendering

Description

The author rendering has been completely reworks and is now more easy to customize without overwriting the templates. Bootstrap and FontAwesome specific classes were completely removed and we now deliver some basic css to achieve better results.

Rendering is now more resilient and only renders elements if necessary. Each element can be identified through specific classes on the markup. Flexbox is used for alignment and can be used to reorder the rendering without touching the templates.

Icons for social links now are now delivered by default as svgs and are rendered inline, this makes them easy to style and adjust. A new template has been introduced that only delivers the markup for the icons. This can be overwritten if you want to exchange the icons used. Default avatar size was also slightly increased to better match renderings.

Configuration changed:

  • avatar.provider.size: 64 -> 72

Templates changed or added:

  • Partials/General/SocialIcons.html
  • Partials/Post/Author.html
  • Templates/Post/Authors.html

Change

https://github.com/TYPO3GmbH/blog/commit/a17891e087e97be8346bf65484c30480a0edc7c2

Breaking: Modernize post comment rendering

Description

The post comment rendering has been completely reworks and is now more easy to customize without overwriting the templates. Bootstrap specific classes were completely removed and we now deliver some basic css to achieve better results.

Schema.org attributes were adjusted to respect the latest recommendations for user comments. And a new option was added to make the display date format configurable through typoscript.

Configuration added:

  • comments.date.format = %B %e, %Y

Templates changed or added:

  • Partials/Comment/Comment.html
  • Templates/Comment/Comments.html

Change

https://github.com/TYPO3GmbH/blog/commit/a0b7d3188a7a07c8e10ecdb0bf34bbccd8b7f039

Breaking: Modernize widget rendering

Description

The widget rendering has been completely reworked and is now more easy to customize without overwriting the templates.

Title rendering has been moved to the main layout, you can now use the new section "Title" to set the widget title. If you have overwritten the widget templates or added new ones that makes use of the "Widgets" layout you need to add this new section.

Migration:

Old

<h3 class="widget-title">[TITLE]</h3>
Copied!

New

<f:section name="Title">[TITLE]</f:section>
Copied!

Templates changed:

  • Layouts/Widget.html
  • Templates/Post/Sidebar.html
  • Templates/Widget/Archive.html
  • Templates/Widget/Categories.html
  • Templates/Widget/Comments.html
  • Templates/Widget/Feed.html
  • Templates/Widget/RecentPosts.html
  • Templates/Widget/Tags.html

Change

https://github.com/TYPO3GmbH/blog/commit/8db7276f899aa05a5e8d556e06ca32e3d97bbab6

Breaking: Do not scale tags size by default

Description

The default size for widgets.tags.maxSize has been reduced from 200 to 100 to unset the default scaling. To reenable the tag scaling in the widget please adjust the min-/maxSize to your preferred settings.

In addition the fallback sizes have been also adjusted to reflect these default typoscript settings.

Change

https://github.com/TYPO3GmbH/blog/commit/f0507bd6af1db98f4dbbb50d400c8f36b7abf1c5

Breaking: Modernize widget content rendering

Description

The widget content rendering has been completely reworked and is now more easy to customize without overwriting the templates.

The archive template does not use the Archive/Menu partial anymore. It now has a dedicated template to not reflect template changes that are meant to be for a different rendering location.

RSS links have been removed to declutter the default view for the sidebar. Links to the RSS feeds still exist in their dedicated single views.

Templates changed:

  • Templates/Widget/Archive.html
  • Templates/Widget/Categories.html
  • Templates/Widget/Comments.html
  • Templates/Widget/Feed.html
  • Templates/Widget/RecentPosts.html
  • Templates/Widget/Tags.html

Change

https://github.com/TYPO3GmbH/blog/commit/eb8516523ee8e201612e90bbfad85ca18125b575

Breaking: Modernize pagination rendering

Description

The pagination rendering has been completely reworked and is now more easy to customize without overwriting the templates. Bootstrap specific markup has been removed.

In addition to a new template, a11y has been enhanced. We are now providing descriptive labels for the pagination entries. A set of new language labels have been introduced that you are now also able to customize to your needs.

New labels:

  • pagination.aria.label: Page navigation
  • pagination.next: Next
  • pagination.previous: Previous
  • pagination.aria.current.page: Current page, page %s
  • pagination.aria.goto.page: Go to page %s
  • pagination.aria.goto.next: Go to next page
  • pagination.aria.goto.previous: Go to previous page

Templates changed:

  • Templates/ViewHelpers/Widget/Paginate/Index.html

Change

https://github.com/TYPO3GmbH/blog/commit/de0f9d209100ee04d235a73ccec584a1a3e9ddaa

Breaking: Use TYPO3 Form Framework for comment form

Description

The required form markup can vary a lot depending on the frontend implementation of the instance. To ease the blog integration in all kinds of frontends we decided to make use of the form framework of TYPO3.

By using the form framework the blog will automatically respect the already configured forms of the typo3 instance. This will remove the necessity to provide custom form templates for the comment form of the blog extension. This will also mean, thats its no longer possible to adjust the comment form directly, since this is now generated through the form framework API.

During the migration it was noticed that the google captcha implementation is currently only compatible with v2, this was added to the label for now to avoid configuration confusions while generating API Keys at google.

Adjusted Templates:

  • Templates/Comment/Form.html

New Templates:

  • Partials/Comments/Form/Closed.html
  • Partials/Comments/Form/Disqus.html
  • Partials/Comments/Form/Local.html
  • Partials/Form/GoogleCaptcha.html

Change

https://github.com/TYPO3GmbH/blog/commit/407a2af699961f3c2726204f4a6c49e22e162a07

Breaking: Modernize list renderings

Description

To provide more flexibility, all default post list templates have been reworked. They all now share a common markup with modifiers for the different plugins.

In previous versions the templates were already listening to a variable class, but it was never set nor could could it be set without overriding the templates. All controller that render lists are now assigning a variable named type to these templates.

  • ListPostsByAuthor -> postlist--byauthor
  • ListPostsByCategory-> postlist--bycategory
  • ListPostsByDate -> postlist--bydate
  • ListPostsByTag -> postlist--bytag
  • ListRecentPosts -> postlist--recent
  • RelatedPosts --> postlist--related

Templates changed:

  • Partials/List.html
  • Partials/List/Post.html
  • Templates/Post/ListPostsByAuthor.html
  • Templates/Post/ListPostsByCategory.html
  • Templates/Post/ListPostsByDate.html
  • Templates/Post/ListPostsByTag.html

Change

https://github.com/TYPO3GmbH/blog/commit/65affe6e3ec94446c1133863836ab3c20aecbc2d

Breaking: Add configuration error note for single view plugins

Description

To prevent the usage of plugins that should only be used on post views we are now adding additional checks for those. If no post could be resolved - also means if the plugin is used on pages that do not match the Constants::DOKTYPE_BLOG_POST - the plugins will now return a new message to make the miss usage visible.

`` A possible configuration error was detected. No matching post could be obtained. Make sure that this plugin is only used on a post. ``

The following plugins will now show this message if no post could be obtained:

  • Authors
  • Footer
  • Header
  • Metadata
  • RelatedPosts

Templates added:

  • Layouts/Post.html

Templates changed:

  • Templates/Comment/Comments.html
  • Templates/Comment/Form.html
  • Templates/Post/Authors.html
  • Templates/Post/Footer.html
  • Templates/Post/Header.html
  • Templates/Post/Metadata.html
  • Templates/Post/RelatedPosts.html

Change

https://github.com/TYPO3GmbH/blog/commit/780f018b51e7db2a700f98d79c281dbad74005e9

Breaking: Drop social image wizard and prefer ext:seo

Description

We are dropping the social image wizard and rely on the editor to create custom images if necessary. The feature predated the core SEO-Initiative that now handles social images through dedicated fields. We are strongly recommending using core handling instead of the media fields.

The wizard itself had several drawbacks, it was hard to configure and was not able to handle high-resolution images.

Change

https://github.com/TYPO3GmbH/blog/commit/2d2dc30ed5c04da73f714a195ac727ccce5214d3

Feature: Make pagination configurable

Description

The behaviour of the pagination can not be confiured through typoscript constants.

Number of post that should be displayed per page (Default: 10):

plugin.tx_blog.settings.lists.pagination.itemsPerPage
Copied!

Show the pagination above the posts (Default: 0):

plugin.tx_blog.settings.lists.pagination.insertAbove
Copied!

Show the pagination below the posts (Default: 1):

plugin.tx_blog.settings.lists.pagination.insertBelow
Copied!

Maximum number of links in the pagination ((Default: 10))

plugin.tx_blog.settings.lists.pagination.maximumNumberOfLinks
Copied!

Change

https://github.com/TYPO3GmbH/blog/commit/461db542bc37e9b362941a222dd86e63a268388d

Feature: Add pagination to routes

Description

The default routes are now respecting pagination params. If you are using the default routes you dont need to change anything else.

imports:
   - { resource: "EXT:blog/Configuration/Routes/Default.yaml" }
Copied!

If you have made a custom configuration, will need to add support yourself.

Change

https://github.com/TYPO3GmbH/blog/commit/461db542bc37e9b362941a222dd86e63a268388d

Feature: Format new line to paragraph viewhelper

Description

Most of the time the format nl2br viewhelper produces unwanted and unnecessary line breaks where a paragraph is actually the wanted result. The new viewhelper converts linebreaks to actual paragraphs and cleans out empty segments. In contrary to the form html viewhelper anything else will be left untouched.

Change

https://github.com/TYPO3GmbH/blog/commit/7e4443ea3bc4059f91d7cd3d697e6962bee1e66d

Feature: Show post information in backend page header

Description

The TYPO3 page and the list module now show additional information for blog posts. Information that was previously hidden in the page settings is now visible to the editor. The new information bar is enabled by default but can be disabled in the extension settings.

  • Abstract / Description
  • Publish-Date
  • Authors
  • Featured Image
  • Tags
  • Categories

Change

https://github.com/TYPO3GmbH/blog/commit/418d97d8ecc79abc63dc7acb923d898a72528c11

Feature: Introduce blog categories

Description

The behavior of blog categories is now streamlined with categories that can be selected within the page records. Without touching or limiting normal categories. Blog categories only show other blog categories within the parent selector box, that are created in the same directory. Note: SEO content is only available for blog categories, not (anymore) for default categories.

Change

https://github.com/TYPO3GmbH/blog/commit/434a50ede932ce6e2eea374205a3a6ea34e424f2

v9.0.0

Table of contents

Important Changes

Breaking Changes

Features

Important: #EXTBLOG-70 - Introduce publish date

See https://jira.typo3.com/browse/EXTBLOG-70

Description

This patch introduce a new field "publish_date" which replace the usage of crdate.

An UpgradeWizard copy the existing crdate value into the new field.

Impact

An existing installation must run the UpdateWizard, else the output is broken.

If use your own templates, ensure to use {post.publishDate} instead of {post.crdate} in your templates.

Important: #EXTBLOG-88 - Remove $GLOBALS['TYPO3_DB']

See https://jira.typo3.com/browse/EXTBLOG-88

Description

This patch removes all calls to $GLOBALS['TYPO3_DB'] and replace it with doctrine calls.

This patch introduce also two new columns in table :sql:pages:

  • :sql:crdate_month
  • :sql:crdate_year

Both fields are used for the data aggregation of the archive sidebar widget. For existing blog posts, an UpdateWizard is in place and should be executed in the install tool.

Impact

An existing installation must run the UpdateWizard, else the output of the archive sidebar widget is broken.

Breaking: #EXTBLOG-122 - AvatarProvider behavior change

See https://jira.typo3.com/browse/EXTBLOG-122

Description

The AvatarProvider will no longer be injected into the author model. To make it possible to select the avatar provider on author record level, the behavior has changed. The GravatarProvider is still the default provider, but can be changed for each author.

An UpgradeWizard will set the GravatarProvider for all authors. if a custom AvatarProvider is in use, skip the UpgradeWizard and add the class name to the new field for all records.

Impact

Existing custom AvatarProvider must be adjusted and registered in the author TCA field "avatar_provider".

Feature: #EXTBLOG-73 - Add support for disqus.com

See https://jira.typo3.com/browse/EXTBLOG-73

Description

Support for disqus.com was added which allows threaded and interactive comments. To use disqus.com you have to enable it and set your disqus shortname (forum identifier)

plugin.tx_blog.settings.comments {
   disqus = 1
   disqus.shortname = foo-bar
}
Copied!

The TypoScript above configures / activates the disqus support and replaces the classic comment form and comment listing. The comment counts in the list are also replaced by disqus. Attention: If you have overridden the templates, check the template changes of this patch.

Feature: #EXTBLOG-75 - Moderation only of the first comment

See https://jira.typo3.com/browse/EXTBLOG-75

Description

A new value for the moderation settings allows to auto approve comments if a comment with the same email address has been approved before.

plugin.tx_blog.settings.comments.moderation = 2
Copied!

If the setting plugin.tx_blog.settings.comments.moderation is set to the value 2 a new comment with an author email address which has been used in an other approved comment will automatically set to status approved too.

Feature: #EXTBLOG-95 - Add Google Re-Captcha

See https://jira.typo3.com/browse/EXTBLOG-95

Description

The google re-captcha was added to the comment form but have to be activated and configured. The feature prevent comment spam by adding an additional captcha field to the comment form. To use the feature it is required to activate and configure the captcha field. The required keys can be received from google: https://www.google.com/recaptcha/admin#list

plugin.tx_blog.settings.google_recaptcha = 1
plugin.tx_blog.settings.google_recaptcha {
   website_key = 6LfN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
   secret_key = 6LfN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}
Copied!

Impact

You can now reduce the amount of spam comments by activate this feature.

Feature: #EXTBLOG-96 - Notification of new blog comments

See https://jira.typo3.com/browse/EXTBLOG-96

Description

A notification system was introduced to send notifications on new comments. The notification system is extensible and will be used for more notifications in the future. The first implementation handles the email notifications for new comments on posts.

plugin.tx_blog.settings.notifications {
   email {
      senderName = TYPO3 Blog
      senderMail =
   }
   T3G\AgencyPack\Blog\Notification\CommentAddedNotification {
      admin = 1
      admin.email = admin@example.com

      author = 1
   }
}
Copied!

The TypoScript above configure / activate the email notification on new comments of a blog post for admin and author.

Feature: #EXTBLOG-122 - AvatarProvider selectable on author record level

See https://jira.typo3.com/browse/EXTBLOG-122

Description

It is now possible to select the AvatarProvider on author record level. This means every author can use another AvatarProvider.

Feature: SocialImageWizard

Description

The blog add a new wizard to the media field of blog posts. The button "Open Social Image Wiazrd" opens a modal window with a wizard to create social media images. The wizard puts the title of the blog post and the author to the image. The text can be changed. To customize the layout auf the images, it is possible to override the filter and define an own skin. With PageTS-Config it is possible to define custom files:

mod.SocialImageWizard {
    dataSource {
        filter = EXT:my_template/Resources/Public/JavaScript/SocialImageWizard/Filter.json
        skin = EXT:my_template/Resources/Public/JavaScript/SocialImageWizard/Skin.json
    }
}
Copied!

The information from this json files will be automatic applied to the fabric configuration.

Impact

You can now create social images within the TYPO3 backend, download and/or store the images in the blog post.

Feature: #EXTBLOG-35 - Set storage pids

See https://jira.typo3.com/browse/EXTBLOG-35

Description

Added possibility to set the storage pids for blog posts related plugins.

# This will set pids 1, 4 and 5 as storage pid for blog posts
# this will used for all plugins in the whole tree
plugin.tx_blog.settings.storagePid = 1,4,5
Copied!

Impact

You can now set a storage pid where the blog posts are saved. This can be done by TypoScript or plugin setting.

Feature: #EXTBLOG-60 - Deprecate CommentRepository::findLatest()

See https://jira.typo3.com/browse/EXTBLOG-60

Description

The method CommentRepository::findLatest() has been marked as deprecated.

Impact

Calling the deprecated methods will trigger a deprecation log entry.

Migration

Use the new method CommentRepository::findActiveComments()

Feature: #EXTBLOG-68 - Add limit setting in recent posts widget plug-in

See https://jira.typo3.com/browse/EXTBLOG-68

Description

Introduction of a new setting widget.recentposts.limit for a maximum of displayed posts in the recent posts widget. Default value is 5. There is no limit if the setting is not present or set to 0.

Feature: #EXTBLOG-53 - Add SPAM protection to comment form

Description

The comment form use a honeypot field as spam protection. This means a new field is added to the comment form which must not be filled out. The field is set to hidden by JavaScript and only bots will fill out this field.

Impact

The template of the comment form has been changed. Please add the the following code to your custom template if you not use the templates delivered by the extension:

<div class="form-group js-hp">
   <f:form.textfield id="hp" property="hp" class="form-control" additionalAttributes="{autocomplete: 'off'}" />
   <script type="text/javascript">
       var hp = document.getElementsByClassName('js-hp');
       for (var i=0; i<hp.length; i++) {
           hp[i].style = 'display: none;';
           hp[i].value = '';
       }
   </script>
</div>
Copied!

Feature: #EXTBLOG-57 - Add author relations

See https://jira.typo3.com/browse/EXTBLOG-57

See https://jira.typo3.com/browse/TE-21

Description

Blog post can now contains one or more authors. In the frontend a box with the author profile can be rendered by a new authors plugin. It is alos possible to link to an overview of all posts by this author.

Impact

The old "author" field can still be used, but should be replaced by the new author record.

See See Deprecation: #EXTBLOG-57 - Add author relations

Feature: #EXTBLOG-62 - Introduce maximumDisplayedItems setting in recent posts list plug-in

See https://jira.typo3.com/browse/EXTBLOG-62

Description

The lists plug-in will now use the setting lists.posts.maximumDisplayedItems for recent posts to limit the number of recent items to be displayed.

Default value is 0, which means there is no limit (there is no impact on previous behaviour).

Impact

The partial file used for the list has changed (EXT:blog/Resources/Private/Partials/List.html).

If you did override this partial file in your own extension, you may need to apply the same modification in your own file(s).

Migrating to v10.0.0

Templates Sections

Section, partial and layout names are recommended to be uppercase and are now renamed to follow best practices. If you have customized templates please ensure you check the casing of your section names.

  • actions => Actions
  • content => Content
  • intro => Intro
  • paginator => Paginator

Migration Example:

Old

<f:render section="content" arguments="{_all}" />
Copied!

New

<f:render section="Content" arguments="{_all}" />
Copied!

If you neglect to correct this situation before executing the upgrade on the blog extension, you will see the follwing error message:

Oops, an error occurred! Section "content" does not exist.

Social share options dropped

The social share links are rarely used and no implementation is provided by the blog extension itself. The option is removed without replacement. Of course you can still use an extension like the Shariff implementation for TYPO3 in your custom templates.

Respect PageTsConfig limitation for authors

From now on the PAGE_TSCONFIG_ID is respected for authors in the backend. If you have not configured a storage pid for this records before please adjust your configuration.

TsConfig Example:

TCEFORM.pages.authors.PAGE_TSCONFIG_ID = 59
Copied!

Fontawesome dependency removed

All Icons are now delivered by default as svgs and are rendered inline, this makes them easy to style and adjust. New templates have been introduced that only delivers the markup for the icons. This can be overwritten if you want to exchange the icons used. Default avatar size was also slightly increased to better match renderings.

Templates added:

  • Partials/General/BlogIcons.html
  • Partials/General/SocialIcons.html

Templates changed:

  • Partials/Archive/Menu.html
  • Partials/Post/Author.html
  • Partials/Post/Meta.html
  • Templates/Post/ListPostsByAuthor.html
  • Templates/Post/ListPostsByCategory.html
  • Templates/Post/ListPostsByDate.html
  • Templates/Post/ListPostsByTag.htm

Introduce blog categories

The behavior of blog categories is now streamlined with categories that can be selected within the page records. Without touching or limiting normal categories. Blog categories only show other blog categories within the parent selector box, that are created in the same directory. Note: SEO content is only available for blog categories, not (anymore) for default categories.

MetaService obsolete

The meta service is obsolete since TYPO3 v9 and is replaced through the usage of the MetaTag-API from core. To migrate to the new API you just need to remove all usages of the MetaService.

New metadata rendering (modernized)

The metadata implementation for authors, categories, tags, publish date and comments were really hard to customize. It was used in multiple places and was also reliant on font awesome for icons. To provide a better out of the box experience the templates were completely refactored and rebuilt from the ground up. A generic set was introduced that provides a lot of flexibility without the need to touch the templates at all. This set is now replacing all current usages of the metadata. The old metadata plugin will now throw a deprecation message and is planned to be removed with Version 11. Instead of using the old one, there are now two new plugins for post header and post footer that can be configured individually through TypoScript constants.

While the post header plugin will also render the post title, the post footer will only render the metadata for now. Also, the list rendering of posts has now two dedicated sections for rendering the metadata.

Each section like authors or categories can be configured per position. If you do not want to have a section rendered at all, you can also simply disable it. If comments are disabled for a post, the comment section will not be rendered.

We are now shipping 3 different layouts you can choose from that will change the look of how the metadata will be displayed.

Simple: Is a compact version, showing icon and value in one line.

Condensed: In addition to the icon and value, there is now also a prefix visible.

Extended: Prefix and value are now in separate lines. You will find settings for this in the constant editor.

Example Configuration for the postheader position:

plugin.tx_blog.settings.meta.postheader {
   enable = 1
   modifier = simple
   elements {
      authors {
         enable = 0
      }
      categories {
         enable = 0
      }
      tags {
         enable = 1
      }
      published {
         enable = 1
         format = %d.%m.%Y
      }
      comments {
         enable = 1
      }
   }
}
Copied!

Templates added:

  • Partials/Meta/Default.html
  • Partials/Meta/Elements/Authors.html
  • Partials/Meta/Elements/Categories.html
  • Partials/Meta/Elements/Comments.html
  • Partials/Meta/Elements/Published.html
  • Partials/Meta/Elements/Tags.html
  • Partials/Meta/ListFooter.html
  • Partials/Meta/ListHeader.html
  • Partials/Meta/PostFooter.html
  • Partials/Meta/PostHeader.html
  • Partials/Meta/Rendering/Group.html
  • Partials/Meta/Rendering/Item.html
  • Partials/Meta/Rendering/Section.html
  • Templates/Post/Footer.html
  • Templates/Post/Header.html

Templates changed:

  • Partials/General/BlogIcons.html
  • Partials/List/Post.html
  • Templates/Post/Metadata.html

Limit authors to default language

We are now limiting the selection of authors to the default langauge, since translations are fetched automaticly, if available

Limit tags to configured storage pid

Listing of tags is now restricted to the configured storage pid. If you want to use tags from additional storages please adjust your configuration accordingly.

TypoScript Constants Example:

plugin.tx_blog.settings.storagePid = 0,666
Copied!

Social image wizard dropped (prefer ext:seo)

We are dropping the social image wizard and rely on the editor to create custom images if necessary. The feature predated the core SEO-Initiative that now handles social images through dedicated fields. We are strongly recommending using core handling instead of the media fields.

The wizard itself had several drawbacks, it was hard to configure and was not able to handle high-resolution images.

New list rendering (modernized)

To provide more flexibility, all default post list templates have been reworked. They all now share a common markup with modifiers for the different plugins.

In previous versions the templates were already listening to a variable class, but it was never set nor could could it be set without overriding the templates. All controller that render lists are now assigning a variable named type to these templates.

  • ListPostsByAuthor -> postlist--byauthor
  • ListPostsByCategory-> postlist--bycategory
  • ListPostsByDate -> postlist--bydate
  • ListPostsByTag -> postlist--bytag
  • ListRecentPosts -> postlist--recent
  • RelatedPosts --> postlist--related

Templates changed:

  • Partials/List.html
  • Partials/List/Post.html
  • Templates/Post/ListPostsByAuthor.html
  • Templates/Post/ListPostsByCategory.html
  • Templates/Post/ListPostsByDate.html
  • Templates/Post/ListPostsByTag.html

New widget rendering (modernized)

The widget rendering has been completely reworked and is now more easy to customize without overwriting the templates. Title rendering has been moved to the main layout, you can now use the new section "Title" to set the widget title. If you have overwritten the widget templates or added new ones that makes use of the "Widgets" layout you need to add this new section.

Migration:

remove:

<h3 class="widget-title">[TITLE]</h3>
Copied!

add:

<f:section name="Title">[TITLE]</f:section>
Copied!

Templates changed:

  • Layouts/Widget.html
  • Templates/Post/Sidebar.html
  • Templates/Widget/Archive.html
  • Templates/Widget/Categories.html
  • Templates/Widget/Comments.html
  • Templates/Widget/Feed.html
  • Templates/Widget/RecentPosts.html
  • Templates/Widget/Tags.html

New widget content rendering (modernized)

The widget content rendering has been completely reworked and is now more easy to customize without overwriting the templates. The archive template does not use the Archive/Menu partial anymore. It now has a dedicated template to not reflect template changes that are meant to be for a different rendering location.

RSS links have been removed to declutter the default view for the sidebar. Links to the RSS feeds still exist in their dedicated single views.

Templates changed:

  • Templates/Widget/Archive.html
  • Templates/Widget/Categories.html
  • Templates/Widget/Comments.html
  • Templates/Widget/Feed.html
  • Templates/Widget/RecentPosts.html
  • Templates/Widget/Tags.html

New pagination rendering (modernized)

The pagination rendering has been completely reworked and is now more easy to customize without overwriting the templates. Bootstrap specific markup has been removed. In addition to a new template, a11y has been enhanced. We are now providing descriptive labels for the pagination entries. A set of new language labels have been introduced that you are now also able to customize to your needs.

New labels:

  • pagination.aria.label: Page navigation
  • pagination.next: Next
  • pagination.previous: Previous
  • pagination.aria.current.page: Current page, page %s
  • pagination.aria.goto.page: Go to page %s
  • pagination.aria.goto.next: Go to next page
  • pagination.aria.goto.previous: Go to previous page

Templates changed:

  • Templates/ViewHelpers/Widget/Paginate/Index.html

TYPO3 Form Framework for comment form now used

The required form markup can vary a lot depending on the frontend implementation of the instance. To ease the blog integration in all kinds of frontends we decided to make use of the form framework of TYPO3. By using the form framework the blog will automatically respect the already configured forms of the typo3 instance. This will remove the necessity to provide custom form templates for the comment form of the blog extension. This will also mean, thats its no longer possible to adjust the comment form directly, since this is now generated through the form framework API.

During the migration it was noticed that the google captcha implementation is currently only compatible with v2, this was added to the label for now to avoid configuration confusions while generating API Keys at google.

Adjusted Templates:

  • Templates/Comment/Form.html

New Templates:

  • Partials/Comments/Form/Closed.html
  • Partials/Comments/Form/Disqus.html
  • Partials/Comments/Form/Local.html
  • Partials/Form/GoogleCaptcha.html

Configuration error note for single view plugins added

To prevent the usage of plugins that should only be used on post views we are now adding additional checks for those. If no post could be resolved - also means if the plugin is used on pages that do not match the Constants::DOKTYPE_BLOG_POST - the plugins will now return a new message to make the miss usage visible.

A possible configuration error was detected. No matching post could be obtained. Make sure that this plugin is only used on a post.

The following plugins will now show this message if no post could be obtained:

  • Authors
  • Footer
  • Header
  • Metadata
  • RelatedPosts

Templates added:

  • Layouts/Post.html

Templates changed:

  • Templates/Comment/Comments.html
  • Templates/Comment/Form.html
  • Templates/Post/Authors.html
  • Templates/Post/Footer.html
  • Templates/Post/Header.html
  • Templates/Post/Metadata.html
  • Templates/Post/RelatedPosts.html

New post author rendering (modernized)

The author rendering has been completely reworks and is now more easy to customize without overwriting the templates. Bootstrap and FontAwesome specific classes were completely removed and we now deliver some basic css to achieve better results.

Rendering is now more resilient and only renders elements if necessary. Each element can be identified through specific classes on the markup. Flexbox is used for alignment and can be used to reorder the rendering without touching the templates. Icons for social links now are now delivered by default as svgs and are rendered inline, this makes them easy to style and adjust. A new template has been introduced that only delivers the markup for the icons. This can be overwritten if you want to exchange the icons used. Default avatar size was also slightly increased to better match renderings.

Configuration changed:

  • avatar.provider.size: 64 -> 72

Templates changed or added:

  • Partials/General/SocialIcons.html
  • Partials/Post/Author.html
  • Templates/Post/Authors.html

New post comment rendering (modernized)

The post comment rendering has been completely reworks and is now more easy to customize without overwriting the templates. Bootstrap specific classes were completely removed and we now deliver some basic css to achieve better results.

Schema.org attributes were adjusted to respect the latest recommendations for user comments. And a new option was added to make the display date format configurable through typoscript.

Configuration added:

  • comments.date.format = %B %e, %Y

Templates changed or added:

  • Partials/Comment/Comment.html
  • Templates/Comment/Comments.html

Reduced tags size by default

The default size for widgets.tags.maxSize has been reduced from 200 to 100 to unset the default scaling. To reenable the tag scaling inthe widget please adjust the min-/maxSize to your preferred settings. In addition the fallback sizes have been also adjusted to reflect these default typoscript settings.

Exclude fields dropped

All backend users now are NOT prevented from editing the field unless they are members of a backend user group with this field added as an “Allowed Excludefield” (or “admin” user).