月度归档:2014年11月

zbp已有模块内容的更新(重建)的两种方法

都是以插件的形式实现,以侧栏标签云模块为例

一、对原有模块内容的重写。

(1)首先挂接接口 

 Add_Filter_Plugin('Filter_Plugin_Zbp_Load','BuildModule_Populartags');

(2)接口函数的编写

//热门标签模块重建(开始)
function BuildModule_Populartags()
{
    global $zbp;
    $zbp->RegBuildModule('tags', 'BuildModule_Populartags');
    $s = '';
    $i = $zbp->modulesbyfilename['tags']->MaxLi;
    if ($i == 0)
        $i = 25;
    $array  = $zbp->GetTagList('*', '', array(
        'tag_Count' => 'DESC'
    ), $i, null);
    $array2 = array();
    foreach ($array as $tag) {
        $array2[$tag->ID] = $tag;
    }
    ksort($array2);
     
    foreach ($array2 as $tag) {
        $s .= ' <a href="' . $tag->Url . '" title="' . $tag->Count . '个话题" style="font-size:12px"> ' . $tag->Name . ' </a>';
    }
     
    return $s;
}
//重建热门标签模块结束

启用方法:进入模块管理的tags列表,点击提交就可以移到侧栏使用了。

二、对原有模块内容的直接替换。

(1)挂接接口:

Add_Filter_Plugin('Filter_Plugin_Index_Begin','Tblogpublished');
Add_Filter_Plugin('Filter_Plugin_Search_Begin','Tblogpublisheds');

(2)替换函数的编写:

function Tblogpublished(){
    global $zbp;
    if(isset($zbp->modulesbyfilename['tags'])){
    $zbp->modulesbyfilename['tags']->Content =Tblog_Get_tags();
    }
}
function Tblogpublisheds(){
    global $zbp;
    if(isset($zbp->modulesbyfilename['tags'])){
    $zbp->modulesbyfilename['tags']->Content =Tblog_Get_tags();
    }  
}

(3)新的标签云内容的编写:

function Tblog_Get_tags(){
global $zbp;
$zbp->header .='<script src="'.$zbp->host.'zb_users/plugin/ttyb_newlypublished/js/3D-Tags.js" type="text/javascript"></script>';
$zbp->header .= "<link rel="stylesheet" href="{$zbp->host}zb_users/plugin/ttyb_newlypublished/css/3dstyle.css" type="text/css" />rn";
$s = '';
$s.= '<div id="div1">';
    $i = $zbp->modulesbyfilename['tags']->MaxLi;
    if ($i == 0) $i = 25;
    $array = $zbp->GetTagList('*', '', array('tag_Count' => 'DESC'), $i, null);
    $array2 = array();
    foreach ($array as $tag) {
        $array2[$tag->ID] = $tag;
    }
    ksort($array2);
    $clor123=array("tblogred","tblogblack","tblogblue","tblogorange","tblogpink","tblogpurple");
    foreach ($array2 as $tag) {
        $s .= '<a href="' . $tag->Url . '"  class="'.$clor123[rand(0,5)].'" >' . $tag->Name . '(' . $tag->Count . ')</a>';
    }
$s.= '</div>';  
    return $s;
}

+-比较前面两个方法:

到这里已经全部介绍完两种方法,在这里来比较下两个方法:

相同点:

(1)都是可以实现模块内容的更新。

(2)显示数量等可以到模块管理面设置。

不同点:

(1)第一种方法:可以实现启用的时候必须要到模块管理里面管理重写提交下或者新建的tag的时候才能使用(相对tags来说,别的类似),第二种方法可以。

(2)第二种方法的动态内容的实现比较灵活。比如对于新建的模块内容是动态的,要实现动态的更换就会很麻烦。需要来回重写模块。那就费事了。(有点过了。要是介绍新建模块就好了。呵呵,以后介绍。)(可以忽略第二条。)

IE下实现placeholder效果的jquery插件

发现ie11都不支持placeholder,这是相当悲剧的。下面贴出一段简单的解决方法:

$(document).ready(
  function () {
    var doc = document,
      inputs = doc
        .getElementsByTagName('input'),
      supportPlaceholder = 'placeholder' in doc
        .createElement('input'),
      placeholder = function (
        input) {
        var text = input.getAttribute('placeholder'),
          defaultValue = input.defaultValue;
        if (defaultValue == '') {
          input.value = text
          input.setAttribute("old_color", input.style.color);
          input.style.color = "#c0c0c0";
        }
        input.onfocus = function () {
          this.style.color = this.getAttribute("old_color");
          if (input.value === text) {
            this.value = ''
          }
        };
        input.onblur = function () {
          if (input.value === '') {
            this.style.color = "#c0c0c0";
            this.value = text
          }
        }
      };
    if (!supportPlaceholder) {
      for (var i = 0, len = inputs.length; i < len; i++) {
        var input = inputs[i],
          text = input
            .getAttribute('placeholder');
        if (input.type === 'text' && text) {
          placeholder(input)
        }
      }
    }
  }
);

直接引用这段js就可以了。

原理

就是通过js获取表单的title,然后把title写入到表单中,当表单激活的时候,再清空表单内容就可以了。