PHPackages                             matfish/craft-blogify - 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. [Templating &amp; Views](/categories/templating)
4. /
5. matfish/craft-blogify

ActiveCraft-plugin[Templating &amp; Views](/categories/templating)

matfish/craft-blogify
=====================

A plug-and-play blog for CraftCMS

3.2.0(1y ago)52513proprietaryHTML

Since Nov 20Pushed 1y ago1 watchersCompare

[ Source](https://github.com/matfish2/craft-blogify)[ Packagist](https://packagist.org/packages/matfish/craft-blogify)[ RSS](/packages/matfish-craft-blogify/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (25)Used By (0)

Blogify
=======

[](#blogify)

Blogify offers a single-click solution to the task of building a blog with CraftCMS.

Once installed the plugin creates the data structure and templates, and allows for seeding of dummy posts, so you can start customizing your blog right away. Blogify comes with a bunch of Twig enhancements that make the code in your templates declarative and simple.

#### Click [here](https://www.craftcmsplugins.com/blog/index) for a full demo of the result with zero configuration.

[](#click-here-for-a-full-demo-of-the-result-with-zero-configuration)

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

[](#installation)

1. Include the package:

```
composer require matfish/craft-blogify

```

2. Install the plugin:

```
php craft plugin/install blogify

```

3. (Optional but recommended for development) Seed some posts:

```
php craft blogify/seed

```

The default is 10 posts. You can pass a `--count` option to seed as many as you like.

That's all! Now go to `{yoursite.dev}/blog/index` and see the blog in action.

Spec
----

[](#spec)

Blogify adds the following data structures to Craft:

1. A "Blog Listing" (or index) Single.
2. A "Blog" Channel
3. An "Author Page" Single (All author posts)
4. A "Blog Categories" category group and a corresponding category template to display all posts related to a given category.
5. A "Blog Tags" tag group
6. A "Tag Page" single (All posts with a given tag)
7. A "Blog Assets" assets volume.
8. A "Blog Thumbnail" transform.

Each Post in the Blog channel has the following fields:

1. Title
2. Image
3. Excerpt
4. Content (a Redactor field)
5. Categories
6. Tags

Twig Enhancements
-----------------

[](#twig-enhancements)

the initial theme demonstrates usage of all the enhancements below.

### Global variables

[](#global-variables)

Blogify exposes a global `blogify` variable with the following properties:

- `categories` All blog categories
- `usedCategories` All blog categories that have at least one post associated with them
- `tags` All blog tags

### Global methods

[](#global-methods)

- `blogifyRecentPosts` gets recent posts. E.g `blogifyRecentPosts().limit(4).all()`
- `blogifySearch` searches the blog (title and content fields). E.g `blogifySearch('foo')`
- `blogifyPopularPosts` get most popular posts (see [below](#record-post-views)).

In addition, entities contain contextual methods, as follows:

#### Entry (Post)

[](#entry-post)

- `categories` get post categories
- `relatedPosts` get other posts with one of the given post's categories
- `tags` get post tags
- `next` get next post
- `prev` get previous post
- `image` get post image
- `thumbnail` get post thumbnail (defined under Settings-&gt;Assets-&gt;Image Transforms-&gt;Blog Thumbnail)
- `excerpt` get post excerpt
- `content` get post content (supports Matrix field rendering. See below)

#### Category

[](#category)

- `posts` get posts related to the given category

#### Tag

[](#tag)

- `posts` get posts that have the given tag

#### User (Author)

[](#user-author)

- `posts` get author posts

Note: Unless the method is getting a single entity (e.g `entry.image`), Blogify will return a query object, which can be used to further augment the query, e.g `author.posts.limit(3).all()`.

Using Matrix field for the post content
---------------------------------------

[](#using-matrix-field-for-the-post-content)

By default the provided Post Content field is a Redactor field. If you wish to use the powerful Matrix field instead, we've got your back:

- Go to Settings-&gt;Fields-&gt;Post Content
- Change field type to Matrix and build your blocks.
- Add a `_matrix` folder under `blogify/post`
- Add a template for each block type, named after the handle.

Each partial will expose a `block` variable containing all the fields. E.g if your block handle is `postHeading` and it has a `heading` field, create a `blogify/post/_matrix/postHeading.twig` file:

```
    {{block.heading}}
```

- Render the post content:

```

    {{ entry.content | raw }}

```

Note that you can change the templates folder path via the plugin's config. Create a `config/blogify.php` file:

```
return [
     // matrix templates path relative to the templates folder
    'matrixTemplatesPath'=>'my/matrix/path'
];
```

Record post views
-----------------

[](#record-post-views)

Blogify allows you track the popularity of your posts, so you can sort by popularity and display number of views. This option is disabled by default. You can enable it with a single command:

```
php craft blogify/views/record

```

This will add a read-only Post Views field to your posts (right after the title). Now, every time someone views the post Blogify will automatically increment the number of views, while excluding drafts and previews.

### Excluding IPs

[](#excluding-ips)

Since you probably don't want to record your own views you can exclude certain IPs from triggering the event by adding the following to `config/blogify.php`:

```
return [
   'postViewsExcludeIps'=>[
       '192.168.10.1'
  ]
];
```

Now you can sort by popularity (in descending order of course) in your templates:

```
blogifyPopularPosts().limit(5).all()

```

To exclude posts with no views from the query pass `true` to the method call:

```
blogifyPopularPosts(true).limit(5).all()

```

Finally, to display the number of views in your template simply call:

```
{{entry.views}}

```

### Multiple sites

[](#multiple-sites)

When installed Blogify will register all Category Groups and Sections to all existing sites, with the same URL (relative to site root URL) and same templates.

If you need to vary template content between sites you can use:

1. [Static translations](https://craftcms.com/docs/4.x/sites.html#static-message-translations)
2. [If statements](https://craftcms.com/docs/4.x/sites.html#language)
3. [Polymorphism](https://craftcms.com/docs/4.x/sites.html#language)

In case you still need to duplicate an entire template, you can duplicate it to your site folder, *while keeping the same folder structure* \*\* (e.g `templates/de/blogify/listing/_entry.twig`) This will prompt Craft to load this template as an override, when accessing the site with a handle of `de`. See:

\*\* Note that you can also duplicate it to a path that doesn't retain the same folder structure, in which case you'll need to define a new template path for the relevant Section/Category Group in Craft's back-end.

Modification
------------

[](#modification)

Blogify is designed as a solid starting point for a blog. You can freely extend and modify the data structures and templates, while keeping the following in mind:

- Don't change the handles on any of the entities.
- Don't delete any data structures.
- Uninstalling the plugin will remove all data including the `blogify` templates folder.

License
-------

[](#license)

You can try Blogify in a development environment for as long as you like. Once your site goes live, you are required to purchase a license for the plugin. License is purchasable through the [Craft Plugin Store](https://plugins.craftcms.com/blogify).

For more information, see Craft's [Commercial Plugin Licensing](https://craftcms.com/docs/3.x/plugins.html#commercial-plugin-licensing).

Requirements
------------

[](#requirements)

This plugin requires Craft CMS 3.7.0 or later.

Issues and Discussions Guidelines
---------------------------------

[](#issues-and-discussions-guidelines)

*Please only open a new issue for bug reports.*For feature requests and questions open a new [Discussion](https://github.com/matfish2/craft-blogify/discussions) instead. When discussing a feature request please precede \[FR\] to the title.

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance42

Moderate activity, may be stable

Popularity20

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 96.1% 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 ~52 days

Recently: every ~1 days

Total

23

Last Release

477d ago

Major Versions

1.0.8 → 2.02022-06-10

1.0.9 → 2.0.22022-07-06

1.x-dev → 2.0.32022-07-10

2.x-dev → 3.0.02024-04-13

### Community

Maintainers

![](https://www.gravatar.com/avatar/ef7c699ed71e1fdeb389a1aba23f26d02a0a9b7554dd9b8375b739c0357f7339?d=identicon)[matfish2](/maintainers/matfish2)

---

Top Contributors

[![matfish3](https://avatars.githubusercontent.com/u/58558031?v=4)](https://github.com/matfish3 "matfish3 (49 commits)")[![leevigraham](https://avatars.githubusercontent.com/u/25124?v=4)](https://github.com/leevigraham "leevigraham (1 commits)")[![matfish2](https://avatars.githubusercontent.com/u/1510460?v=4)](https://github.com/matfish2 "matfish2 (1 commits)")

---

Tags

bloggingcraft-plugincraftcmstwigblogCraft

### Embed Badge

![Health badge](/badges/matfish-craft-blogify/health.svg)

```
[![Health](https://phpackages.com/badges/matfish-craft-blogify/health.svg)](https://phpackages.com/packages/matfish-craft-blogify)
```

###  Alternatives

[lewisjenkins/craft-dynamic-fields

Populate Craft fields with dynamic data using the power of Twig.

14667.0k](/packages/lewisjenkins-craft-dynamic-fields)[mmikkel/retcon

Powerful Twig filters for mutating and querying HTML

79183.1k11](/packages/mmikkel-retcon)[nystudio107/craft-cookies

A simple plugin for setting and getting cookies from within Craft CMS templates.

37490.1k6](/packages/nystudio107-craft-cookies)[nystudio107/craft-minify

A simple plugin that allows you to minify blocks of HTML, CSS, and JS inline in Craft CMS templates.

37461.2k29](/packages/nystudio107-craft-minify)[nystudio107/craft-autocomplete

Provides Twig template IDE autocomplete of Craft CMS &amp; plugin variables

44204.4k13](/packages/nystudio107-craft-autocomplete)[verbb/footnotes

Adds a footnotes feature to CKEditor fields and Twig templates.

213.3k](/packages/verbb-footnotes)

PHPackages © 2026

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