akiraz2/yii2-blog

Simple, configurable blog module for Yii2 (post, comment, nested category, tags). + frontend, backend. + SEO! (Opengraph, Schema.org)

Installs: 4 345

Dependents: 0

Suggesters: 0

Security: 0

Stars: 91

Watchers: 15

Forks: 23

Open Issues: 3

Type:yii2-extension

1.3.3 2021-01-22 09:50 UTC

This package is auto-updated.

Last update: 2024-12-11 05:37:32 UTC


README

Yii2 Super Blog is simple, configured yii2 Module with frontend and backend, cloned from unmaintained repo funson86/yii2-blog, fully reorganized and improved.

Features:

  • Blog Post with image banner, seo tags, imperavi redactor 2 widget
  • Blog Category (nested) with image banner, seo tags
  • Blog Tags
  • Blog Comment (can be disabled), with Math captcha (can be standard yii2-captcha OR ReCaptcha2)
  • email in comments are masked (a*i*a*@bk.ru)
  • all models has Status (Inactive, Active, Archive)
  • Inactive comments are truncated (and strip tags)
  • also added semantic OpenGraph (via yii2 component dragonjet/yii2-opengraph), Schema.org
  • backendControllers can be protected by your CustomAccessControl (roles or rbac)
  • frontend and backend are translated (i18n)
  • url rules with slug (for seo)

NOTE: Module is in initial development. Anything may change at any time. Currently develop new version v2.0 with many improvements and for yii2basic template. @develop branch

Table of Contents

  1. Installation
  2. Configuration
  3. Usage
  4. TODO
  5. Support
  6. Contributing

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist akiraz2/yii2-blog "~1.3"

or add

"akiraz2/yii2-blog": "~1.3"

to the require section of your composer.json file.

** Note ** If you got composer Error it does not match your minimum-stability, please change your composer settings to "minimum-stability": "dev",

Configuration

By default, all images from Imperavi-widget module are uploaded to dir @frontend/web/img/blog/upload. Be sure, this directory is created manually with proper file permissions (chmod).

Add 'bootstrap' => [\akiraz2\blog\Bootstrap::class], to your config (common/config/main.php)

Config common modules in common/config/main.php

    'modules' => [
        'blog' => [
            'class' => akiraz2\blog\Module::class,
            'urlManager' => 'urlManager',// 'urlManager' by default, or maybe you can use own component urlManagerFrontend
            'imgFilePath' => '@frontend/web/img/blog/',
            'imgFileUrl' => '/img/blog/',
            'userModel' => \common\models\User::class,
            'userPK' => 'id', //default primary key for {{%user}} table
            'userName' => 'username', //uses in view (may be field `username` or `email` or `login`)
        ],
     ],    

Config url rewrite in common/config/main.php (or separately frontend/backend apps)

    'timeZone' => 'Europe/Moscow', //time zone affect the formatter datetime format
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [               
            ],
        ],
        'formatter' => [ //for the showing of date datetime
            'dateFormat' => 'yyyy-MM-dd',
            'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss',
            'decimalSeparator' => '.',
            'thousandSeparator' => ' ',
            'currencyCode' => 'EUR',
        ],
    ],

Config backend modules in backend/config/main.php

    'modules' => [
        'blog' => [
            'class' => 'akiraz2\blog\Module',
            'controllerNamespace' => 'akiraz2\blog\controllers\backend',
            //'adminAccessControl' => 'common\components\AdminAccessControl', // null - by default 
        ],
    ],

Config frontend modules in frontend/config/main.php

    //'defaultRoute' => 'blog', //set blog as default route
    'modules' => [
        'blog' => [
            'class' => 'akiraz2\blog\Module',
            'controllerNamespace' => 'akiraz2\blog\controllers\frontend',
            'blogPostPageCount' => 6,
            'blogCommentPageCount' => 10, //20 by default
            'enableComments' => true, //false by default
            'schemaOrg' => [ // empty array [] by default! 
                'publisher' => [
                    'logo' => '/img/logo.png',
                    'logoWidth' => 191,
                    'logoHeight' => 74,
                    'name' => 'My Company',
                    'phone' => '+1 800 488 80 85',
                    'address' => 'City, street, house'
                ]
            ]
        ],
    ],

NOTE: Module Yii2-Blog use model common\models\User

Migration

NOTE: Module uses table {{%user}} with PK id (You can use own user model with table and PK) Make sure you have table before applying these migrations.

Migration run after config module

./yii migrate --migrationPath=@akiraz2/blog/migrations

or full path:

./yii migrate --migrationPath=@vendor/akiraz2/yii2-blog/migrations

Access Url

  1. backend : http://backend.you-domain.com/blog (Empty view)
  2. frontend : http://you-domain.com/blog

Usage

Overriding views

When you start using Yii2-blog you will probably find that you need to override the default views provided by the module. Although view names are not configurable, Yii2 provides a way to override views using themes. To get started you should configure your view application component as follows:

...
'components' => [
    'view' => [
        'theme' => [
            'pathMap' => [
                '@akiraz2/yii2-blog/views/frontend/default' => '@app/views/blog'
            ],
        ],
    ],
],
...

In the above pathMap means that every view in @akiraz2/yii2-blog/views/frontend/default will be first searched under @app/views/blog and if a view exists in the theme directory it will be used instead of the original view.

NOTE: Just copy all necessary views from @akiraz2/yii2-blog/views/frontend/default to @app/views/blog and change!

User model

You can use own user model, but need configure it in config.php

For example,

'modules' => [
       'blog' => [
           'class' => akiraz2\blog\Module::class,            
           'userModel' => \common\models\User::class,
           'userPK' => 'id', //default primary key for {{%user}} table
           'userName' => 'username', //uses in view (may be field `username` or `email` or `login`)
       ],
    ],   

Imperavi Redactor

How to change upload path Imperavi Redactor widget

Yii2 blog module use imperavi redactor 2 Module https://github.com/yiidoc/yii2-redactor with moduleName "redactorBlog".

NOTE: Embedded Module redactorBlog use own UploadController with AccessControl! and only in Backend! and only you don`t override default config

If you want change default config, you should add redactor module manually

Config backend modules in backend/config/main.php

    'modules' => [
        'blog' => [
            'class' => 'akiraz2\blog\Module',
            'controllerNamespace' => 'akiraz2\blog\controllers\backend',
            'redactorModule' => 'redactor' // 'redactorBlog' - default, maybe you want use standard module 'redactor' with own config
        ],
        'redactor' => [
            'class' => 'yii\redactor\RedactorModule',
            'uploadDir' => '@frontend/web/img/upload/',
            'uploadUrl' => $params['frontendHost'] . '/img/upload',
            'imageAllowExtensions' => ['jpg', 'png', 'gif', 'svg']
        ],
    ],

CustomAdminAccessControl for backend

For example, using dektrium/yii2-user

   'modules' => [
        'blog' => [
            'class' => akiraz2\blog\Module::class,
            ...
            'adminAccessControl' => 'common\components\AdminAccessControl',  
            ...      
        ],
    ], 

Create file common\components\AdminAccessControl.php

   namespace common\components;
   
   use yii\filters\AccessControl;
   
   class AdminAccessControl extends AccessControl
   {    
       public function init()
       {
           $this->rules[] =[
               'allow' => true,
               'roles' => ['@'],
               'matchCallback' => function () {
                   return \Yii::$app->user->identity->getIsAdmin();
               }
           ];
           parent::init();
       }
   }

Opengraph

Please, add component dragonjet/yii2-opengraph to your project.

php composer.phar require --prefer-dist dragonjet/yii2-opengraph "dev-master"

Configuration common/config/main.php or frontend/config/main.php

  'components' => [
      'opengraph' => [
          'class' => 'dragonjet\opengraph\OpenGraph',
      ],
      //....
  ],

How to change captcha in Comments

Not yet... If you are using Recaptcha2 in your project with my yii2-blog, please PR me! By default, we use Math captcha

TODO

  • refactoring code (specially BlogCategory, BlogTag)
  • create widgets (for backend and frontend)
  • translate to many popular languages
  • create multilang models
  • change default design and styles for frontend blog
  • add config Captcha

Support

If you have any questions or problems with Yii2-Blog you can ask them directly by using following email address: akiraz@bk.ru.

Please translate to your language! Edit config (or copy to your path) @vendor/akiraz2/yii2-blog/src/messages/config.php, add your language and run script:

php ./yii message/extract @akiraz2/blog/messages/config.php

translate file will be in @vendor/akiraz2/yii2-blog/src/messages/ or your configured path

Contributing

If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome. +PSR-2 style coding. I can apply patch, PR in 2-3 days! If not, please write me akiraz@bk.ru

Licensing

Yii2-Blog is released under the MIT License. See the bundled LICENSE.md for details.