'auto', 'height' => 'auto', 'toolbar' => 'SIMPLE', 'toolbarCanCollapse' => 'false', 'enterMode' => 'CKEDITOR.ENTER_P', 'skin' => 'moono', 'extraPlugins' => '', ); /** * 获取默认的配置 * * @access private * @return mixed */ private static function getDefaultConfig($key = null) { if( isset($key) ) return self::$_defaultConfig[$key]; return (object)self::$_defaultConfig; } /** * 获取编辑器长和宽的数组 * * @access private * @return array */ private static function getLayoutArr($savedWidthAndHeight) { $widthAndHeight = explode(self::CONTACT_CHAR, $savedWidthAndHeight); @list($width, $height) = $widthAndHeight; if( self::validWidthAndHeight($width, $height) ) { return $widthAndHeight; }else{ return array(self::getDefaultConfig('width'), self::getDefaultConfig('height')); } } /** * 验证宽度和高度的有效性 * * @param mixed $expression [, mixed $... ] * @return boolean */ private static function validWidthAndHeight() { $params = func_get_args (); $pass = false; if( count($params) > 0 ){ foreach ($params as $val) { $pass = ( is_numeric($val) || in_array($val, array('auto')) ) ? true : false; if( ! $pass ){ return $pass; } } } return $pass; } /** * 获取目录下的文件夹 * * @access private * @return array */ private static function getDir($targetDir) { $dirs = array(); $files = scandir($targetDir); foreach($files as $file){ if( is_dir($targetDir . '/' . $file) && !in_array($file, array('.', '..')) ){ $dirs[] = $file; } } return $dirs; } /** * 激活插件方法,如果激活失败,直接抛出异常 * * @access public * @return void * @throws Typecho_Plugin_Exception */ public static function activate() { Typecho_Plugin::factory('admin/write-post.php')->richEditor = array('Ckeditor4Typecho_Plugin', 'render'); Typecho_Plugin::factory('admin/write-page.php')->richEditor = array('Ckeditor4Typecho_Plugin', 'render'); //去除段落 Typecho_Plugin::factory('Widget_Contents_Post_Edit')->write = array('Ckeditor4Typecho_Plugin', 'filter'); Typecho_Plugin::factory('Widget_Contents_Page_Edit')->write = array('Ckeditor4Typecho_Plugin', 'filter'); } /** * 禁用插件方法,如果禁用失败,直接抛出异常 * * @static * @access public * @return void * @throws Typecho_Plugin_Exception */ public static function deactivate() { } /** * 获取插件配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form 配置面板 * @return void */ public static function config(Typecho_Widget_Helper_Form $form){ $defaultConfig = self::getDefaultConfig(); $widthAndHeight = new Typecho_Widget_Helper_Form_Element_Text( 'widthAndHeight', NULL, $defaultConfig->width . self::CONTACT_CHAR . $defaultConfig->height, _t('设置宽度和高度')); $form->addInput($widthAndHeight); //*工具栏按钮样式 $toolbar = new Typecho_Widget_Helper_Form_Element_Select( 'toolbar' , array( 'STANDARD' => '标准模式' , 'SIMPLE' => '简单模式' , 'MINI' => '迷你模式' , ) , $defaultConfig->toolbar , _t('工具按钮'), _t('工具栏按钮设置') ); $form->addInput($toolbar); $enterMode = new Typecho_Widget_Helper_Form_Element_Select( 'enterMode' , array( 'CKEDITOR.ENTER_P' => 'P' , 'CKEDITOR.ENTER_BR' => 'BR' , 'CKEDITOR.ENTER_DIV' => 'DIV' ,) , $defaultConfig->enterMode , _t('回车产生的标签'), NULL ); $form->addInput($enterMode); //皮肤 $skins = self::getDir(dirname(__FILE__) . '/ckeditor/skins'); $skins = array_combine($skins, $skins); $skin = new Typecho_Widget_Helper_Form_Element_Select( 'skin' , $skins , in_array($defaultConfig->skin, $skins) ? $defaultConfig->skin : $skins[0] , _t('皮肤'), null ); $form->addInput($skin); $toolbarCanCollapse = new Typecho_Widget_Helper_Form_Element_Radio( 'toolbarCanCollapse' , array( 'true' => '是', 'false' => '否', ), $defaultConfig->toolbarCanCollapse , _t('是否可收缩') ); $form->addInput($toolbarCanCollapse); $extraPlugins = new Typecho_Widget_Helper_Form_Element_Textarea( 'extraPlugins', NULL, $defaultConfig->extraPlugins, _t('需要加载的插件')); $extraPlugins->input->setAttribute('style', 'height: 60px;'); $form->addInput($extraPlugins); } /** * 个人用户的配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form * @return void */ public static function personalConfig(Typecho_Widget_Helper_Form $form){} /** * 去除段落 * * @access public * @param array $post 数据结构体 * @return array */ public static function filter($post) { $post['text'] = str_replace("\n", '', $post['text']); return $post; } /** * 插件实现方法 * * @access public * @return void */ public static function render($post) { $options = Helper::options(); $plugin_options = $options->plugin('Ckeditor4Typecho'); $pluginRoot = Typecho_Common::url('Ckeditor4Typecho/ckeditor', $options->pluginUrl); list($width, $height) = self::getLayoutArr($plugin_options->widthAndHeight); $isEdit = isset($_GET['cid']) && $_GET['cid'] > 0 ? 'false' : 'true'; //调用编辑器 echo << CODE; } }