知識分享

Configuration API 提供了一個中心地帶,用來儲存模組的組態資料 (configuration data)。簡單組態的如 "網站名稱" , 複雜點的則如 "views" 或 "content type" 等設定。

組態所儲存的資料,可以用在開發站 synchronize 到正式站的。通常是那些在建站階段會修改,但正式站不太會有機會變動的。 如果是要儲存 local變數這種不需要被轉移的資料,則應該使用 State API。

interface abstract trait
  1. 規範子類/子介面一定要具備某些東西,包含變數與function
  2. 可以被多重 繼承(extends),子介面會擁有父母們的所有規範。但父母們之間的function不能重名。
  3. interface裡只能有public function,且都是空的。
  4. 可以有 constant ,但不能被override
  5. implement 的時候,必須 override所有的fucntion
  6. 不能直接 new 出來,要先有 class
更多

本文參考: 1. https://www.drupal.org/docs/8/api/services-and-dependency-injection/structure-of-a-service-file 2. https://symfony.com/doc/3.4/service_container.html

Services 源自於 Symfony,代表的是 有用的物件(object) ,例如 你有一個 Mail 物件(object),它可以在另一個 object 把資料存檔的時候幫你寄信之類的。 而這類型的 Service 會存在於 service container 的特殊object 裡,透過 services.yml 就可以註冊這些 有用的物件 並放進 Drupal 的 servcie container 裡。

更多

步驟如下:

  1. 需要先更新 repository
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
  2. 然後安裝 python-certbot-nginx
    sudo apt-get install python-certbot-nginx
  3. 取得SSL 憑證(依照指示進行)
    sudo certbot --nginx -d example.com -d www.example.com
  4. 測試auto renew
    sudo certbot renew --dry-run

Middleware 會在一個頁面或一群頁面render之前執行的程式。

例如驗證使用者權限之類的功能,就會以middleware的方式來處理。

middleware會接收到一個context的變數作為第一個參數,關於context 裡面有key,可參考這裡

middleware被執行的順序如下:

  1. nuxt.config.js
  2. 符合的 layout
  3. 符合的 page

 

以下是參考範例
先在middleware裡面建立要執行的程式,檔名會自動可成為被呼叫的名稱

middleware/stats.js

import axios from 'axios'

export default function ({ route }) {
  return axios.post('http://my-stats-api.com', {
    url: route.fullPath
  })
}

nuxt.config.js

module.
更多

說明文件:https://nuxtjs.org/guide/routing

基本概念:只要在 pages 目錄及子目錄中,建立相關的index.vue檔,就會自動生成對應的route

例如

pages/
--| user/
-----| index.vue
-----| one.vue
--| index.vue

就可以產生  三個 route,分別是  "/" ,  "/user",  "/user/one"

 

動態路由

要建立動態路由也滿簡單的,就是在vue檔,加上 下底線 "_" 的前綴 ,如

pages/
--| _slug/
-----| comments.vue
-----| index.vue
--| users/
-----| _id.vue
--| index.vue

以上範例中,有三個動態路由,分別是  "/{slug}/" , "/{slug}/comments" 與 "users/{id}"

 

說明文件:https://nuxtjs.org/guide/configuration

nuxt.config.js 的內容大概長這樣

module.exports = {
  /*
  ** Headers of the page
  */
  head: {
    title: 'my-project',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: 'Nuxt.js project' }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },
  /*
  ** Customize the progress bar color
  */
  loading: { color: '#3B8070
更多

 

雖然D8也現世很久了,但最近才把一個老舊的網站從 D6 升級到 D7,除了一些模組衝突問題之外,升級大致上還算順利。

一個全心安裝的Boost,一切運作正常,

但只要是已登入的使用者,admin_menu會消失,然後從瀏覽器的開發者工具發現是某一段js找不到,原本想說就算了,頂多不要用...

然後接著就發現node/*/edit的表單無法更新@@,跟著就注意到,其實是所有的表單都無法提交(不過實際上應該是有提交成功,但我們只看得到舊畫面)
所以還是得要解決問題。

後來找到有人碰到類似的狀況,原來是Apache版本比較老舊,新版boost(此時安裝的版本是7.x-1.2)產出的.htaccess 是造成問題的主因

得要用boost 7.x-1.0 所產生的.htaccess 
備份如下,以供有需求的人使用,附帶一題,我沒有照文章中所說的,模組也改為 bootstrap 7.x-1.0 ,而是依舊用較新的版本,

更多
  1. 當同一個Server 底下有 多個 Index 的時候,如果在某個 Index 的 Index status 檢視頁中,按了 Clear all indexed data ,實際上會把同一個Server底下的所有 Index 都砍掉,
    舉例來說,假設有兩個Index,分別為 A 與 B,當你在 A 這個 index 按了 "Clear all indexed data",會連 B 的也一起被砍掉,但此時去 B 的狀態檢視頁中,Indexed data 還是滿的。
  2. Queue all items for reindexing 這個功能,雖然不會把另外一個 index 的資料都砍掉,但會產生另一個問題,他會建立重複的資料。
  3. 所以解決辦法是,到每個  index  去 "clear all indexed data",然後在一個一個 "index now"

以上的版本為 7.x-1.20

如果曾經瀏覽過某個網站, chrome就會把他列入搜尋建議(網址列)中,

有時候某些網站的網址剛好佔據了最前方,總是讓人老是不小心按錯,要移除的方法如下:

  1. 在網址列打 chrome://history 後按 Enter
  2. 然後會跳到我們曾經瀏覽過的網站(歷史紀錄)
  3. 在頁面上方,有個搜尋框,可以在這邊輸入你要找的網址
  4. 勾選搜尋結果,然後按下上方的 "刪除"
  5. 之後他就不會再出現在搜尋建議中了,除非...你又進入了那個網站

 

後來發現還有第二個方法:

直接在建議搜尋那邊,選擇要刪除的網址,然後按下 Shift+Del 即可