記事カテゴリ

ユーザー機能


 2024年3月28日(木) 18:07 JST

[GEEKLOG]話題ごとに異なるデザインを

  • 投稿者:
  • 表示回数
    6,074

先日から各ブログにちゃんとコピーライトを入れたいと思っていた。
MoEのブログを書き出すときにコピーライトを挿入していたのだが、静的ページを使っていたためにトップページか、各話題のトップにしか表示されていない。

こんなんじゃだめだ。

くろねこのコピーライトを挿入するときの要望項目

  1. 話題ごとに適切な文言が挿入できる
  2. メンテナンスが簡単
  3. テーマに依存しない

静的ページは話題ごとに切り替えできてメンテナンスも簡単、テーマに依存しないのだが1つ1つの記事には表示できないので×
ブロックはメンテナンスが簡単だがそもそも話題ごとって切り替えが無理。

そこで検討したのがテーマには依存してしまうが、各テーマの記事の本文テンプレートを編集することによって、コピーライトを表示する。

まず、記事の本文テンプレートに各話題のIDなどの情報を持ってくる必要があるので、Geeklog公式の記事ページにパンくずリストを表示するを見ながらハックするが、ひとつ思ったこと。

こんな書き方でわかるん?

追加するする内容は以下であることは明確であるのだが、どこかわからん...

        $topicname = $story->displayElements('topic');
        $topicurl = $_CONF['site_url'] . '/index.php?topic=' . $story->displayElements('tid');
        $story_template->set_var ('story_topic_name', $topicname);
        $story_template->set_var ('story_topic_url', $topicurl);
        $story_template->set_var ('story_topic_id', $story->displayElements('tid'));

まあ、適当にソースコードを見て追加する。プログラマだからできるんだよな。一般人無理だろ?

    } elseif (($mode == 'print') && ($_CONF['hideprintericon'] == 0)) {

				... 印刷用 ...
				...  中略  ...

       $display = $story_template->finish ($story_template->get_var('output'));
    } else {
        // Set page title
        $pagetitle = $story->DisplayElements('title');

				... 表示用 ...
				...  中略  ...

        $story_template->set_var('layout_url', $_CONF['layout_url']);
        $story_template->set_var('story_id', $story->getSid());
        $story_template->set_var('story_title', $pagetitle);
        $story_options = array ();

				...269行目。ここに追加

        if (($_CONF['hideemailicon'] == 0) && (!empty ($_USER['username']) ||
    ... 以下省略

とまあ、ハックはこんな感じ。追加する場所によっては権限が無いときに表示されるブロックや、印刷時の出力用などのブロックがあるので適当に追加すると期待通りの動作をしない。

ここからが手探り、Geeklog公式の話題ごとに異なるテーマとかを見ても、異なる画像を表示しているだけでその部分が表示されたりされなかったりするわけでは無いので期待した動きをしない。HTMLソース的にはただテーマ文字列と同じ名称を持つ画像を選んでるだけなのだ。

そこで、css の display などを使用する事を検討したが、無理と判断。
最終的に選択した方法が、Javascript で文字列を書き出す方法。
くろねこは、ゼネピックとMoEのブログにコピーライトを表示させたかったので、下記のような Javascript になった。

<script type="text/javascript">
<!--
switch("{story_topic_id}") {
  case "Blog_Game_XenepicOnl":
  case "Game_XenepicData":
    document.write("<p>(c)2005-2008 DNC Entertainment<br />(c)2008 Q Entertainment Inc.</p>");
    break;
  case "Blog_Game_MoE":
    document.write("<p>(C)2007 HUDSON SOFT / GONZO ROSSO All rights reserved.<br /> 株式会社ゴンゾロッソ及び株式会社ハドソンの著作権を侵害する行為は禁止されています。</p>");
    break;
}
// -->
</script>

これを記事の本文テンプレートの表示したい位置に追加する。くろねこは、最下部に表示したかったので最後の</div>の直前に追加した。これで、story_topic_id ごとに switch で分岐して適切な文言が document.write で出力される。
今回の処理では switch を使ったので話題が増えても分岐を増やすだけで対応可能なのでとても便利である。
しかし、複数のテーマを使用するならこの JavaScript は外部ファイルにしておくほうが、メンテナンスはしやすいだろう。 とりあえず今回は、PC用のテーマは1つだったのでこの形としている。

12-08追記
article.thtml に追加すると個別表示した際の一番下などに表示することが出来ますね。
そこにアフィリエイト広告を追加してみました。よかったらクリックしてみてください。

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/081205_design_each_topic

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。