[更新]实现WP用<more>分页的功能

2010/03/01 12:38 上午   |   分类:  技术心得   |   297 views

1.首先为CKeditior添加了一个插件,用于插入[more]标记。

在CKeditor的plugins目录下新建一个文件夹,我取名pagemore,再在其中添加一个js文件plugin.js:

CKEDITOR.plugins.add( 'pagemore',
{
 init : function( editor )
 {
  // Register the command.
  editor.addCommand( 'pagemore', CKEDITOR.plugins.pagemoreCmd );

  // Register the toolbar button.
  editor.ui.addButton( 'PageMore',
   {
    label : 'PageMore',
    command : 'pagemore',
    icon: this.path+"images/apage.jpg"//这里是编辑器上的图标,当前是相对路径
   });
   
 },

 requires : [ 'fakeobjects' ]
});

CKEDITOR.plugins.pagemoreCmd =
{
 exec : function( editor )
 {
  // Create the element that represents a print break.
  var moreObject = CKEDITOR.dom.element.createFromHtml( '[more]' );

  var ranges = editor.getSelection().getRanges();

  for ( var range, i = 0 ; i < ranges.length ; i++ )
  {
   range = ranges[ i ];

   if ( i > 0 )
    moreObject = moreObject.clone( true );

   range.splitBlock( 'p' );
   range.insertNode( moreObject );
  }
 }
};

这个是参照pagebreak写的,作用是换行并插入[more]标记。网上有个看起来更简单点的,但用下来报错。

要在工具栏中启用之得修改配置文件config.js,加上这个插件。我的是这样的:

    config.extraPlugins = 'syntaxhighlight,pagemore';//这里注意有2个插件时,在引号里用逗号隔开
    //使用自定义工具栏 
    config.toolbar =
     [
         ['Source', '-', 'Code'],
         ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', ],
         ['Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
         ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', '-', 'PageMore'],//我放到这里的
         '/',
         ['Bold', 'Italic', 'Underline', '-', 'Subscript', 'Superscript'],
         ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'],
         ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
         ['Link', 'Unlink', 'Anchor'],
         '/',
         ['Format', 'Font', 'FontSize'],
         ['TextColor', 'BGColor'],
         ['Maximize', 'ShowBlocks']
     ];

2.再次在首页处理[more]标记,将其之后的内容截掉。加个静态方法,可以搞定。

    public static string ShowShortContent(string content,int length)
    {
        if (length == -1)//全显示
        {
            length = content.Length;
        }
        else if (length == 0)//根据标签显示
        {
            int ml = content.IndexOf("<p>\r\n\t[more]</p>");
            if (ml > 0)
            {
                length = ml;
            }
            else
            {
                length = content.Length;
            }
        }
        //length的值除0和-1以外都是实际指长度
        if (content.Length > length)
        {
            return content.Substring(0, length) + "......";
        }
        else
        {
            return content;
        }
    }

3.最后在内容页忽略掉[more]标记,同样静态方法。

    public static string ShowContent(string content)
    {
        string rt = content;
        rt = rt.Replace("<p>\r\n\t[more]</p>", String.Empty);
        return rt;
    }
喜欢本文,那就收藏到:Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

发表你的评论

姓名(必填)

Mail(必填)

网站

评论内容