首先感谢原作者Aditya给我们带来这么好的方法。昨天跟作者沟通了一下,提了点建议,作者今天就又更新了,完全可以替换博客原有的标签功能,完全的WEB2.0样式!实在太爽了!
这个hack的作用就是让大家点击标签以后,不再是把整个页面读取一遍去获取标签文章,而是直接在博客页面的该标签题目下读取全部的标签文章,并以标题形式显示该标签下的文章。
具体样式请参考我的博客右边“全部文章列表:”下的“标签文章列表:”,试着点击一个标签题目看看:)
今天更新了两个地方:A.可以自己设定标签点击前和点击后的前方图片。
B为标签下超多题目载入速度减慢的情况增加了读取中的提示图片。
安装方法:第一步,首先把下面的代码加入你的xml模板里的</head>上边,]]<>/b:skin>下边:
<script>
//<![CDATA[
/* Belongs to Aditya Mukherjee (www.aditya-mukherjee.com)
    It is licensed under a Attribution/Non-commercial/No derivative CC 2.5 license
    http://creativecommons.org/licenses/by-nc-nd/2.5/
 */ 
function $(){
  for( var i = 0, node; i < arguments.length; i++ )
    if( node = document.getElementById( arguments[i] ) )
      return node;
}
var _id = '';
pic1= new Image(); //preload image
pic1.src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLXkcSXSoEcST7xKy79OBSi2PUhrc6RP1Er53AzSS54V7onrfhCUqQhKOtIojylOMJGg2amns4TjurNW_er4k8Z_3M0_8Vy9XdSkplo8Y-gt4oD2hn71V_Xax7N4iDsrPfV8-zxn4Db_NC/s320/loading_ani2.gif"; 
function showLabel(name){
 _id = name;
 if($(name+'-expanded')) {
 $(name+'-expanded').parentNode.removeChild($(name+'-expanded'));
 $(name).style.textDecoration = 'none';//removes underline from closed label
 $(name+'-tog').innerHTML = '+ ';//the expanding image
  }
 else {
 $(name).style.textDecoration = 'underline';//adds underline to opened label
 $(name+'-tog').innerHTML = '- ';//the contracting image
 var script = document.createElement('script');
 script.src = 'http://<blogname>.blogspot.com/feeds/posts/summary/-/'+name+'?alt=json-in-script&callback=makeList';
 script.type = 'text/javascript';
 
 document.getElementsByTagName('head')[0].appendChild(script);
 }
}
function makeList(json){
var d = document.getElementById('Label1');
var i=0, j=json.feed.entry[i];
var list = document.createElement('ul');
list.id = _id+'-expanded';
list.setAttribute('class','postList');
 $(_id).parentNode.insertBefore(list, $(_id).nextSibling);
var imag = document.createElement('img');
imag.src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLXkcSXSoEcST7xKy79OBSi2PUhrc6RP1Er53AzSS54V7onrfhCUqQhKOtIojylOMJGg2amns4TjurNW_er4k8Z_3M0_8Vy9XdSkplo8Y-gt4oD2hn71V_Xax7N4iDsrPfV8-zxn4Db_NC/s320/loading_ani2.gif';
$(_id+'-expanded').appendChild(imag);
var frag = document.createDocumentFragment();
  while(i<json.feed.entry.length){
 j=json.feed.entry[i];
     var t_link = document.createElement('a');
         t_link.href = j.link[0].href;
  t_link.title = j.summary.$t;
 if(j.title.$t.length>37)
  t_link.appendChild(document.createTextNode((j.title.$t).slice(0,37)+'...'));
 else 
  t_link.appendChild(document.createTextNode(j.title.$t));
      var title = document.createElement('span');
  title.setAttribute('class','postTitle');
         title.appendChild(t_link);
 var li = document.createElement('li');
 li.appendChild(document.createTextNode('- '));
 li.appendChild(title);      
 frag.appendChild(li);
 i++;
      }
       $(_id+'-expanded').innerHTML = '';
 $(_id+'-expanded').appendChild(frag); 
}
//]]>
</script>
注意把上面代码中的"http://<blogname>.blogspot.com/feeds/posts/summary/-/"这一行的<blogname>改成你的博客名称。
其他几点注意事项:
1. 如果你的单一标签的文章数超过25个,而且你又希望把标题都显示出来,那么你需要像我一样在上面的代码里修改以下定义代码:
还是修改这一行:
'http://ggpi.blogspot.com/feeds/posts/summary/-/'+name+'?max-results=999&alt=json-in-script&callback=makeList';
代码“?max-results=999&”的数字999就是定义最多能显示的文章标题是999篇,你也改成你自己想显示的数字。
2.默认设置显示的标题文字数超过37个字就会以"..."代替后面的字数,如果你要显示更长的标题名称,就要修改上面代码的这个位置:
if(j.title.$t.length>37)
t_link.appendChild(document.createTextNode((j.title.$t).slice(0,37)+'...'));
把两个“37”都改成你要显示的字数即可。
3.你也可以改成图片的样式,例如上面代码$(name+'-tog').innerHTML = '+ ';//the expanding image的“+ ”号,整体替换为<img src="http://gggpie.googlepages.com/arrow_066.gif"/>就可以变成跟我一样的图片了。
同理,$(name+'-tog').innerHTML = '- ';//the contracting image的“- ”号也能改成<img src="http://gggpie.googlepages.com/arrow_279.gif"/>
代码里的图片http://gggpie.googlepages.com/arrow_279.gif 你可以随意替换~
第二步,切换到模版,页面元素的选项,添加一个标签页面元素,放到你觉得好看的位置。
第三步:再次切换到你的模版,修改 HTML项目,然后勾选扩展窗口小部件模板,找到你刚刚添加的标签页面元素项目。
用下面的代码完整替换之:
<b:widget id='Label1' locked='false' title='标签文章列表:' type='Label'>
<b:includable id='main'>
  <b:if cond='data:title'>
    <h2><data:title/></h2>
  </b:if>
  <div class='widget-content'>
    <ul class='elegantList'>
    <b:loop values='data:labels' var='label'>
      <li expr:id='data:label.name'>
        <b:if cond='data:blog.url == data:label.url'>
          <data:label.name/>
        <b:else/>
          <span expr:id='data:label.name + "-tog"'><img src='http://gggpie.googlepages.com/arrow_066.gif'/></span><a href='#category' onclick='javascript:showLabel(this.innerHTML)'><data:label.name/></a>
        </b:if>
        (<data:label.count/>)
      </li>
    </b:loop>
    </ul>
    <b:include name='quickedit'/>
  </div>
</b:includable>
</b:widget>
完工了~~~注意上面的代码这一行<span expr:id='data:label.name + "-tog"'><img src='http://gggpie.googlepages.com/arrow_066.gif'/></span>
里的http://gggpie.googlepages.com/arrow_066.gif是我定义的图片,这里是控制默认刚刚打开博客时候你每个标签题目前方显示的图片,最后改成和上面代码的“收缩标签以后显示的图片”是一个图片为最好。这样比较统一。
                        
您的浏览位置: 
 主页 >
主页 >
 blogger技巧
> blogger 3.0:杀手级应用 AJAX标签全面改进版(再次升级)
blogger技巧
> blogger 3.0:杀手级应用 AJAX标签全面改进版(再次升级)
2007年2月7日星期三
blogger 3.0:杀手级应用 AJAX标签全面改进版(再次升级)
订阅:
博文评论 (Atom)


 
 友情链接
友情链接 跟我联系
跟我联系 博客相关
博客相关 订阅本站
订阅本站
0 评论:
发表评论: ☆欢迎灌水☆言论自由☆交流快乐☆