Newsletter - Send newsletter e-mails to subscribers (GDPR ready)

Newsletter banner


The plugin helps with sending the newsletter.

The basic use case is as follows:

  1. A visitor on the page sees a subscribe-to-our-newsletter form
  2. Enters his/her e-mail address and ticks checkbox that he/she agree with
  3. He/she receives a message to confirm the e-mail address
  4. From now on, admin can send an e-mail to him/her
  5. If the visitor does not like the newsletter he/she can unsubscribe using the link included in every message

What is more:

  • Admin can manage checkboxes rendered with form so that there are required and optional checkboxes:
    • Required have to be checked by the visitor (in most cases this will be accepting regulations or policies),
    • Optional do not have to be checked. Using optional checkboxes we can give subscribers choice what type of messages they want to receive (our offer, news or just message categories).
  • Visitor can manage the message categories visiting manage newsletter page (and seeing optional checkboxes)
  • Admin can specify if he/she wants to send the message to all users, or just those who accepted the particular optional checkbox
  • Admin can save the message without sending it

The plugin makes you GDPR ready and is fully translatable (see Documentation).


  1. Create page for managing newsletter options by subscribers so that it has :email and :token variables (for example manage-newsletter with /manage-newsletter/:email/:token URL). Of course, those variables can be changed.
  2. Embed component NewsletterConfirm on exact one CMS page (Newsletter plugin will automatically look for a page that has the component and cache it for 10 minutes)
  3. Go to backend Newsletter -> Checkboxes and add checkboxes as your business requires
  4. Embed component NewsletterForm on the page you want to have form rendered on (landing page or just footer partial)

Do not forget to configure e-mail sending in your backend settings


The plugin supports translations for all elements (there are no hardcoded frontend contents) including AJAX responses and displayed errors.

Out of the box, there are only two languages:

  • pl - Polski
  • en - English

But of course, you can prepare your own translations.

E-mail templates

Out of the box, there are two e-mail templates you can to customize:

  • inibiz.newsletter::mail.subscription which is sent to those who want to become a subscriber
  • initbiz.newsletter::mail.message which is sent to subscribers

In subscription e-mail template you can use `` variable.

In message e-mail template you can use:

  • `` - Title of message
  • `<div class="row">

    Money - Plugin to use money in OctoberCMS painlessly

Money banner


Everything you need to have installed to work with money in your October CMS app.

Money is always expressed with two factors. It is a value (amount) and a currency. Sometimes the latter is default but it always is defined.

Furthermore, amounts should always be stored in databases using integer or other monetary types and never using floats or doubles. You can find a great article explaining this here.

So this plugin was created to help with handling such complications.

The plugin uses:

Installation note (since January 2019)

Since January 2019 Brick/Money package requires PHP7.1 as a minimum version while OctoberCMS overrides platform to PHP7.0 (described here). As a consequence, if you want to install the plugin from Marketplace right now, ensure you have changed your root composer.json PHP version to 7.1.

Backend form widget

The plugin adds a backend form widget called money. You can use it in your config_form.yaml files:

    type: money
    mode: amountcurrency

It is designed to input money made of two factors: amount and currency. By default you will get two fields:

  • Amount input which gets parsed every time you refresh the page and input a value (using currency)
  • Select with currencies defined in Responsiv.Currency.

You have to have defined two columns for every money type field. After that, you have to write your own mutator and accessor or use MoneyFields behavior described below.


Right now there are two modes of the widget:

  • amountcurrency - the default one
  • amount

The latter will use currency set as default in Responsiv.Currency settings in the backend while the first one will render you a dropdown with other currencies.

I currently work on the third mode: currency. This will be useful for changing all currencies on page with one dropdown (for example when you have one currency on the whole invoice where you have a lot of amount inputs).

MoneyFields behavior

The behavior uses $moneyFields attribute to add dynamically mutators and accessors for money fields.

Using the behavior looks like in this example:

class Product extends Model
    public $moneyFields = [
        'price' => [
            'amountColumn' => 'amount',
            'currencyIdColumn' => 'currency_id'
    public $implement = [

This code will dynamically add two methods to the Product model: setPriceAttribute and getPriceAttribute. Both of them will be using amount as an amount column name (and model attribute) and currency_id as a currency column name (and model attribute as well).

If you want to have only one currency in your model there should not be problems with using the same column name for more than one field. Remember though that if you will not change the currency for all inputs that have the same column while saving the value might be overridden.

Future plans (TODO)

  • Currency mode (to change all currencies on the page)
  • Automatically converting and displaying amounts in the selected format (extending Responsiv.Currency)
  • Register settings to define if we want to use localized config or ‘per currency’ format
<div class="col-md-2">
    <div id="toc" class="js-toc">


` - Content of message

  • `` - link for subscribers to sign out from newsletter

If you want, you can create your own e-mail template. While sending you just have to choose which one you want to use. The message e-mail template is just a default one.