解決済

新着記事カテゴリに「Update!」マークを入れるのは?

新しく記事を投稿した際に、その記事のカテゴリ名の横に、「Update!」というオレンジ色の文字をフラッシュ(点滅)で入れたいのですが… CSSやHtmlにはあまり詳しくないので無謀な希望かもしれませんが、もし可能であればどなたかやり方を教えていただけると幸いです。

2008-01-27 19:46の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
Ads By Google

回答(5)

1.

2008-01-28 22:57:12みんなナイスな
スタイルシートに以下の部分を追加
/* BLINK */
span.blink {
	color:orange;
	background-color:white;
}
span.blink_off {
	color:white;
	background-color:black;
}
blink の設定は、通常表示されるスタイル
blink_off については、
上記は反転するようなスタイル
visivility:hide;
にすると表示が消えます。
設定してスタイルシートの再構築をします。
回答レベル : 回答

BLUEPIXYさん、そうでしたか。では素人が試行錯誤をむやみにするのはやめておきます。

私の説明不足でお手数をおかけしました。申し訳ないので、この先は、もし思いつけば、というレベルでコメントいただければ十分ですので。

3.

2008-01-28 23:03:35みんなナイスな
トップページのテンプレートで
</IfArticleCategory>
の後に
<script type="text/javascript"><!--
(function(){
var LimitHour = 24; //24時間 
var y = parseInt("<$ArticleDateTag$>".substr(0,4));
var m = parseInt("<$ArticleDateTag$>".substr(4,2))-1;
var d = parseInt("<$ArticleDateTag$>".substr(6,2));
var h = parseInt("<$ArticleTime$>".substr(0,2));
var mt= parseInt("<$ArticleTime$>".substr(3,2));
var checkDate = new Date(y, m, d, h, mt, 0, 0);
var LimitDate = new Date(); //今日現在
LimitDate.setTime(LimitDate.getTime() - LimitHour*3600*1000); //指定時間前
if(checkDate > LimitDate){//LimitHour 過ぎていない
    document.write('<span class="blink">Update!<\/span>');
}
})();
// -->
</script>
<noscript><BLINK style="color:orange">Update!</BLINK></noscript>
を挿入。
回答レベル : 回答

4.

2008-01-28 23:05:12みんなナイスな
<!-- Loop End -->
の後に
<script type="text/javascript"><!--
function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (var i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}
function Blink(){
    this.time_id = null;
    this.interval = 0.8;
    this.on = true;
    this.elements = getElementsByClass('blink');
}
Blink.prototype.blinking = function(self){
    var n = self.elements.length;
    for(var i=0;i<n;i++){
        if(self.on){
            self.elements[i].className=self.elements[i].className.replace(/blink/, 'blink_off');
        } else {
            self.elements[i].className=self.elements[i].className.replace(/blink_off/, 'blink');
        }
    }
    self.on = !self.on;
};
Blink.prototype.start = function(){
    if(this.elements.length)
        this.time_id=setInterval(this.blinking, this.interval * 1000, this);
};
Blink.prototype.stop = function(){
    clearInterval(this.time_id);
};
var blink1 = new Blink();
if(/*@cc_on!@*/false){
    if(blink1.elements.length)
        blink1.time_id=setInterval('blink1.blinking(blink1)', blink1.interval * 1000);
} else {
    blink1.start();
}
//-->
</script>
を挿入
トップページの再構築
回答レベル : 回答

5.

2008-01-29 17:15:01みんなナイスな
とりあえず、修正してみました。
<!-- Loop Start -->
の前に
<script type="text/javascript"><!--
var categories = [ ];
//-->
</script>
を追加する
回答3の
if(checkDate > LimitDate){
    document.write('<span class="blink">Update!<\/span>');
}
の部分を
if(checkDate > LimitDate){
    document.write('<span class="blink">Update!<\/span>');
    categories["<$ArticleCategory1Url$>"]=1;
    categories["<$ArticleCategory2Url$>"]=1;
}
に修正する。
記事にUpdate!を付けない場合は
document.write('<span class="blink">Update!<\/span>');
の行は削除
回答レベル : 回答

6.

2008-01-29 17:21:25みんなナイスな
回答4のスクリプトを
<!-- Loop End -->の後から
<div id="footer"></div>
の前に移動
そして、
function Blink(){
の前に以下を挿入
var categorie_plugin_title = "Categories";
var links_top = document.getElementById('links');
var sideTitle = getElementsByClass('sidetitle', links_top, 'div');
var side      = getElementsByClass('side', links_top, 'div');
var size = sideTitle.length;
var pos ;
for(pos = 0;pos < size;pos++){
    if(sideTitle[pos].firstChild.nodeValue == categorie_plugin_title){
        break;
    }
}
if(pos < size){
    var sidebodys = getElementsByClass('sidebody', side[pos], 'div');
    size = sidebodys.length;
    var span = document.createElement("span");
    var text = document.createTextNode("Update!");
//  document.createAttribute("class");
//  span.setAttribute("class","blink");
    span.className = "blink";
    span.appendChild(text);
    for(var x in categories){
        for(var i=0;i<size;i++){
            if(sidebodys[i].firstChild.href == x){
                sidebodys[i].insertBefore(span.cloneNode(true), sidebodys[i].firstChild);
                break;
            }
        } 
    }
}
回答レベル : 回答
Ads By Google

コメント(15)

#1.  BLUEPIXY
2008-01-27 22:15:32

昔ネスケで<BLINK>点滅</BLINK>で点滅させることができました。Firefox2.0 でもいまだに点滅させることができるようです。
しかし、これは、HTML4.1では、存在しないタグだし、CSS2にも存在しないスタイルだったと思います。
やるとしたら、擬似的にスクリプトでやるか、アニメーションGIFでやることになるのかと思いますけど、
それっていつまで最新(Update!)なんでしょうか?

#2.  
2008-01-28 10:09:21

BLUEPIXYさん、いつもコメントありがとうございます。ご説明だと「Update!」は、自動的に表示させているわけではなく、そのつど自分で書き込むということなのですね。投稿後24時間とか、特定の期間だけ、自動的に「Update!」を表示する、といったような便利なプログラムがあるのかと思っていました(^^ゞ

ちょっと私のレベルに比して、高度なことをやろうとしている気がしてきましたので、深入りしないでおこうかと思います。ありがとうございました。

#3.  BLUEPIXY
2008-01-28 13:35:51

>>#2 投稿後24時間とか、特定の期間だけ、自動的に「Update!」を表示する、といったような便利なプログラム
テンプレートにプログラム(スクリプト)を書き込んでおけばそのつど書き込む必要はありません。
今日は不在にするのですぐには無理ですが、そんなに難しいものでもないので、試しに作ってみてもいいですよ。

#4.  BLUEPIXY
2008-01-28 23:10:32

試しに作ってみました。
回答3が投稿後「Update!」24時間表示する部分で
その他の部分が点滅させる部分です。
お気に召さないかもしれませんが・

#5.  BLUEPIXY
2008-01-28 23:15:26

なお、時間の経過を調べるのは、ページを表示する時だけです。
ページを表示しておいて、時間が経過したら消える・というようにはなっていません。

#6.  
2008-01-29 09:00:09

BLUEPIXYさん、丁寧なご対応、本当にありがとうございます。教えていただいた作業に、少し腰をすえて取り組みたいと思います。また後ほど、結果報告させてください。取り急ぎですいませんが、お礼を言わせてください。

#7.  
2008-01-29 11:47:41

BLUEPIXYさん、やってみました。面白いです。想定とは少し違いましたが、Update!が点滅しています。→現状です。(http://blog.livedoor.jp/fairtradebz/

しかしUpdate!は、各記事の下に出ております。想定していたのは、記事が該当するサイドバーのカテゴリーの横に出てくる格好だったのですが… 

おそらく、ご回答3にある「トップページ</IfArticleCategory>のあと」に入れるという部分の挿入場所を間違えているのだと思います。

私のテンプレートには</IfArticleCategory1>と</IfArticleCategory2>があったので、とりあえず</IfArticleCategory1>のあとに入れてみたのです。そうすると、Update!はこのように各記事の下に出るようになりました。

もう少し試行錯誤してみたいと思います。

#8.  BLUEPIXY
2008-01-29 15:13:29

>>#7 想定していたのは、記事が該当するサイドバーのカテゴリーの横に出てくる格好だったのですが…
ええっ?!
すみません、私が質問を勘違いしておりました。
「その記事のカテゴリ」という部分を
てっきり各記事のカテゴリ表示の部分のことだと早合点しておりました。
プラグインのカテゴリ表示部分に表示するものではありませんので、試行錯誤はしても無為です。
おっしゃるようなこともできないではないと思いますけど…ちょっと考えさせていただけますか?

#9.  
2008-01-29 15:32:33

BLUEPIXYさん、そうでしたか。では素人が試行錯誤をむやみにするのはやめておきます。

私の説明不足でお手数をおかけしました。申し訳ないので、この先は、もし思いつけば、というレベルでコメントいただければ十分ですので。

#10.  BLUEPIXY
2008-01-29 17:29:24

回答6の

var links_top = document.getElementById('links');
は、
var links_top = document.getElementById('leftbody');
に変更して下さい。
回答に書いたのは古いデザインを対象としたものです。

#11.  BLUEPIXY
2008-01-29 17:32:09

だいたいうまくいくと思うんですけど、ダメならすみません。

2008-01-29 17:59:21

┃ω・)ジーッ...

(見学中)

#13.  BLUEPIXY
2008-01-29 18:08:44

>>#12
そういえば、クリップ!されているみたいですね。
(普段は別に確認とかしないんですけど、してみてビックリ!)
勢いで書いている部分があるので、色々悪い所や変な仕様があるとは思いますが、
これはおかしいというところがあったら、ご指摘下さい。
基本私はIE6とFirefox2.0でしかチェックしていなので、他のブラウザだと動かないかもしれません。

#14.  
2008-01-30 13:58:53

本当に丁寧なご回答、ありがとうございました。ご説明のとおりにカスタマイズしたところ、ばっちりでした。

結果的には、Update!を入れたことにより、コラムの幅サイズ調整などが必要になりましたので、もう少し全体構成を見直してから入れたいと思います。

ということで、折角教えていただいたのですが、いったんもとのテンプレートに戻し、また後日、再構築にトライしたいと思います。

改めて、どうもありがとうございました。

#15.  BLUEPIXY
2008-02-13 19:29:36

function Blink(){
    this.time_id = null;
    this.interval = 0.8;
    this.on = true;
    this.elements = getElementsByClass("blink");
    var self=this;
    this.blinking = function(){
        var n = self.elements.length;
        for(var i=0;i<n;i++){
            if(self.on){
                self.elements[i].className=self.elements[i].className.replace(/blink/, 'blink_off');
            } else {
                self.elements[i].className=self.elements[i].className.replace(/blink_off/, 'blink');
            }
        }
        self.on = !self.on;
    };
}
Blink.prototype.start =function(){
    if(this.elements.length)
        this.time_id=setInterval(this.blinking, this.interval * 1000);
};      
 blink1 = new Blink();
 blink1.start();

トラックバック

トラックバックURL: