分類 ‘Blogger_Hacks’ 的彙整

[Blogger]修改Archive相關功能

  1. 欲解決Archive List在IE下其三角形過大的問題,加入以下code至CSS block:
    /* -- fix the too big triangle in archive-list problem -- */
    #ArchiveList .toggle-open { /* Fixed for IE */
    _font-size: 80% !important;
    }
  2. 預設的Archive List會將最近月份的文章列表展開,若是文章很多會影響美觀,解決辦法是先找到以下Code:
    <li expr:class='"archivedate " + data:i.expclass'>
    修改成如下所示:
    <li expr:class='"archivedate collapsed"'>
  3. Blogger預設顯示某月份Archived Posts的方式是將所有文章內容展開,但是這樣很不美觀。解決這個問題步驟如下:

    將以下Code加入<head></head>之間:
    <script type="text/javascript">
    function toggleIt(id) {
    post = document.getElementById(id);
    if (post.style.display != 'none') {
    post.style.display = 'none';
    } else {
    post.style.display = '';
    }
    }

    function showFullPost(id) {
    var post = document.getElementById(id);
    var spans = post.getElementsByTagName('span');
    for (var i = 0; i < spans.length; i++) {
    if (spans[i].id == "fullpost")
    spans[i].style.display = 'inline';
    if (spans[i].id == "readmore")
    spans[i].style.display = 'none';
    }
    }

    var fade = false;
    function showFull(id) {
    var post = document.getElementById(id);
    var spans = post.getElementsByTagName('span');
    for (var i = 0; i < spans.length; i++) {
    if (spans[i].id == "fullpost") {
    if (fade) {
    spans[i].style.background = peekaboo_bgcolor;
    Effect.Appear(spans[i]);
    } else spans[i].style.display = 'inline';
    }
    if (spans[i].id == "showlink")
    spans[i].style.display = 'none';
    if (spans[i].id == "hidelink")
    spans[i].style.display = 'inline';
    }
    }

    function hideFull(id) {
    var post = document.getElementById(id);
    var spans = post.getElementsByTagName('span');
    for (var i = 0; i < spans.length; i++) {
    if (spans[i].id == "fullpost") {
    if (fade) {
    spans[i].style.background = peekaboo_bgcolor;
    Effect.Fade(spans[i]);
    } else spans[i].style.display = 'none';
    }
    if (spans[i].id == "showlink")
    spans[i].style.display = 'inline';
    if (spans[i].id == "hidelink")
    spans[i].style.display = 'none';
    }
    post.scrollIntoView(true);
    }

    function checkFull(id) {
    var post = document.getElementById(id);
    var spans = post.getElementsByTagName('span');
    var found = 0;
    for (var i = 0; i < spans.length; i++) {
    if (spans[i].id == "fullpost") {
    spans[i].style.display = 'none';
    found = 1;
    }
    if ((spans[i].id == "showlink") && (found == 0))
    spans[i].style.display = 'none';
    }
    }
    </script>

    接著展開小裝置範本,尋找<b:includable id=’main’ var=’top’>,將下列Code增加於其前面:
    <b:includable id='PeekABooPost' var='post'>
    <div class='post uncustomized-post-template'>
    <table style='width:500px; border: 1px dashed #888888 ; padding-bottom:1.5em; margin-bottom:0;'><tr>
    <td width='40px'>
    <a expr:onclick='"javascript:toggleIt(\"" + data:post.id + "\");"' href='javascript:void(0)' style='text-decoration:none' title='Expand/collapse this post'>[+/-]</a>
    </td>
    <td>
    <h3 class='post-title'><a expr:href='data:post.url'><data:post.title/></a></h3>
    </td>
    </tr>
    </table>
    <div class='post-body' expr:id='data:post.id' style='display:none'>
    <p><data:post.body/></p>
    <div style='clear: both;'/> <!-- clear for photos floats -->
    </div>
    </div>
    </b:includable>

    修改下列Code(紅色為新增部分):
    <b:includable id='main' var='top'>
    <!-- POSTS -->
    <div class='blog-posts'>
    <b:loop values='data:posts' var='post'>
    <b:include data='top' name='status-message'/>
    <!-- new -->
    <b:if cond='data:blog.homepageUrl != data:blog.url'>
    <b:if cond='data:blog.pageType != "item"'>
     <b:if cond='data:post.dateHeader'>
      <h2 class='date-header'><data:post.dateHeader/></h2>
     </b:if>

    <b:include data='post' name='PeekABooPost'/>
    <b:else/>
    <b:include data='post' name='post'/>
    </b:if>
    <b:else/>

    <b:include data='post' name='post'/>

    </b:if>
    <!-- new -->

  4. Done!

參考資料:

[Blogger]美觀的Code Block

  1. 在CSS定義區塊加入以下CSS Code:
    /* CSS for Code Block in content */
    code.code {
    display: block; /* fixes a strange ie margin bug */
    white-space:pre;
    font: normal normal 100% Verdana, Arial, Sans-serif;
    font-size: 10pt;
    color:#fff;
    overflow:auto;
    background: #000 url('http://Code Block所要用的背景圖網址/') left top repeat-y;
    border: 1px #ccc;
    padding: 10px 5px 10px 20px;
    margin: 5px 15px 5px 15px;
    max-height:250px;
    line-height: 1.2em;
    text-decoration: none;
    }
  2. 值得注意的一點是,IE6並不支援CSS中 max-widthmax-heightmin-widthmin-height 四個屬性。這個缺陷會造成當欲顯示的程式碼過長時,在IE下Code Block無法顯示捲軸而一次顯示所有的程式碼,畫面也不美觀,因此可在定義Code Block的CSS語法中加入下面這行:
    height: expression(this.offsetHeight>205?205:'');
    當然,除了這個方法之外還是有其他辦法可以解決這個問題,像這裡有網友採用java script來解決這個問題。
  3. 使用方法,將欲顯示的程式碼放在<code class=”code”></code>之間,但要注意的是,html中的一些特殊字元需先取代掉,如下所示:
    雙引號「"」 => &quot;
    單引號「'」 => &#039;
    大於符號「>」 => &gt;
    小於符號「<」 => &lt;
    AND符號「&」 => &amp;

    更詳細的對照表,附在參考資料裡。

參考資料:

[Blogger]增加Top of Page與Top of Post功能

  1. 搜尋下列Code,並增加紅色部分文字:
    <b:includable id='post' var='post'>
    <div class='post uncustomized-post-template' expr:id='"post-" + data:post.id' >
  2. 在任何你想加入該功能的地方(例如文章底部或是另外使用連結),加上以下Code:
    <!-- to top of page and top of blog -->
    <a href='javascript:scroll(0,0)' title='Scroll to top of this page'>Top of Page</a>
    <a expr:onclick='"javascript:document.getElementById(\"post-" + data:post.id + "\").scrollIntoView(true);"' href='javascript:void(0);' title='Scroll to top of post'>Top of Post</a>

參考資料:

[Blogger]新增浮動Navigation Bar

  1. 找到 ]]></b:skin> 所在位置,並將下列Code加在該位置之前:
    /*-- smallnav--*/
    #smallnav{
    position:fixed;
    text-align:left;
    margin-left:-20px;
    margin-top:17px;
    }
    * html #smallnav{ /*IE only*/
    position:absolute;
    }
    #smallnav a img{
    opacity:0.6;
    -moz-opacity:0.6;
    filter:alpha(Opacity=60);
    }
    #smallnav a:hover img{
    opacity:1;
    -moz-opacity:1;
    filter:alpha(Opacity=100);
    position:relative;top:1px;left:1px;
    }
    * html #smallnav a img{
    filter:alpha(Opacity=100);
    }
    #smallnav img{
    margin-bottom: 5px;
    }
    * html .smallnav{
    margin-bottom: 7px;
    }

    實際狀況中,我將上列定義放在 #footer-wrapper{} 之後,上列 #smallnav{} 定義中的 margin-leftmargin-top 可用來調整navbar要顯示的位置。
  2. ]]></b:skin> 位置之後,加入以下Code:
    <script src='http://bloggertips.googlecode.com/files/prototype.js' type='text/javascript'></script>
    <script src='http://bloggertips.googlecode.com/files/scriptaculous.js?load=effects' type='text/javascript'></script>
  3. <body> 標籤之後,找到 <div id=’main-wrapper’> ,並將下列Code依照需求修改並放置其後:
    <div id='smallnav'>
    <span>
    <a href='http://網誌首頁網址/' style='border:0;' title='Home || 網誌首頁'><img alt='Home || 網誌首頁' class='smallnav' src='按鈕圖片網址'/></a>
    <br/>
    <a href='javascript:scroll(0,0)' style='border:0;' title='Top of Page || 回到頁首'><img alt='Top of Page || 回到頁首' class='smallnav' src='按鈕圖片網址'/></a>
    <br/>
    <a href='http://相簿網址/' style='border:0;' target='_blank' title='Gallery || Flickr相簿'><img alt='Gallery || Flickr相簿' class='smallnav' src='按鈕圖片網址'/></a>
    <br/>
    </span>
    </div>

    欲增加連結按鈕,可新增<a>…</a><br/>的Code
  4. 若欲在游標移至navbar上時,出現泡泡狀說明文字,可在 <head> 後加入下列Code:
    <script src='http://bloggertips.googlecode.com/files/BubbleTooltips.js' type='text/javascript'></script>
    <script type='text/javascript'>
    window.onload=function(){enableTooltips("smallnav");};
    </script>
  5. 若要解決navbar在IE6.0之下無法固定住的問題,可在navbar的CSS code之前加上下列Code:
    * html{overflow-y:hidden;overflow-x:hidden;}
    body{overflow-y:auto;height:100%;margin:0;margin-right:13px;}

    上面主要是隱藏html(Browser最右邊)的y捲軸,並將body高度設定為100%,讓body來決定是否顯示其捲軸。之後在 * html #smallnav{} 裡將position設為absolute,如此便可做出同firefox裡的fixed效果。

    此時看到的y捲軸是body的不是html的,但這樣會有個問題,瀏覽器會跑出x捲軸, 每次都必須要向右拉才看得到y捲軸,若是隱藏起來(為了美觀)就沒法使用y捲軸。

    因此只好用一個不怎麼漂亮的方法,那就是將body的margin-right設個值讓y捲軸往左邊跑一點,我把這個值設成15px差不多就可以了。Firefox裡會跑出一點空白但是不太影響整體美觀,目前也只能這樣了。

參考資料:

回到頁首