博客

  • 抛弃WP-PageNavi,为WP自制分页导航功能

    WP-PageNavi是WP的一个优秀的分页导航插件,相信70-80%的P友,一定在用这个插件。

    翠花,上图,这个插件的显示效果,是十分的漂亮的。

    不过,作为骨灰级的WP狂热者,相信一定不愿意在自己WP站上,被一堆的插件插来插去的。你一定是以最精简作为你的终身目标的,或许你不是,但我是!

    废话少说,今天,在这里分享一个将分页导航功能直接写入WP主题的方法,希望对各位骨灰级朋友有用。

    第一步,找到所用模板中的function.php文件。打开后。将下边代码用力的插进去!注意!要插在<?php………………?>中省略号处,别插错地方了!

    
    function wp_pagenavi($before = '', $after = '') {
    global $wpdb, $wp_query;
    if (!is_single()) {
      $request = $wp_query->request;
      $posts_per_page = intval(get_query_var('posts_per_page'));
      $paged = intval(get_query_var('paged'));
      $pagenavi_options = get_option('pagenavi_options');
      $numposts = $wp_query->found_posts;
      $max_page = $wp_query->max_num_pages;
    
      if(empty($paged) || $paged == 0) {
       $paged = 1;
      }
      $pages_to_show = intval($pagenavi_options['num_pages']);
      $pages_to_show_minus_1 = $pages_to_show-1;
      $half_page_start = floor($pages_to_show_minus_1/2);
      $half_page_end = ceil($pages_to_show_minus_1/2);
      $start_page = $paged - $half_page_start;
      if($start_page <= 0) {
       $start_page = 1;
      }
      $end_page = $paged + $half_page_end;
      if(($end_page - $start_page) != $pages_to_show_minus_1) {
       $end_page = $start_page + $pages_to_show_minus_1;
      }
      if($end_page > $max_page) {
       $start_page = $max_page - $pages_to_show_minus_1;
       $end_page = $max_page;
      }
      if($start_page <= 0) {
       $start_page = 1;
      }
      if($max_page > 1 || intval($pagenavi_options['always_show']) == 1) {
       $pages_text = str_replace("%CURRENT_PAGE%", $paged, $pagenavi_options['pages_text']);
       $pages_text = str_replace("%TOTAL_PAGES%", $max_page, $pages_text);
       echo $before.'<div >'."n";
       switch(intval($pagenavi_options['style'])) {
        case 1:
         if(!empty($pages_text)) {
          echo '<span >'.$pages_text.'</span>';
         }     
         if ($start_page >= 2 && $pages_to_show < $max_page) {
          if(!empty($pagenavi_options['dotleft_text'])) {
           echo '<span >'.$pagenavi_options['dotleft_text'].'</span>';
          }
         }
         previous_posts_link($pagenavi_options['prev_text']);
         for($i = $start_page; $i  <= $end_page; $i++) {      
          if($i == $paged) {
           $current_page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['current_text']);
           echo '<span >'.$current_page_text.'</span>';
          } else {
           $page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['page_text']);
           echo '<a href="'.clean_url(get_pagenum_link($i)).'" title="'.$page_text.'">'.$page_text.'</a>';
          }
         }
         next_posts_link($pagenavi_options['next_text'], $max_page);
         if ($end_page < $max_page) {
          if(!empty($pagenavi_options['dotright_text'])) {
           echo '<span >'.$pagenavi_options['dotright_text'].'</span>';
          }
          $last_page_text = str_replace("%TOTAL_PAGES%", $max_page, $pagenavi_options['last_text']);
          echo '<a href="'.clean_url(get_pagenum_link($max_page)).'" title="'.$last_page_text.'">'.$last_page_text.'</a>';
         }
         break;
        case 2;
         echo '<form action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" method="get">'."n";
         echo '<select size="1" = this.options[this.selectedIndex].value;">'."n";
         for($i = 1; $i  <= $max_page; $i++) {
          $page_num = $i;
          if($page_num == 1) {
           $page_num = 0;
          }
          if($i == $paged) {
           $current_page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['current_text']);
           echo '<option value="'.clean_url(get_pagenum_link($page_num)).'" selected="selected" >'.$current_page_text."</option>n";
          } else {
           $page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['page_text']);
           echo '<option value="'.clean_url(get_pagenum_link($page_num)).'">'.$page_text."</option>n";
          }
         }
         echo "</select>n";
         echo "</form>n";
         break;
       }
       echo '</div>'.$after."n";
      }
    }
    }

    第二步:找到你想加入分页导航的页面,如首页、分类页等。再用力的插入如下代码:

            

      

    第三步:找到你的CSS文件,再次用力的插入如下代码:

    /* Page Navigation
    ---------------------------------------------*/
    .navigation {
    padding-top:15px;
    padding-bottom:2px;/*visivility-IE*/
    border:1px solid #fff;
    }
    .alignleft {
    float:left;
    }
    .alignright {
    float:right;
    }
    .aligncenter, div.aligncenter {
    display: block;
    margin:0 auto;
    }
    .wp-pagenavi {
    text-transform:uppercase;
    }
    .wp-pagenavi a {
    text-decoration:none;
    border:1px solid #b3b3b3;
    color:#212236;
    margin:2px;
    padding:2px 6px;
    }
    .wp-pagenavi a:hover {
    color:#fff;
    background-color:#9c0;
    }
    .wp-pagenavi span {
    border:1px solid #b3b3b3;
    margin:2px;
    padding:2px 6px;
    }
    .wp-pagenavi span.pages {
    color:#777;
    margin-left:0;
    color:#000;
    word-spacing:0.2em;
    }
    .wp-pagenavi span.current {
    color:#212236;
    background-color:#e8edef;
    }

    至此,WP分页导航大法修炼成功。注意:功夫一定要做足,一定要插三次,一次都不能少!

    转自:毒龙的世界

  • 迎接新年,迎接元旦 祝福短信 祝福语 特别策划

    迎接新年,迎接元旦 祝福短信 祝福语 特别策划
      http://sms.king51.com

  • 网页排序问题&百度对网站SEO的态度

    1. 我的网站首页被收录了,但搜索网站名称却排不到第一个,怎么办?
    答:排序算法非常复杂。我们的目标,即在于通过算法改进,让用户以最小的成本,搜索到所需要的信息。这个过程中还是会有各种各样不尽如人意的地方。我们会非常欢迎您把您遇到的困惑和问题,反馈给我们。我们的工程师,对每一个问题都会有细致的跟踪和分析,以期将之最终解决。百度搜索结果页下方的搜索框右侧,有“与百度对话”链接,您可以在那里提交您的问题,以协助我们改进。我们一直在改进搜索算法,以使得百度的搜索结果更加符合用户的搜索需求。

    2. 搜索某关键词,我的网页在百度搜索结果的排序短期内变化剧烈,这正常吗?
    答:通常情况下,这是正常的变化。一般来说,有三类原因导致排序发生变化:
      A. 特定关键词所涉及的您的网页发生了变化
      B. 特定关键词所涉及的其他网页发生了变化
      C. 百度的排序算法发生了变化 

    3. 搜索某关键词,我的网页在百度的排序位置,和在其他搜索引擎的排序位置,差异非常大,这正常吗?

     答:通常情况下,这是正常的现象。因为不同搜索引擎的算法,都是不同的。 

    4. 我请一些“SEO”来为我的网站或者网页做优化,会有什么后果?
    答:合理的搜索引擎优化,参见百度的“给站长的建站指南”。
    外界很多打着SEO旗号的公司或者个人,也许能为您的网站带来短期的排序收益,但是,这会使您将面临更大损失的风险。在您把网站资源交托给别人之后,很多SEO甚至会利用您的资源进行他们个人的运营项目,最终导致您的利益受损。

    不要因为SEO们以下的说法,而冒险将自己的网站托付给他们随意处置:
    A. 我和百度的人很熟,想怎么干就怎么干,没风险
    B. 我是搜索引擎专家,对百度的算法一清二楚,玩玩火也不要紧
    C. 我把xxx、yyy、zzz这些关键词都搞到第一了,所以我是牛人啊

  • 百度SEO:百度对建站的建议

    有当搜索引擎、站长、互联网用户之间,能有一种默契的利益均衡,这个行业才会顺畅发展。竭泽而渔式的网站建设,只会使您与用户、与搜索引擎越来越远。搜索引擎与站长之间,宜和谐发展,共同拥抱美好的愿景。

     
    以下是百度给出的一些建站建议: 
     
    1. 站点结构宜简洁明晰
    答:不要让你的用户一进你的站点就因为纷繁s芜杂而不知所措。从某种意义上来说,百度的Spider也是一个相对特殊的访客而已。每一个子域名,每一个目录,都最好有明确的内容区隔,避免不同子域名或者目录对相同内容的互相串用。
       
    2. 创造属于您自己的独特内容
    答:百度更喜欢独特的原创内容。所以,如果您的站点内容只是从各处采集复制而成,很可能不会被百度收录。 
     
    3. 保持经常的更新
    答:经常的更新,蜘蛛程序就会经常的光顾;而长期不更新的网站,蜘蛛到访会日趋减少。 
     
    4. 谨慎设置您的友情链接
    答:如果您网站上的友情链接,多是指向一些垃圾站点,那么您的站点可能会受到一些负面影响。参与各类以SEO为目的的自助链接活动,很可能“过犹不及”。 
     
    5. 把自己的网站做成常青树
    答:如果没有搜索引擎,你的网站仍然访客盈门,那么你的网站就属于“常青树”了。面向用户做网站,而不要面向搜索引擎做网站,这是成为常青树网站的真谛。

  • 放下过去,活在当下

     

        放下过去,活在当下。

        既然不能山盟海誓,那就放下过去吧,给自己也给他人一个机会。我又何苦这样苦苦的的执着!

        人生中有很多无奈,但你却不得不做出这样或是那样不得已的选择

        我也在学着慢慢变得理智,慢慢成熟。

         我承认-我是被你宠坏了,将来也不会有人像你如此般的纵容我了。

        希望将来一切都好。

  • asp读取XML

    ASP文件: 
     程序代码

    
    
    read xml
    
    
    第  条记录:
    
    书名 出版社 价格

    XML文件《data.xml》: 
     程序代码

    
    
    48
    Dreamweaver
    上海科技出版社
    img/dw.jpg
    
    
    61
    Flash
    铁道出版社
    img/flash.jpg
    
    
    48
    Firweorks
    教育出版社
    img/fw.jpg
    
    

    ==========================
    js读取::
     程序代码

    var source=   new   ActiveXObject('Microsoft.XMLDOM');   //创建一个MSXML解析器实例   
    source.async=false;   
    source.load("xml.xml")        //载入xml文档。
    nodes = source.documentElement;
    var ItemN = source.documentElement;       //设置文档元素为根节点元素 
    var j = ItemN.length;//获取item节点个数
    
    var array1=new Array();
    var array2=new Array();
    var array3=new Array();
    for(i=0;i<j;i++)
    {
    array1[i]=ItemN[i].selectSingleNode("name").text;//获取name内容
    array2[i] = ItemN[i].selectSingleNode("publisher").text;//获取publisher内容
    array3[i] = ItemN[i].selectSingleNode("img").text;//获取img内容
    }
  • GetRows() 提取大批量数据

    现有10W条数据,Access数据库保存

    通过正常提取:
     程序代码
    <%
    Set conn= Server.CreateObject("ADODB.Connection")
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb")
    conn.Open connstr

    Set rs = Server.CreateObject ("ADODB.Recordset")
    sql = "Select * from people order by id desc"
    rs.Open sql,conn,1,1

    Do While Not rs.EOF
        Response.write rs("id")&" | "
        rs.MoveNext
    Loop
    %>

    http://myhhe.cn/test/getrows/show1.asp 
    耗时3,250.000毫秒,总测试平均值在3秒左右

    使用存储过程提取:
     程序代码
    <%
    Set conn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")

    cmd.ActiveConnection = conn
    cmd.CommandText = "Select * from people order by id desc"
    Set rs = cmd.Execute

    Do While Not rs.EOF
    Response.write rs("id")&" | "
    rs.MoveNext
    Loop
    %>

    http://myhhe.cn/test/getrows/show2.asp 
    耗时2,187.500毫秒,总测试平均值在2秒左右

    以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)

    那么使用GetRows()方法呢:
     程序代码
    <%
    Set conn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")

    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
    cmd.ActiveConnection = conn
    cmd.CommandText = "Select * from people order by id desc"
    Set rs = cmd.Execute
    rsArray = rs.GetRows()

    For i = 0 To UBound(rsArray, 2)
    Response.Write rsArray(0, i)&" | "
    Next
    %>

    http://myhhe.cn/test/getrows/show3.asp 
    耗时187.500毫秒,总测试平均值在0.2秒左右

    GetRows()方法是将数据从 Recordset 复制到二维数组中,这是一个二维数组,第一个下标标识字段,第二个则标识记录号

    所以rsArray = rs.GetRows()
    rsArray(0, 0)就表示记录集第一行的第一字段值
    rsArray(1, 0)就表示记录集第一行的第二字段值

    数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

    另外,关于GetRows()的详细介绍和用法,这里有份内容参考

    http://www.51windows.net/pages/Ado/mdmthgetrows.htm 

    http://www.blueidea.com/tech/program/2005/2853.asp

  • [ASP]GetRows的用法详解!

    大家应该都知道 Recordset 有个 GetRows 属性,但是真正使用的不多,我也是最近才用的!汗……

    其实这个属性很简单,就是把数据集输出到一个数组中。但是实用性可不小,在这里我举一个例子说明一下GetRows的使用方法,大家举一反三能想到更多的用法!

    比如一个分类的表 T_Cate,结构和数据如下:

    ID   |   Title   |  Intro
    —————————————–
    1    |   新闻   |  这里是新闻
    2    |   教程   |  这里是教程
    3    |   下载   |  这里是下载

    好了,表建立好了,数据也有了,下面我们就要用到GetRows咯! 

    Dim Rs_Cate
    Dim Arr_Cate
    Set Rs_Cate=Conn.ExeCute("SELECT ID,Title,Intro FROM T_Cate ORDER BY ID ASC")
    Arr_Cate=Rs_Cate.GetRows
    Set Rs_Cate=Nothing

    好了表数据已经导出到数组了!下面我们将遍历这个数组

    Dim Arr_CateNumS,Arr_CateNumI
    Arr_CateNumS=Ubound(Arr_Cate,2)  '得到数组中数据的下标
    For Arr_CateNumI=0 To Arr_CateNumS
        Response.Write("ID:"&Arr_Cate(0,Arr_CateNumI)&" | 标题:"&Arr_Cate(1,Arr_CateNumI)&" | 介绍:"&Arr_Cate(2,Arr_CateNumI)&"<br>")
    Next

    呵呵,好了,输出的数据为:
    ID:1 | 标题:新闻 | 介绍:这里是新闻
    ID:2 | 标题:教程 | 介绍:这里是教程
    ID:3 | 标题:下载 | 介绍:这里是下载

    好了,具体就写这么多吧!文采不行,如果大家有什么不明白的,多用用就可以了,呵呵

  • 一段经典的AJAX代码

    function posts(id){
        var xmlhttp;
        try{
            xmlhttp=new XMLHttpRequest();
            }
        catch(e){
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4){
            if (xmlhttp.status==200){
                var data=xmlhttp.responseText;

                result(data);    
                }
            else{
                //提交失败
                }
            }
        else{
            //提交中
            }
        }
        var BaseURL="text.asp"
        var url = BaseURL + "?timeStamp=" + new Date().getTime();
        xmlhttp.open("post", url, true);
        xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=gb2312');
        xmlhttp.send("id="+escape(id));    
    }
    function Colsid_result(data){
        
        var pronames
        var data_arr
        if(data!="0"){
            //信息返回成功,
            alert(data);
        }else{
            //信息返回为0
        }
    }