baserCMS Tips #1 タグやカテゴリーを判定基準にした条件分岐で、ブログ記事にパスワードをかけてみる。

ユーザーズフォーラムのトピック「ブログ機能の任意の記事にパスワードをつける」 で質問のあった内容について、方法をすこし考察してみました。
以下のサンプルでは、JavaScriptの簡易パスワード認証をbc-base.js(外部ファイル)としてtheme/jsフォルダに保存し、タグやカテゴリーを判定基準にしたif構文でそれを呼び出し、簡易にページ(記事)にパスワードをかけるイメージです。

baserCMSのブログプラグインで、ページ(記事)で指定したタグやカテゴリーを判定基準にしたif構文で条件分岐し、特定の処理を実行させたい場合などを想定しています。 JavaScriptの簡易パスワード認証を呼び出す条件にするタグやカテゴリーは、例えばこんな感じであらかじめ指定されているものとします。

画像の説明

上記のブログタグが指定されているページ(記事)のみ、js(JavaScript)を読み込ませて簡易パスワード認証をかけたい場合。
対象ファイル:利用テーマフォルダ/Blog/single.php の末尾に以下のコードを追記。

<?php if (!empty($post['BlogTag'])): ?>
    <?php
    $tags = $this->Blog->getTag($post, ['link' => false]);
    $text = "";
    foreach ($tags as $tag) {$text = $text . h($tag['name']) . ' ';}
    $result = strpos($text, "members"); //ブログタグ名で条件分岐、jsを読み込ませる
    if ($result !== false) {
        $this->BcBaser->js('bc-base');
    }
    ?>
<?php endif ?>

上記のカテゴリーが指定されているページ(記事)のみ、js(JavaScript)を読み込ませて簡易パスワード認証をかけたい場合。
対象ファイル:利用テーマフォルダ/Blog/single.php の末尾に以下のコードを追記。

<?php
$category = $this->Blog->getCategory($post, ['link' => false]); //カテゴリタイトルで条件分岐、jsを読み込ませる
if ($category === "会員専用") {
    $this->BcBaser->js('bc-base');
}
?>

あるいは、特定のカテゴリーのアーカイブのみ、js(JavaScript)を読み込ませて簡易パスワード認証をかけたい場合。
対象ファイル:利用テーマフォルダ/Blog/archives.php の末尾に以下のコードを追記。

<?php
$params = $this->BcBaser->getParams();
$categoryType = $params['pass'][1]; //カテゴリーの種類で条件分岐、jsを読み込ませる
if ($categoryType === "members"): ?>
 <?php $this->BcBaser->js('bc-base'); ?>
<?php endif ?>

といった具合です。最後の例は、if構文の書き方も少し変えてみます。
条件分岐の結果、実行したい命令文もこの方が柔軟に書けるので、簡易パスワードに限らずいろいろと応用もできるかと思います。

最後に、呼び出すbc-base.js(外部ファイル)のサンプル。株式会社Cruwさんのサイトに掲載のコード をサンプルにさせていただきました。

Base64にエンコードされたパスワードがjsのコードにそのまま格納されていますので、あくまで「簡易」なパスワードをつけておく程度の用途のものと考えてください。パスワードは、Base64エンコーダーを使って、適宜、作成・変更してください。
```js document.body.style.display = 'none'; window.onload = function() { var UserInput = null;

var cookies = document.cookie; var cookiesArray = cookies.split(';'); var pass = 'emFxMTIzNDU='; //ex. パスワード:zaq12345 をbase64エンコードしたものです

for(var c of cookiesArray){ var cArray = c.split('='); if(cArray[0].indexOf('bc-base') > -1){ UserInput = decodeURIComponent(cArray[1]); } } if(!(UserInput && UserInput == window.atob(pass))){ UserInput = prompt("パスワードを入力して下さい:",""); }

if(UserInput == null){ history.back(); }else if(UserInput != window.atob(pass)){ alert("パスワードが違います"); history.back(); }else{ var now = new Date(); // 15分間-cookieの有効期限 now.setMinutes(now.getMinutes() + 15); document.cookie = "bc-base=" + encodeURIComponent(UserInput) + ";expires=" + now.toUTCString()+"; path=/;"; } document.body.style.display = null; };

コメント


コメントする


7Ja4ER