kartik-v / yii2-markdown
为 Yii Framework 2.0 提供高级 Markdown 编辑和转换工具
Requires
- kartik-v/yii2-krajee-base: >=1.9
- michelf/php-markdown: ~1.8
- michelf/php-smartypants: ~1.8
README
yii2-markdown
本模块为 Yii Framework 2.0 提供Markdown编辑和转换工具。它使用 PHP Markdown Extra 和 PHP Smarty Pants 实现Markdown转换。此外,您可以通过包括额外的自定义转换模式来自定义Markdown的版本。该模块还包括一个增强的Markdown编辑器小部件,用于在运行时编辑和预览Markdown。此小部件使用 Bootstrap 3.0 进行样式设计。请查看 完整演示。
Markdown
查看演示
这是一个Markdown转换类,它使用 PHP Markdown Extra 和 PHP SmartyPantsTypographer 处理Markdown转换为HTML。它还支持可配置的自定义转换处理模式,在一定程度上允许您自定义Markdown的样式。请查看 示例和详细信息 或查看 完整演示。
MarkdownEditor
查看演示
这是一个具有可配置选项的高级Markdown输入小部件。它使用 Bootstrap 3.0 进行样式设计。此小部件的主要功能包括
- 可配置的工具栏和按钮,用于格式化内容
- Markdown格式化文本的实时HTML预览
- 最大化编辑器以进行全屏编辑
- 实现Markdown提供的PHP Markdown Extra 和 PHP SmartyPantsTypographer功能
- 尽可能使用 Bootstrap 3.0 样式
- 允许将文本编辑器的内容保存/导出为文本或HTML
- 可配置头部、底部和输入选项
- 支持本地化和自定义消息和内容
演示
您可以在 此处 查看这些函数的用法以及文档和示例。
安装
安装此扩展的首选方式是通过 composer。
注意:请检查此扩展的 composer.json 文件以获取此扩展的需求和依赖项。阅读此 web提示/wiki 了解如何为您的应用程序的 composer.json 设置
minimum-stability
设置。
运行以下命令:
$ php composer.phar require kartik-v/yii2-markdown "dev-master"
或添加以下内容到您的 composer.json
文件中的 require
部分:
"kartik-v/yii2-markdown": "dev-master"
用法
设置模块
将 markdown
添加到您的 Yii 配置文件的模块部分
'modules' => [ /* other modules */ 'markdown' => [ 'class' => 'kartik\markdown\Module', ] ];
您可以设置 markdown
模块的附加配置选项
'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 模板
可以通过设置模块参数来全局启用Smarty模板。
'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 */ ];
然后在编辑器中定义Smarty。
echo MarkdownEditor::widget([ 'model' => $model, 'attribute' => 'markdown', 'smarty' => true, ]);
注意,全局启用Smarty模板可能不是明智之举。您可以将模块属性smarty设置为可调用的函数,并提供RBAC功能。
'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 */ ];
在配置文件中保持smarty关闭,并在视图的控件设置中开启可能是一个更好的选择。
echo MarkdownEditor::widget([ 'model' => $model, 'attribute' => 'markdown', 'smarty' => true, 'previewAction' => Url::to(['my/preview']), ]);
然后在控制器中创建一个操作并实现RBAC。这样,Smarty模板默认是关闭的,您可以在控制器中开启它并控制对其的访问。
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)); } }
将值保存到数据库后,您可以使用Markdown::convert()在视图中渲染它。例如,如果您将Markdown字段保存到Post表的content列中,您可以使用以下类似的方法。
$content = Post::find(['page_id'=>'myPage'])->one()->content; echo HtmlPurifier::process(Markdown::convert($content, ['custom' => $module->customConversion]))
许可证
yii2-markdown在BSD 3-Clause许可证下发布。有关详细信息,请参阅捆绑的LICENSE.md
文件。