热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yii框架扩展:KEditor——完美整合Yii框架和KindEditor的可视化编辑器

Yii框架扩展:KEditor——完美整合Yii框架和KindEditor的可视化编辑器

最近业余时间在用Yii框架做一个内容采集及分发平台,这里面自然涉及到文章内容采集和发布,一般采集软件从采集到发布一站式解决,但是既然做了自己用,有时候还是要保证文章质量的,所以在采集和发布之间,我想做一个中间层,对文章内容进行优化和处理,那么这里就要用到可视化编辑器对文章内容进行编辑,国外比较流行的可视化编辑器主要有CKEditor和TinyMCE(wordpress即是采用这款编辑器),但是它们有个缺点就是图片上传处理及浏览是要收费的,所以转向国内,国内的话主要就是KindEditor和百度编辑器UEditor,之前用过百度编辑器(参阅百度编辑器整合Yii框架),这次准备玩玩KindEditor,按照文档(参阅kindeditor编辑器使用方法)去整合进来固然可以,但是扩展性不好,不如直接自己基于KindEditor写个扩展。

在Yii框架中,写个这种扩展比较简单,下面就扩展的编写和使用方法做个简单说明:

1.下载kindeditor(下载地址:http://pan.baidu.com/s/1pJsIth5),并解压到Yii框架的protected/extensions目录下,比如我的路径是protected/extensions/kindeditor。

2.在kindeditor目录创建一个php类文件KEditorWidget.php,内容如下:

widget('ext.kindeditor.KEditorWidget',array(
 *     'id'=>'Item_content',	# Textarea id
 * )); ?>
 */

class KEditorWidget extends CInputWidget
{
    public $id;
    public $language = 'zh_CN';
    public $paramOptiOns= '{}';

    /**
     * 初始化组件.
     */
    public function init()
    {
         // 阻止从命令行执行.
         if (Yii::app() instanceof CConsoleApplication)
              return;

         /** @var CClientScript $cs */
         $cs = Yii::app()->getClientScript(); 
         $cs->registerScriptFile($this->assetsUrl.'/kindeditor-min.js', CClientScript::POS_HEAD);
    }

    /**
     * 运行组件.
     */
    public function run()
    {
        $script = "KindEditor.ready(function(K){window.editor=K.create('#".$this->id."',".$this->paramOptions.");});";
        /** @var CClientScript $cs */
        $cs = Yii::app()->getClientScript();
        $cs->registerScript($this->id, $script, CClientScript::POS_HEAD);
        $cs->registerScriptFile($this->assetsUrl.'/lang/'.$this->language.'.js', CClientScript::POS_HEAD);
    }

    public function getAssetsUrl()
    {
        $assetsPath = Yii::getPathOfAlias('ext.kindeditor');
        $assetsUrl = Yii::app()->assetManager->publish($assetsPath, false, -1, YII_DEBUG);
        return $assetsUrl;
    }
}

?>

3.接下来就是使用该组件在_form.php文件中显示出kindeditor的编辑器界面了,这也比较简单:

1)简单调用:

labelEx($model,'content'); ?> textArea($model,'content',array('rows'=>6, 'cols'=>50)); ?> error($model,'content'); ?>
widget('ext.kindeditor.KEditorWidget',array('id'=>'Post_content'))?>

2)高级调用(设置编辑器参数),有时候我们想要更多的自定义一些选项,比如高度,宽度,以及想要显示的工具栏选项:

labelEx($model,'content'); ?> textArea($model,'content',array('rows'=>6, 'cols'=>50)); ?> error($model,'content'); ?>
widget('ext.kindeditor.KEditorWidget',array('id'=>'Post_content','paramOptions'=>'{ width:"700px", height:"300px", }'))?>

更多编辑器设可参考这篇文章:KindEditor使用入门(二)—— 编辑器初始化参数

下面是显示出的编辑器界面效果图:

keditor

最后给出KEditor扩展的下载地址:http://pan.baidu.com/s/1kTwUmGZ

有什么问题,欢迎大家在下面的评论中与我讨论。

注:我整合的KindEditor是4.1.10版本。


推荐阅读
  • 本文将指导您使用FastStone软件轻松完成网页或应用的滚动截屏,适用于多种设备和操作系统。 ... [详细]
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • Spring Boot 应用程序实现开机自启的步骤
    本文介绍如何将Spring Boot项目打包成的JAR文件配置为系统启动时自动运行的方法,包括创建批处理文件和设置任务计划等步骤。 ... [详细]
  • WPS文档中实现高效批量文本替换的指南
    本文详细介绍了如何在WPS文档中快速执行批量文本替换的操作方法,旨在帮助用户提高文档编辑效率。 ... [详细]
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
  • 本文探讨了PHP中使用命名空间和自动加载机制的重要性,特别是在大型项目中,如何有效管理和加载文件,避免代码冗余,提高开发效率。 ... [详细]
  • 剑指Offer算法题解析:实现带Min方法的栈
    本文深入探讨了《剑指Offer》系列中的一道经典算法题——设计一个支持常数时间内检索最小元素的栈。通过详细分析与代码示例,帮助读者理解并掌握这一问题的核心解法。 ... [详细]
  • 本文介绍了iOS应用开发的主要框架,包括Foundation、UIKit、CoreData及CoreGraphics等,并探讨了开发iOS应用所需的硬件和软件环境,以及推荐的编程语言。 ... [详细]
  • 本文汇集了多个专注于PHP及后端开发领域的技术博客,包括知名的技术社区如SegmentFault和掘金等。这些资源对于提升技术水平、拓宽知识视野具有重要价值。技术博客作为学习过程中的辅助材料,其作用在于激发兴趣、提供灵感,但更关键的是建立坚实的技术基础和丰富的实践经验。 ... [详细]
  • 随着科技的进步,AR智能眼镜正逐渐成为日常生活的一部分。今年冬天,一款仅重38克的AR智能眼镜成为了市场上的焦点,其超轻设计和创新功能值得我们深入了解。 ... [详细]
  • 本文探讨了如何在C#应用程序中有效处理来自两个不同数据库的数据,特别是当需要从一个数据库中选择不在另一个大型集合中的ID时遇到的挑战和解决方案。 ... [详细]
  • 本文对唐代诗人李贺的《奉和二兄罢使遣马归延州》进行了详细的翻译与赏析,深入解析了诗中的情感表达与艺术特色。 ... [详细]
  • 基于函数实现的进制转换工具
    本文介绍了一种利用函数实现不同进制数(二进制、八进制、十进制)之间转换的方法。包括了程序的运行效果展示、所使用的主要函数解析、以及如何验证用户输入的合法性。整个项目仅使用了两个全局变量来存储用户的选项和输入的数值。 ... [详细]
  • ArcGIS技巧:为相邻地块创建指定宽度的隔离带
    在地理信息系统(GIS)的数据处理中,为了满足特定项目的质量检查标准,需要在相邻地块之间创建一定宽度的隔离带。本文将探讨如何使用ArcGIS工具解决这一问题,确保不同地块图斑间保持规定的最小距离。 ... [详细]
  • 深度兴趣网络在点击率预测中的应用研究
    本文探讨了一种名为深度兴趣网络(Deep Interest Network, DIN)的新方法,该方法通过捕捉用户的历史行为和当前上下文之间的交互来提高点击率预测的准确性。DIN模型不仅考虑了用户的静态偏好,还动态地调整了对不同商品的兴趣权重,从而实现了更加个性化的推荐。 ... [详细]
author-avatar
亲爱的常青藤先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有