kartik-v/yii2-markdown Advanced Markdown editing and conversion utilities for Yii Framework 2.0

extensionbootstrapjqueryeditorforminputmarkdownconverter

yii2-markdown

Latest Stable Version License Total Downloads Monthly Downloads Daily Downloads

This module provides Markdown Editing and Conversion utilities for Yii Framework 2.0. It implements markdown conversion using PHP Markdown Extra and PHP Smarty Pants. In addition, you can customize the flavor of Markdown, by including additional custom conversion patterns. The module also includes an enhanced customized Markdown Editor Widget for markdown editing and preview at runtime. This widget is styled using Bootstrap 3.0. View a complete demo.

Markdown

VIEW DEMO
This is a markdown converter class that uses PHP Markdown Extra and PHP SmartyPantsTypographer for processing Markdown conversion to HTML. It also supports configurable custom conversion processing of patterns for styling your own flavour of Markdown to some extent. View examples and details or view a complete demo.

MarkdownEditor

VIEW DEMO
This is an advanced markdown input widget with configurable options. It is styled using Bootstrap 3.0. Key features available with this widget are:

  1. Configurable toolbar and buttons for formatting content
  2. Live preview of Markdown formatted text as HTML
  3. Maximize editor for full screen editing
  4. Implements PHP Markdown Extra and PHP SmartyPantsTypographer functionality as provided by the Markdown.
  5. Uses Bootstrap 3.0 styling wherever possible
  6. Allows saving/exporting of the text-editor contents as Text or HTML
  7. Configurable header, footer, and input options.
  8. Supports localization and customization of messages and content.

View examples and details or view a complete demo.

Demo

You can see a demonstration here on usage of these functions with documentation and examples.

Installation

The preferred way to install this extension is through composer.

Note: Check the composer.json for this extension's requirements and dependencies. Read this web tip /wiki on setting the minimum-stability settings for your application's composer.json.

Either run

$ php composer.phar require kartik-v/yii2-markdown "dev-master"

or add

"kartik-v/yii2-markdown": "dev-master"

to the require section of your composer.json file.

Usage

Setup Module

Add markdown to your modules section of your Yii configuration file

'modules' => [
    /* other modules */
    'markdown' => [
        'class' => 'kartik\markdown\Module',
    ]
];

You can setup additional configuration options for the markdown module:

'modules' => [
    'markdown' => [
        // the module class
        'class' => 'kartik\markdown\Module',

        // the controller action route used for markdown editor preview
        'previewAction' => '/markdown/parse/preview',

        // the list of custom conversion patterns for post processing
        'customConversion' => [
            '<table>' => '<table class="table table-bordered table-striped">'
        ],

        // whether to use PHP SmartyPantsTypographer to process Markdown output
        'smartyPants' => true
    ]
    /* other modules */
];

Markdown

use kartik\markdown\Markdown;

// default call
echo Markdown::convert($content);

// with custom post processing
echo Markdown::convert($content, ['custom' => [
    '<h1>' => '<h1 class="custom-h1">',
    '<h2>' => '<h2 class="custom-h2">',
    '<p>' => Html::beginTag('p', $options),
]]);

MarkdownEditor

// add this in your view
use kartik\markdown\MarkdownEditor;

// usage with model
echo MarkdownEditor::widget([
    'model' => $model, 
    'attribute' => 'markdown',
]);

// usage without model
echo MarkdownEditor::widget([
    'name' => 'markdown', 
    'value' => $value,
]);

Smarty Templates

Smarty templates can be enabled globally by setting the module params

'modules' => [
    'markdown' => [
         'class' => 'kartik\markdown\Module',
         'smarty' => true,
         // Smarty class configuration
         'smartyParams' => [],
         // provide Yii::$app to the Smarty template as variable
         'smartyYiiApp' => true,
         // provide Yii::$app->params to the Smarty template as config variables
         'smartyYiiParams' => true,
    ],
        /* other modules */
];

Then define smarty in the editor

echo MarkdownEditor::widget([
    'model' => $model, 
    'attribute' => 'markdown',
    'smarty' => true,
]);

Note that it may be unwise to enable Smarty templates globally. You can set the module property smarty to a callable function and provide RBAC features.

'modules' => [
    'markdown' => [
        'class' => 'kartik\markdown\Module',
        'smarty' => function($module) {
            if (\Yii::$app->user->can('smarty')) {
                if(\Yii::$app->user->can('smartyYiiApp'))
                    $module->smartyYiiApp=true;
                else
                    $module->smartyYiiApp=false;
                if(\Yii::$app->user->can('smartyYiiParams'))
                    $module->smartyYiiParams=true;
                else
                    $module->smartyYiiParams=false;
                return true;
            }
            return false;
        }
    ],
        /* other modules */
];

It may be a better option to leave smarty turned off in the config files and turn it on in the view with the widget settings.

echo MarkdownEditor::widget([
    'model' => $model, 
    'attribute' => 'markdown',
    'smarty' => true,
    'previewAction' => Url::to(['my/preview']),
]);

Then create an action in your controller and implement RBAC there. That way Smarty templates is off by default and you can turn it on and control access to it in the Controller.

class MyController extends Controller
{
    public function actionPreview()
    {
        $module = Yii::$app->getModule('markdown');
        if (\Yii::$app->user->can('smarty')) {
            $module->smarty = true;
            $module->smartyYiiApp = \Yii::$app->user->can('smartyYiiApp') ? true : false;
            $module->smartyYiiParams = Yii::$app->user->can('smartyYiiParams') ? true : false;
        }
        if (isset($_POST['source'])) {
            $output = (strlen($_POST['source']) > 0) ? Markdown::convert($_POST['source'], ['custom' => $module->customConversion]) : $_POST['nullMsg'];
        }
        echo Json::encode(HtmlPurifier::process($output));
    }
}

After saving the value to the database you can render it in your views with Markdown::convert(). For example if you save the Markdown field in the content column of the Post table you can use something like the following.

$content = Post::find(['page_id'=>'myPage'])->one()->content;
echo HtmlPurifier::process(Markdown::convert($content, ['custom' => $module->customConversion]))

License

yii2-markdown is released under the BSD 3-Clause License. See the bundled LICENSE.md for details.

Changelog

Change Log: yii2-markdown

Version 1.3.1

Date: 08-Jun-2018

  • (enh #69): Reorganize/Optimize code and convert to a jquery plugin.
  • (bug #66, #67, #68): Correct preview action response.
  • (enh #63): Add Marathi Translations.
  • (enh #61): Fix 'modules' in Readme.
  • (enh #57): Use $(..).on("load",…) instead of $(..).load().
  • (enh #56): Add Polish Translations.
  • (enh #53): Update German Translations.
  • (enh #52): Update Dutch Translations.
  • (enh #51): Correct typo in example in docs.
  • (enh #50): Fix namespace.
  • (enh #46): Correct composer dependencies.
  • (enh #43, #44): Correct Smarty templates.
  • (enh #34): Allow markdown to be used as a sub-module.
  • Set copyright year to current.

Version 1.3.0

Date: 12-Jan-2015

  • (enh #32): Add Ukranian translations.
  • (enh #33): Set release to stable
  • Revamp to use new Krajee base Module and TranslationTrait.
  • Change message file category name to begin with kv prefix.
  • Code formatting updates as per Yii2 coding style.

Version 1.2.0

Date: 16-Dec-2014

  • (enh #30): Set dependency on Bootstrap Plugin Asset
  • (enh #29): Hungarian translations included
  • (enh #20): Italian translations included
  • (enh #19): Russian translations included
  • (enh #13): French translations included
  • (enh #9): German translations updated

Version 1.1.0

Date: 09-Nov-2014

  • Enhance dependency validation using common code base.
  • Set release to stable.

Version 1.0.0

Date: 01-Dec-2013

  • Initial release
  • PSR4 alias change

Statistics

Downloads
GitHub Stars
GitHub Forks

Releases

Comments



v1.3.0 is the latest of 4 releases



BSD-3-Clause license
Stats
81 github stars & 36 github forks
95 downloads in the last day
2034 downloads in the last 30 days
41582 total downloads