搭建Hexo部落格相簿

malizhi發表於2018-09-02
注意點:hexo的Next主題預設是不含有相簿頁面的,如果想新增此頁面需自行編寫

圖片的處理

  • 資源圖片是儲存在雲端上,此教程是存放在GitHub上,可以適當修改放在七牛雲也行。首先在電腦上隨便一個位置建立一個新的資料夾,這裡我建立資料夾名稱叫Blog_Album,然後開啟git,cd到此資料夾執行git init命令建立git倉庫,在此資料夾內新建一個資料夾/photos 在這裡存放你需要放在部落格中的圖片。

  • 使用一個Python小指令碼對圖片進行壓縮編輯,並且上傳到自己的GitHub,這就需要我們現在GitHub上新建一個Repository,這裡我依然命名為Blog_Album, 然後在本地連線遠端倉庫執行git remote add origin yourrepositroy@gitaddress

  • 然後下載指令碼tool.py檔案至此檔案內,此檔案需要Imageprocessing.py檔案的支援,可以將此檔案儲存在你的python3包的安裝位置 C:\Users\username\AppData\Local\Programs\Python\Python35-32\Lib\site-packages

  • 執行tool.py的時候如果沒有PIL庫的話會報錯,安裝即可。安裝PIL只需在cmd中執行:pip install Pillow就可以了。 此外圖片命名方式需要按照特定方式即:2017-02-02_discriptionofyourpic.jpg,圖片的格式支援常見格式,時間和描述之間存在下劃線。

  • 執行tool.py的命令:cmd中python tool.py(檔案所處位置完整路徑),例如:python E:\malizhiBlog\HexoAlbumData\tool.py ,執行後會生成data.json檔案,此檔案儲存了圖片的連結,名稱和簡介,存放位置修改為你的hexo部落格主題下特定位置,這裡因為是後期加入的相簿,所以我在/hexo/themes/next/source/lib中新建一個資料夾album來存放相簿檔案。所以tool.py生成data.json需要存放在這裡。大約在133行中進行修改

- with open("E://YourBlog/themes/next/source/lib/album/data.json","w") as fp:
+ with open("YourBolgPath/themes/next/source/lib/album/data.json","w") as fp:
複製程式碼

部落格相簿頁面

  • 在部落格根目錄下新增photo頁面hexo n page photos,在blog的themes的Next中的_config.yml配置檔案中menu選項中新增photos:
menu:
  home: / || home
  about: /about/ || user
  categories: /categories/ || th-list
  tags: /tags/ || tags
  archives: /archives/ || archive
  #schedule: /schedule/ || calendar
  音樂: /music/ || music
+ 相簿: /photos  || camera
複製程式碼

在photos中的index.md新增上下面程式碼

---
title: 照片
date: 2018-09-02 21:00:00
type: photos
fancybox: false
comments: true
---
<link rel="stylesheet" href="../lib/album/ins.css">
<link rel="stylesheet" href="../lib/album/photoswipe.css"> 
<link rel="stylesheet" href="../lib/album/default-skin/default-skin.css"> 
<div class="photos-btn-wrap">
  <a class="photos-btn active" href="javascript:void(0)" target="_blank" rel="external">Photos</a>
</div>
<div class="instagram itemscope">
  <a href="http://yourbolg.com" target="_blank" class="open-ins">圖片正在載入中…</a>
</div>
 
<script>
  (function() {
    var loadScript = function(path) {
      var $script = document.createElement('script')
      document.getElementsByTagName('body')[0].appendChild($script)
      $script.setAttribute('src', path)
    }
    setTimeout(function() {
        loadScript('../lib/album/ins.js')
    }, 0)
  })()
</script>
複製程式碼

從index就可以看出我們還需要新增css檔案和js檔案,這些檔案我已經上傳到GitHub中的JS&CSS資料夾中,在這裡需要把這個資料夾中的所有檔案包括此資料夾下的所有目錄都拷貝到前面建立的/hexo/themes/next/source/lib/album中。

JS&CSS資料夾中的內容如下:

搭建Hexo部落格相簿
然後再將photoswipe-ui-default.min.js, photoswipe.min.js兩個檔案新增到themes/next/source/js/src中。

對ins.js(ins.js在album資料夾中)檔案進行一個簡單的修正,將裡面大約在121和122行左右的連線修改為你的GitHub中圖片連線地址

-    var minSrc = 'https://raw.githubusercontent.com/lizhi/Blog_Album/master/min_photos/' + data.link[i];
-    var src = 'https://raw.githubusercontent.com/lizhi/Blog_Album/master/photos/' + data.link[i];
+    var minSrc = 'https://raw.githubusercontent.com/yougithubname/pathtoyourphotos/min_photos/' + data.link[i];
+    var src = 'https://raw.githubusercontent.com/yougithubname/pathtoyourphotos/photos/' + data.link[i];
複製程式碼

確保你的圖片地址是正確的,否則載入不出來,檢測方法可以將選擇一個圖片地址看能不能再瀏覽器中開啟。

注意點:圖片的連結都是https://raw.githubusercontent.com 開頭的,不是圖片的儲存地址,否則載入不出

其他配置

  • 上面屬於資源的配置,下面是引用配置,在next/layout/_layout.swig的頭部前新增對js檔案的引用如下:
<script src="{{ url_for(theme.js) }}/src/photoswipe.min.js?v={{ theme.version }}"></script>
<script src="{{ url_for(theme.js) }}/src/photoswipe-ui-default.min.js?v={{ theme.version }}"></script>
複製程式碼

在body中新增如下的內容:

{% if page.type === "photos" %}
  <!-- Root element of PhotoSwipe. Must have class pswp. -->
  <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="pswp__bg"></div>
    <div class="pswp__scroll-wrap">
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>
        <div class="pswp__ui pswp__ui--hidden">
            <div class="pswp__top-bar">
                <div class="pswp__counter"></div>
                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
                <button class="pswp__button pswp__button--share" title="Share"></button>
                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                      <div class="pswp__preloader__cut">
                        <div class="pswp__preloader__donut"></div>
                      </div>
                    </div>
                </div>
            </div>
            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div> 
            </div>
            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>
            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>
            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>
        </div>
    </div>
  </div>
{% endif %}
複製程式碼
  • 在/themes/next/layout/_scripts/pages/post-details.swig中新增:
<script type="text/javascript" src="{{ url_for(theme.js) }}/src/photoswipe.min.js?v={{ theme.version }}"></script>
<script type="text/javascript" src="{{ url_for(theme.js) }}/src/photoswipe-ui-default.min.js?v={{ theme.version }}"></script>
複製程式碼
  • 當主題設定fancyboxy為True時,在相簿頁面存在衝突去掉主題的fancybox所以對/themes/next/layout/_partials/head.swig檔案進行修改:
+{% if page.type === "photos"  %}
+  {% set theme.fancybox = false %}
+{% endif %}
+{% if page.type !== "photos"  %}
+  {% set theme.fancybox = true %}
+{% endif %}

{% if theme.fancybox  %}
  {% set fancybox_css_uri = url_for(theme.vendors._internal + '/fancybox/source/jquery.fancybox.css?v=2.1.5') %}
  {% if theme.vendors.fancybox_css %}
    {% set fancybox_css_uri = theme.vendors.fancybox_css %}
  {% endif %}
  <link href="{{ fancybox_css_uri }}" rel="stylesheet" type="text/css" />
{% endif %}
複製程式碼
  • 效果圖:
    搭建Hexo部落格相簿

至此所有的配置已經完成,趕快部署釋出吧。

相關文章