Grav

Page content

Grav

gravのメモ。もちろん詳細は 本家 からコードから学ぶこと。このページはその結果を簡単にメモしたもの。

===

installation

公式サイト に沿って requirement, installation をやる。

こまごました使い方

  • summary

    • なんでかhomeページがよくエラーになる。その時ここをいじると治った
    • format: longはdelimiterを使わずに制限文字数で区切ってsummary化する, shortは記事に打たれたdelimiterの箇所で区切ってsummary化する。
    • delimiter: ここで指定した記号を記事の中に書くと、そこ以前をsummaryページに入れてくれる。 format=shortにしておくことが条件
  • 記事を書く手順: admin panelから記事を作成、保存を基本とする。権限についてはここが詳しい。consoleから書くのはよほどvimに頼りたいときに限る。

  • simplesearchやrandomに引っ掛けるには、taxonomy categoryに**“blog”**を登録する必要がある。デフォルトでついてくれないかなぁ。

  • 画像のサムネイル化: lightboxで実現可能らしいし、プラグインのインストールも可能。 lightbox を指定して、サムネイルの大きさを resize で指定。

    ![swagger-ui](/image/swagger-ui.png)
    

チューニング記録

結構納得いかないエラーばっかり

TOC pluginを有効化したら出たエラー。

  1. エラー
#0 [internal function]: Whoops\Run->handleError(2, 'array_keys() ex...', '/home/george/gr...', 440, Array) $
  1. 本家にissue上がってるのに治ってないやん
  2. 仕方ないから書いてある通り直した。
    if (is_array($replacements))
      $text = preg_replace(array_keys($replacements), $replacements, $text);
  1. issue listに「早く提案をmergeして!」とコメントしておいた。

code部分に余計なpaddingが載る

何とかしたい。。

  1. workaround: F12から’pre’タグのpaddingが32になっていることを突き止める。
  2. user/themes/antimatter/css-compiled/template.css の line 436 を直す(2remから0remへ):
  padding: 0rem;

admin panel から ページ更新できない

  • エラー: Argument 1 passed to Grav\Common\Page\Page::move() must be an instance of Grav\Common\Page\Page, null given, ...
  • 対処できず、仕方なく terminal から直接記事を更新していた…
    • 参考リンク: この辺 が近いので、見ながら blueprint の勉強から?
  • 対処: 分かったよ! 2017/07/08
    • この記事もそうだが、 article(root) > productivity > grav-note(これ) という階層の中で、 grav-note を編集したいとき、 Configuration - System (/user/config/system.yaml) のなかで Hide home route in URLs がデフォルトで yes になっているが、このままだと URL が https://www.georgeorge.com/blog/productivity/grav-note.html となる。 no にして https://www.georgeorge.com/blog/article/productivity/grav-note.html としてあげることで解決した。うーん、引っかかるよねこれ…

Atom + Remote-FTP で ローカルの端末で記事を編集したい!

  1. 自分を apache groupに所属させる
    $ usermod -aG apache <username>
    
  2. Gravのルートディレクトリのpermissionを変更 (ownerを変え、groupにwrite permissionを与え、それを維持できるよう各ディレクトリにsetgidを与える)
    $ sudo chown -Rv <username>:apache grav-skeleton-blog-site
    $ sudo chmod -Rc g+w
    $ find ./ -type d | xargs chmod 2775
    
  3. apache に umaskを設定し、apacheが作るfile, dirに group write permissionを与えられるように
    # echo "umask 002" >> /etc/sysconfig/httpd
    # service httpd restart
    
  4. Grav自身にpermission設定関係の項目があるので, user/config/system.yaml を編集 (image cacheだからそんなに重要じゃないかもだけど)
    images:
      cache_perms: '0775'
    
  5. Atom をインストール
  6. Remote-FTPをインストールし, gravのroot dirをsyncするように設定。 詳細はatomのページ参照.  /root/user/pages/ 配下を編集したいなら, ローカルの .ftpconfig の例は以下の通り.
{
    "protocol": "sftp",
    "host": "hostname_or_ip",
    "port": 22,
    "user": "your_username",
    "remote": "/full/path/to/grav-root/user/pages",
    "privatekey": "~/.ssh/your_id_rsa",
    "hosthash": "",
    "ignorehost": true,
    "connTimeout": 10000,
    "keepalive": 10000,
    "keyboardInteractive": false,
    "keyboardInteractiveForPass": false,
}

plugin

GitSync

githubやbitbucketにページをバックアップできるプラグイン。

  • 注意! 正しく設定されていないまま使うと、ページ更新のたびに同期処理が完了せず、 admin プラグインからの応答が返ってこない。必ず connection test をパスすることを確認。
  • bitbucket は無料で private repository を使えるので、自分は bitbucket を採用。
  • tokenを使って認証。パスワードを直接設定するより、権限を絞れる & いざという時に連携を切れる(tokenの削除)

Page Summary

ちゃんとできるよ。 Admin panel > Configuration > Site > Page Summaryにて色々設定可能。

  • delimiterの使い方
    1. Format: Short, Delimiter: === とする。 (Long は delimiter を無視します)
    2. 記事を書く。 summarとして表示したい文章 の後、必ず空行を入れてから delimiterの === を挿入。 更に空行を入れて本文を記述

今後やりたいこと

を書いていく。

ページのテンプレート作成

テーマを適用、とかじゃなくて、例えばTOCプラグインは[TOC]という文字列を書かないとtable of contents作ってくれないじゃないですか。あれを勝手にmdの冒頭に書いてほしい。みたいな。

TOCをサイドバーに移設したい

Toc pluginのIssueに上がってるけど、developmentブランチでしか対応していない。様子を見たいと思う

見出しのレベルが見た目に分かりづらい。

文字サイズだけじゃ区別つかんぜよ… Antimatter themeの問題。当分様子見。

Antimatter 以外のテーマにお引越し

色々動けばね。今が一番シンプルでいいのはわかっているが…あとページタイプを一斉変換できるようでないと移行はつらい…

formでコメント

メールが飛んでくるように。メアド、メール環境用意しないとねぇ。

コードの扱いが不便

  • 空行入るとちぎられて崩れる。
  • 行頭スペースが無視されて、インデントが崩れる。
  • 1st level のインデント (ruby なら 2文字分のインデントが) が無視される。
    class MyClass do
      puts 'this indent is ignored'
      [0, 1].each do |i|
        puts 'this is recognized'
      end
    end