PHPackages                             shel/blog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. shel/blog

ActiveNeos-plugin[Utility &amp; Helpers](/categories/utility)

shel/blog
=========

A blog package for Neos CMS based on fusion AFX. Also supports atom feeds and AMP.

5.6.0(8mo ago)125.2k13[2 issues](https://github.com/Sebobo/Shel.Blog/issues)[1 PRs](https://github.com/Sebobo/Shel.Blog/pulls)MITPHP

Since Dec 30Pushed 8mo ago4 watchersCompare

[ Source](https://github.com/Sebobo/Shel.Blog)[ Packagist](https://packagist.org/packages/shel/blog)[ RSS](/packages/shel-blog/feed)WikiDiscussions master Synced today

READMEChangelog (7)Dependencies (2)Versions (44)Used By (0)

A simple configurable blog/news plugin for Neos CMS with AMP support
====================================================================

[](#a-simple-configurable-blognews-plugin-for-neos-cms-with-amp-support)

[![Latest Stable Version](https://camo.githubusercontent.com/ae06a47a36d3263d8747d6e94af1c72a6724f7bec591e9871faa11defebb387c/68747470733a2f2f706f7365722e707567782e6f72672f7368656c2f626c6f672f762f737461626c65)](https://packagist.org/packages/shel/blog)[![Total Downloads](https://camo.githubusercontent.com/8faa7574b9e8384155088ce87254d86e61f744c74ab5ece3ed4efa2bf681ba15/68747470733a2f2f706f7365722e707567782e6f72672f7368656c2f626c6f672f646f776e6c6f616473)](https://packagist.org/packages/shel/blog)[![License](https://camo.githubusercontent.com/5e2960c2dadbcf41c733abc23e57d675a6fb06b368b53c5c4cfe0bb9bf666828/68747470733a2f2f706f7365722e707567782e6f72672f7368656c2f626c6f672f6c6963656e7365)](https://packagist.org/packages/shel/blog)

I developed this blog package for several projects including my own [blog](http://www.mind-the-seb.de).

Built with Fusion &amp; AFX &amp; YAML
--------------------------------------

[](#built-with-fusion--afx--yaml)

Almost all features of this blog package are based on Fusion, AFX and YAML configurations. So it's very easy to extend and adapt to your needs.

Features
--------

[](#features)

- Each blog feed has its own Atom feed
- Content element showing latest blog entries
- Blog articles with their own template and navigation elements
- Categories to group articles, optionally with their own feeds
- Social buttons for Twitter and Facebook which can be extended
- Easily customizeable
- AMP support for individual blog articles

### Coming up

[](#coming-up)

- Author pages which can be referenced in articles (optional)
- Make AMP styles more customizable and integrate  by default

Installation
------------

[](#installation)

Add the dependency to your site package like this

```
composer require --no-update shel/blog

```

And then run `composer update` in your project's root folder.

You can overwrite and modify the different content elements to your needs:

- `Shel.Blog:Document.Article` - A single blog post
- `Shel.Blog:Document.Feed` - The container for blog entries which also works as archive and Atom feed
- `Shel.Blog:Document.Category` - A category (or tag) which can be referenced by articles and also renders a feed
- `Shel.Blog:Content.LatestArticles` - Renders a sorted list of blog posts, for example on your homepage
- `Shel.Blog:Constraint.Article` - Mixin to allow content types to be added to articles

### Upgrade from version 2.x or 3.x

[](#upgrade-from-version-2x-or-3x)

A lot of prototypes and documents were refactored and therefore this upgrade will break your site. The new structure tries to use the most recent best practices for Neos CMS and allows you to easily override many parts of the rendering.

But there is a node migration to update your nodes. Run it like this after updating:

```
./flow node:migrate 20190214140619

```

Blog feeds and categories also received a new content area for introduction texts (SEO!). Add them by running this:

```
./flow node:repair

```

But if you did an override on any prototype in your own package you should adapt the naming and structure.

The integrated support for `flattr` and `disqus` was removed. If you still need it, please add it yourself.

There is a new constraint mixin to determine which kind of elements are allowed in a blog article. This change might change the behavior in your site, so you should add `'Shel.Blog:Constraint.Article': true` as supertype to the content types you want to have available.

Setup a new feed
----------------

[](#setup-a-new-feed)

After installation you have a new page type called `Blog feed`. Add it to your site - for example in the site root - and call it `Feed`. Afterwards you can configure a few things in the inspector.

- `Entries to show` How many items should be shown at most.
- `Author` The author which will be included in the xml.
- `Description for the feed` A short description which will be included in the xml.

### Setup page rendering

[](#setup-page-rendering)

By default the `Feed`, `Category` and `Article` document types will inherit their rendering from `Neos.Neos:Page`. So if you extended this prototype in your own site package, the rendering should work fine as this package will override the `Neos.Neos:PrimaryContent` prototype which most projects use to render the main content area. This way the blog will render its own content where you usually have your main content.

If not you might get an error like `No template path set. ...`. Then you have to tell the package which document prototype it should use as basis.

For the `Neos.Demo` site package it would look like this:

```
prototype(Shel.Blog:Document.GenericBlogPage) < prototype(Neos.NodeTypes:Page)

```

This way, the feed, category and article document types will know how to render. Of course you can also give each of their prototypes a different parent prototype instead of the `GenericBlogPage`.

That would look like this:

```
prototype(Shel.Blog:Document.Feed) < prototype(My.Package:MyFeedPage)
prototype(Shel.Blog:Document.Article) < prototype(My.Package:MyArticlePage)

```

Changing the parent prototype of `Feed` will also change the one for `Category` as it inherits from `Feed`.

Remember that you need to render the `Neos.Neos:PrimaryContent` object somewhere to get output.

### Configure allowed content types

[](#configure-allowed-content-types)

By default the blog article allows most elements defined in `Neos.NodeTypes`. To add your own types, add `'Shel.Blog:Constraint.Article': true` as supertype to them.

The reason for this is that there might come new elements via plugins that don't work well with the blog in standard or AMP mode.

Therefore you should make sure that those elements work well there.

### HTML content

[](#html-content)

The HTML version will use your default page template and replace the `mainContent` area with your blog articles. All fields are inline editable except the `publication date` which makes it easy to modify your articles pretty fast!

Each blog article includes a paging widget which allows you to navigate to the next/previous blog articles.

### Atom/XML feed

[](#atomxml-feed)

The Atom/XML version will use its own rendering and most of the time you don't need to change anything there. It will contain the full version of your articles including HTML. So images and everything. All active pages of type `Shel.Blog:Document.Feed` will automatically be linked in the HTML header as meta tags.

Category pages can work the same but their feed link is hidden by default. You can enable this by unchecking `Hide feed link` in the categories inspector options.

### AMP rendering

[](#amp-rendering)

As AMP itself is still work in progress, this feature is also work in progress. This package tries to provide good defaults you can start with and customize to your needs. As everything is written in Fusion, you can override and change anything you want.

After you publish some blog articles with the help of this package, Google should be able to find the AMP versions of each article after a few hours or days and provide the AMP version in its search results.

Each blog article automatically includes a link in the `head` to its AMP version. The package includes a default CSS for the AMP version and renders the primary content area.

If you have additional custom content elements in a blog article like videos and other stuff you might need to provide processors to make them compatible with AMP. See the `replaceImgTags` image processor as example.

Please test the AMP version every time you add new features to your blog pages! Also be sure to check Google Search Console on your live site as it will inform you of errors.

Pull request with improvements to this feature are very welcome!

#### Customizing

[](#customizing)

The site is rendered as an array in the `Shel.Blog:Layout.AmpPage` object. It contains a content object in its body section which is an array you can override and extend with additional content. By default it provides basic layout components such as header, breadcrumb, blog content and pagination.

In the stylesheets section a basic CSS file provided by this package is added inline; see the `Shel.Blog:Component.AmpStyles` object. Replace it or add another stylesheet to modify the output. Remember that the styles need to be inline for AMP.

Don't add additional JavaScript as this is currently not supported with AMP.

Check out [https://www.ampproject.org/docs/get\_started/create](https://www.ampproject.org/docs/get_started/create) to learn more on how to get started with AMP.

#### Debugging

[](#debugging)

Verify the output of your blog with the developer mode for AMP by loading the AMP version and adding `#development=1` to the url. Open the developer tools of your browser and AMP will show you its verification result.

Other plugins and packages you might have installed might break AMP compatibility! Please validate the rendered code by using the browser validator or any other method described [here](https://www.ampproject.org/docs/fundamentals/validate).

Before you create an issue for the AMP mode please run the validation and add the result to the issue.

#### Turning off AMP rendering mode

[](#turning-off-amp-rendering-mode)

You can turn this off with this fusion script:

```
root.shelBlogArticleAmp >
prototype(Neos.Neos:Page).head.ampLink >

```

#### Routing

[](#routing)

The routes for the sitemap and pagination are auto-included in the `Settings.yaml`.

You found a problem or have ideas for improvements?
---------------------------------------------------

[](#you-found-a-problem-or-have-ideas-for-improvements)

Fork this project at GitHub and create a pull request :) If you are not a developer, create an issue and tell me about your thoughts!

###  Health Score

49

—

FairBetter than 94% of packages

Maintenance56

Moderate activity, may be stable

Popularity31

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity76

Established project with proven stability

 Bus Factor1

Top contributor holds 97.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~87 days

Recently: every ~430 days

Total

42

Last Release

263d ago

Major Versions

2.x-dev → 3.1.02018-04-26

3.1.0 → 4.02018-05-03

3.1.1 → 4.0.12018-05-09

3.x-dev → 4.x-dev2018-12-13

4.0.2 → 5.0.0-beta2019-02-18

### Community

Maintainers

![](https://www.gravatar.com/avatar/5c9f106db319e8698dcb4aedfe8034f0442d379ebbd78fcd67b884999b2236f1?d=identicon)[Sebobo](/maintainers/Sebobo)

---

Top Contributors

[![Sebobo](https://avatars.githubusercontent.com/u/596967?v=4)](https://github.com/Sebobo "Sebobo (228 commits)")[![daniellienert](https://avatars.githubusercontent.com/u/642226?v=4)](https://github.com/daniellienert "daniellienert (2 commits)")[![abteilung](https://avatars.githubusercontent.com/u/906305?v=4)](https://github.com/abteilung "abteilung (1 commits)")[![egobude](https://avatars.githubusercontent.com/u/397376?v=4)](https://github.com/egobude "egobude (1 commits)")[![lorenzulrich](https://avatars.githubusercontent.com/u/1816023?v=4)](https://github.com/lorenzulrich "lorenzulrich (1 commits)")[![markusguenther](https://avatars.githubusercontent.com/u/1014126?v=4)](https://github.com/markusguenther "markusguenther (1 commits)")

---

Tags

blogginghacktoberfestneos-cmsatomrssampblogNeos CMS

### Embed Badge

![Health badge](/badges/shel-blog/health.svg)

```
[![Health](https://phpackages.com/badges/shel-blog/health.svg)](https://phpackages.com/packages/shel-blog)
```

###  Alternatives

[dg/rss-php

RSS &amp; Atom Feeds for PHP is a very small and easy-to-use library for consuming an RSS and Atom feed

4811.3M12](/packages/dg-rss-php)[neos/neos-base-distribution

Neos Base Distribution

4366.0k](/packages/neos-neos-base-distribution)[rumenx/php-feed

Framework-agnostic PHP Feed generator for Laravel, Symfony, and more.

3665.1k](/packages/rumenx-php-feed)[neos/demo

Site package for the Neos Demo Site

18188.3k10](/packages/neos-demo)[openpsa/universalfeedcreator

RSS and Atom feed generator by Kai Blankenhorn

3596.4k2](/packages/openpsa-universalfeedcreator)[yoast/yoast-seo-for-neos

Yoast SEO for Neos CMS

24172.2k](/packages/yoast-yoast-seo-for-neos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
