jsonデータにクラスのついたspanタグを含める場合

トップに書き出されるカテゴリに自動でclass=”〇〇”のついたspanタグを挿入したかったので大外をシングルクォーテーションでくくったら真っ白になってしまいました。

jsonはjsのようにシングルクォーテーションは使えないらしいです。

ダブルクォーテーションやスラッシュを含めたい場合はエスケープしましょう。

エスケープ表記元の文字説明
\”ダブルクォーテーション
\\\バックスラッシュ
\//スラッシュ
\bバックスペース
\f改ページ
\nキャリジリターン(改行)
\rラインフィード
\tタブ
\uXXXX4桁の16進数で表記されたUnicode文字

参考にした記事

https://www.ipentec.com/document/json-character-escape

MTの年別アーカイブの作成

テンプレートの新規作成で記事リストアーカイブを選択する。

マッピングで年別を選択する。

年別アーカイブと名前を付けました。

下記コードを貼り付ける。

archive_type="Monthly"で月、archive_type="Yearly"で年別表示になる。

<$mt:Date format=”%Y” setvar=”thisyear”$>
<mt:ArchiveList archive_type=”Yearly”>
<$mt:ArchiveTitle trim_to=”4″ setvar=”entryyear”$>
<mt:If name=”thisyear” eq=”$entryyear”>
<h3><a href=”<$mt:ArchiveLink$>”><$mt:ArchiveTitle$></a></h3>
<mt:Entries>
<mt:If name=”__first__”><ul></mt:If>
<li><a href=”<$mt:EntryPermalink$>”><$mt:EntryTitle$></a>(<$mt:EntryDate$>)</p>
<mt:If name=”__last__”></ul></mt:If>
</mt:Entries>
</mt:If>
</mt:ArchiveList>

アーカイブへのリンクを表示するページには、下記コードを貼り付け年と件数が表示されるリンクを作成しました。

<mt:IfArchiveTypeEnabled archive_type=”Yearly”>
<mt:ArchiveList archive_type=”Yearly”>
<mt:ArchiveListHeader>
<nav>
<h3><$mt:ArchiveTypeLabel$>アーカイブ</h3>
<div>
<ol>
</mt:ArchiveListHeader>
<li><a href=”<$mt:ArchiveLink encode_html=”1″$>”><$mt:ArchiveTitle$> (<$mt:ArchiveCount$>)</a></li>
<mt:ArchiveListFooter>
</ol>
</div>
</nav>
</mt:ArchiveListFooter>
</mt:ArchiveList>
</mt:IfArchiveTypeEnabled>

bootstrapを実装

まずは公式サイトからCDNをコピーしてhead内に記述します。

実際に張ったコードはこちらです。

<!– CSS only –>

<link rel=”stylesheet” href=”https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css” integrity=”sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk” crossorigin=”anonymous”>

<!– JS, Popper.js, and jQuery –>

<script src=”https://code.jquery.com/jquery-3.5.1.slim.min.js” integrity=”sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj” crossorigin=”anonymous”></script>

<script src=”https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js” integrity=”sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo” crossorigin=”anonymous”></script>

<script src=”https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js” integrity=”sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI” crossorigin=”anonymous”></script>

なぜかjsonを使っていたトップが何も表示されなくなってしまったのでjqueryだけ
<script src=”https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js”></script>
以前のもののままにしました。
すべてのテンプレートのbody直下に
<div class=”container”>を追記し、トップにはグリッドシステムを採用した。

containerはbootstrapで用意されたラッパーclassです。

これを当てるとブラウザ幅によってbootstrapで用意されているcssでbreakポイントで勝手にレイアウトが変わります。

containerの中にrowを作ります。これは余白なども既に設定されたフレックスボックスです。

その中にcol-プレフィックスー12までの数字でカラム分けすることでレスポンシブレイアウトになります。

トップは年別アーカイブをサイドバーにした2カラムにするので12分割の割合は本文をcol-md-9 サイドバーを col-md-3にしました。

bootstrap4からbreakポイントとプレフィックスが変わり、col-xsは無くなりました。

デバイスの幅極小
縦モバイルサイズ
<576px

横モバイルサイズ
≥576px

タブレットサイズ
≥768px

デスクトップサイズ
≥992px
特大
大画面サイズ
≥1200px
コンテナの max-widthなし(自動)540px720px960px1140px
クラス名.col-.col-sm-.col-md-.col-lg-.col-xl-
列の数12
ガター(列の間隔)の幅30px(それぞれの側に15pxずつ)
入れ子可能
順序変更可能

下記サイトを参考にしました。

https://cccabinet.jpn.org/bootstrap4/layout/grid

MTのカテゴリーをアイコン表示する

記事一覧にカテゴリーアイコンを表示しようとしたのですが、管理画面を見ると記事の中にもカテゴリーがあり、そのほかにカテゴリーセットという大項目があるではないですか。はっきり言って混乱です。

カテゴリーセットに登録したが記事入力画面には選択できるところが出てきません!

どうやらコンテンツタイプのためのものっぽい。

プライマリカテゴリも含めて表示する場合

<mt:EntryCategories glue=" / ">
<a href="<$mt:CategoryArchiveLink$>"><$MTCategoryLabel$></a>
</mt:EntryCategories>

プライマリカテゴリは含めないで表示する場合

<mt:EntryAdditionalCategories glue=” / “>
<a href=”<$mt:CategoryArchiveLink$>”><$MTCategoryLabel$></a>
</mt:EntryAdditionalCategories>

jsonには下記を追記

  "categories": [
    <mt:EntryCategories glue=",">
      "<mt:CategoryLabel encode_json="1">"
    </mt:EntryCategories>
  ]

無事カテゴリーが表示されました。

次はカテゴリーアーカイブのリンクをつけたいな。

Sassを監視して変更があったらファイルを自動コンパイルする

watch機能を使います。

gulpfile.jsの

gulp.taskに

return gulp.watch(“scssファイルのパス”, function() {});

で囲みます

// gulpプラグインの読み込み
const gulp = require(“gulp”);
// Sassをコンパイルするプラグインの読み込み
const sass = require(“gulp-sass”);

// style.scssの監視タスクを作成する
gulp.task(“default”, function() {
// ★ style.scssファイルを監視
return gulp.watch(“scss/style.scss”, function() {
// style.scssの更新があった場合の処理

// style.scssファイルを取得
return (
gulp
.src(“scss/style.scss”)
// Sassのコンパイルを実行
.pipe(
sass({
outputStyle: “expanded”
})
// Sassのコンパイルエラーを表示
// (これがないと自動的に止まってしまう)
.on(“error”, sass.logError)
)
// cssフォルダー以下に保存
.pipe(gulp.dest(“css”))
);
});
});

記述したらコマンドから

npx gulp

と打ち込むと監視が開始されてscssの更新があると自動でコンパイルされるようになります。

でもこれずっとコマンドプロンプト起動していないとダメなんですね。
そりゃそうかー。

MTの記事更新をJsonでトップページに再構築無しで更新する

記事の更新があったらjson形式で吐き出されるテンプレートを作成

[
<mt:Entries lastn="10">
{
"url" : "<mt:EntryPermalink encode_json="1">",
"title" : "<mt:EntryTitle encode_json="1">",
"date" : "<mt:EntryDate encode_json="1">",
"body" : "<mt:EntryBody encode_json="1">"
}<mt:If name="__last__"><mt:Else>,</mt:Else></mt:If>
</mt:Entries>
]

トップテンプレートにJSでjsonの読み込みを記述。

<dl id="wrap">
<script type="text/javascript">
$(function(){
$.getJSON("js/recent_entries.js", function(recent_list){
for(var i in recent_list){
var h = '<dt>'
+ '<a href="'
+ recent_list[i].url
+ '">'
+ recent_list[i].title
+ '</a>'
+ '</dt>'
+ '<dd>'
+ recent_list[i].date
+ '</dd>'
+ '<dd>'
+ recent_list[i].body
+ '</dd>';
$("dl#wrap").append(h);
}
});
});
</script>
</dl>

トップページを再構築しなくても記事一覧は自動更新される。

参考にしたサイト

https://designsupply-web.com/knowledgeside/1463/

Sass 開発環境を整えてみた

Sassの開発環境を整えました。

まずPCにnode.jsをインストール。

続いて、Gulpもインストールしました。

コンパイルはコマンドプロンプトを開き、gulp.jsのディレクトリにいき

npx gulp

と打ち込み

エンター押すとcssフォルダにcssができている。

参考にしたサイト

https://ics.media/entry/3290/

アンドロイドスマホだけbackground:repeatが効かない時の対処法

先日コーディングした案件でスマホ時にbackgroundイメージを縦にrepeatするデザインだったので普通に

@media screen and (max-width:768px) {
background: url(bg_sp.png) repeat-y top;
}

こんな感じでスマホの時は画像を縦にリピートさせる簡単なコードを書いていたのですよ。

chromeのdeveloperツールでスマホviewで確認してオッケーと思ってたら実機で確認したらiPhoneは表示されるのにアンドロイドスマホでは背景が表示されない!

repeatを外すと表示される ……

なんだこの現象は……

原因はショートハンドで書いていたことでした!

background-image: url(bg_sp.png);
background-repeat: repeat-y;
background-position: top;

書き直したら無事解決いたしましたー!

めでたしめでたし

画像にフィルターをかけてテキストをのせる方法

メインビジュアルにキャンペーン終了のお知らせをcssで知らせたいということで、白いマスクの上に終了の文字をのせることになりました。

デザイン画像を修正するのがほどんどでしょうが、意外といろんなパターンに使えますのでmemoっておきます。

下記の写真にマスクをかけます。
今回は疑似要素のbeforeとafterを使います。

imgタグは空要素なのでimgタグにbeforeとafter を記述しても何も起こりません。

なのでimgタグの親要素にimg-wrapを作って :beforeと:after にすたいるをつけていきます。

詳細は実際のコードはこちらです。