PHPackages                             in2code/in2frequently - 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. in2code/in2frequently

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

in2code/in2frequently
=====================

Recurring visibility windows for record elements

2.1.0(1mo ago)114↓33.3%GPL-2.0-or-laterPHPPHP ^8.2

Since Mar 11Pushed 1mo agoCompare

[ Source](https://github.com/in2code-de/in2frequently)[ Packagist](https://packagist.org/packages/in2code/in2frequently)[ Docs](https://www.in2code.de)[ RSS](/packages/in2code-in2frequently/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (21)Versions (5)Used By (0)

in2frequently - Recurring visibility windows for content elements in TYPO3
==========================================================================

[](#in2frequently---recurring-visibility-windows-for-content-elements-in-typo3)

Introduction
------------

[](#introduction)

This TYPO3 extension adds recurring, time-based visibility windows to content elements. Unlike TYPO3's built-in start/endtime (which is a one-time date range), in2frequently uses **cron-style expressions** to define repeating visibility patterns — for example: *show this content element every month from the 1st to the 15th*, or *show it every Friday afternoon until Monday morning*.

The extension is built on natural language cron expressions and integrates transparently into the existing TYPO3 access palette in the backend.

Example integration in backend [![screenshot_backend_ttcontent.png](Documentation/Images/screenshot_backend_ttcontent.png)](Documentation/Images/screenshot_backend_ttcontent.png)

How it works
------------

[](#how-it-works)

Each content element can optionally be extended with three fields in the **Recurring Visibility** palette:

FieldDescription**Active**Enables recurring visibility control for this element**Visible from (date expression)**Cron expression defining when the visibility window opens**Visible until (date expression)**Cron expression defining when the visibility window closesAt render time, the extension compares the current timestamp against the most recent and next occurrence of both expressions:

- The content element is **visible** if the last start event is more recent than the last stop event (i.e. a window was opened and has not yet been closed)
- The content element is **hidden** otherwise

Both fields accept natural language expressions (see [Expression Syntax](#expression-syntax) below). Leaving a field empty disables that side of the restriction.

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

[](#installation)

```
composer req in2code/in2frequently

```

No further configuration is required. The extension registers its event listeners and middleware automatically via `Services.yaml` and `RequestMiddlewares.php`.

Backend Integration
-------------------

[](#backend-integration)

The **Recurring Visibility** palette is injected into the access tab of every content element type automatically. It appears directly after the standard TYPO3 access palette.

Enable the toggle to reveal the two expression fields. A preview wizard shows the **next three upcoming dates** for each expression as you type, along with the resolved cron string — making it easy to verify the expression before saving.

Expression Syntax
-----------------

[](#expression-syntax)

Expressions follow the natural language format provided by `bentools/natural-cron-expression`. The following patterns are supported:

ExpressionMeaning`every day`Daily at midnight (00:00)`every day at 3 AM`Daily at 03:00`every 1st`1st of every month at midnight`every 15th`15th of every month at midnight`every 27th`27th of every month at midnight`every 27th midnight`27th of every month at 00:00`every 1st at 8am`1st of every month at 08:00`every 15th at 8am`15th of every month at 08:00`every friday at 17:00`Every Friday at 17:00Standard cron syntax (e.g. `0 8 1 * *`) is also accepted.

### Example: monthly content from 1st to 15th

[](#example-monthly-content-from-1st-to-15th)

FieldValueVisible from`every 1st`Visible until`every 15th`### Example: weekly content from Friday evening to Monday morning

[](#example-weekly-content-from-friday-evening-to-monday-morning)

FieldValueVisible from`every friday at 17:00`Visible until`every monday`Cache Integration
-----------------

[](#cache-integration)

The extension ships a PSR-15 middleware (`FrequentlyCacheMiddleware`) that restricts the frontend page cache lifetime to the timestamp of the next visibility change. This ensures that content transitions (element appearing or disappearing) are reflected on the live site without manual cache clearing.

The middleware runs after `staticfilecache/generate`, so **lochmueller/staticfilecache** is fully supported. When staticfilecache is installed, it is recommended to require it:

```
composer req lochmueller/staticfilecache

```

Local Development
-----------------

[](#local-development)

The extension ships a [DDEV](https://ddev.readthedocs.io) configuration for a self-contained local TYPO3 environment. It sets up a full TYPO3 13.4 instance with a demo page and a content element so you can test the extension immediately after initialization.

### Prerequisites

[](#prerequisites)

- [DDEV](https://ddev.readthedocs.io/en/stable/users/install/ddev-installation/) installed
- Docker running

### First-time setup

[](#first-time-setup)

```
ddev start
ddev initialize
```

`ddev initialize` installs Composer dependencies, runs the TYPO3 setup wizard, applies the DDEV configuration, imports the demo database content, and flushes caches. It takes about a minute.

After initialization:

URL**Backend****Frontend demo page****Login**`admin` / `admin`### Daily workflow

[](#daily-workflow)

```
ddev start          # start containers
ddev stop           # stop containers
ddev typo3 cache:flush                  # flush TYPO3 cache
ddev typo3 database:updateschema        # apply DB schema changes after TCA edits
```

### Persisting content changes

[](#persisting-content-changes)

After making content changes in the backend that should be shared with other developers, export the database and commit the result:

```
ddev createdumpfile   # exports to .ddev/data/demo.sql
git add .ddev/data/demo.sql
```

Changelog
---------

[](#changelog)

VersionDateStateDescription2.1.02026-03-25FeatureAdd a status badge if the content element is visible or not2.0.12026-03-25BugfixFix problem with not available dates like "every 30th" even if there is no 30th in february2.0.02026-03-25TaskAdd a local environment for better contribution (DDEV), support cron strings now1.0.02026-03-11TaskInitial release

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance89

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~5 days

Total

4

Last Release

54d ago

Major Versions

1.0.0 → 2.0.02026-03-25

### Community

Maintainers

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

---

Top Contributors

[![einpraegsam](https://avatars.githubusercontent.com/u/89055?v=4)](https://github.com/einpraegsam "einpraegsam (11 commits)")

### Embed Badge

![Health badge](/badges/in2code-in2frequently/health.svg)

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

###  Alternatives

[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[b13/assetcollector

Add CSS and SVG files and strings as inline style tag/inline svg to the html code.

10118.4k](/packages/b13-assetcollector)[mfd/ai-filemetadata

Automatically generates FAL metadata for files by means of public LLMs

1142.1k](/packages/mfd-ai-filemetadata)[mautic/mautic-typo3

Add-on TYPO3 extension that enhances the "EXT:marketing\_automation" TYPO3 extension by connecting it to the Mautic Marketing Automation platform: Determine "Persona" from Mautic segments. Also provides additional services e.g. language synchronisation between Mautic and TYPO3.

236.3k](/packages/mautic-mautic-typo3)

PHPackages © 2026

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