dポイントプレゼントキャンペーン実施中!

Perlで組んでいます。

メニューがあり、コンテンツを更新するとNew!とつけたいです。
1.お知らせ
2.ニュース
3.BLOG New!




管理画面を作り、
チェックボックスをメニューの数作りチェックしたナンバーを
カンマ区切りで記録するところまではOK。
たとえば、2,4,6など。

それを取り出して2番目、4番目、6番目のメニューにNew!マークを
つけたいのですが、いい案が思いつきません。

いま途中ですが、参考程度に見てください。
かなり中途半端な作りになっています。
↓↓
%menu = ("0" => "", "1" => "", "2" => "", "3" => "", "4" => "", "5" => "", "6" => "", "7" => "", "8" => "", "9" => "");
foreach $eachman (@txt) {
(@menu) = (split(/,/, $eachman));
}
#どの連想配列に更新マークをつけるか?
if ( $menu == 0 ) {
$span[0] = $sp;
} elsif ( $menu == 1 ) {
$span[1] = $sp;
} elsif ( $menu == 2 ) {
$span[2] = $sp;
} elsif ( $menu == 3 ) {
$span[3] = $sp;
} elsif ( $menu == 4 ) {
$span[4] = $sp;
} elsif ( $menu == 5 ) {
$span[5] = $sp;
} elsif ( $menu == 6 ) {
$span[6] = $sp;
} elsif ( $menu == 7 ) {
$span[7] = $sp;
} elsif ( $menu == 8 ) {
$span[8] = $sp;
}

#=メニュー画面抜粋==
<p><A HREF=\"$home/myne/">1.お知らせ</A>$span[0]</p>
<p><A HREF=\"$thisurl?>2.ニュース</A>$span[1]</p>
<p><A HREF=\"$thisurl?mycmd=>3.blog</A>$span[2]</p>

としています。連想配列を使ってシンプルに仕上げる方法
あるでしょうか?

A 回答 (3件)

No.1です。

すみません。微妙に間違えていたので再投稿させていただきます。

おそらく、データを記録するときに「2,4,6」とするよりも「0,1,0,1,0,1,0,0…」とした方が結果出力するときにやりやすいのではないかと思います。左からnewを付けたい場合に「1」付けたくない場合に「0」と順番にカンマ区切りで記録していきます。

その場合、

$itemmax = 9;#メニューの数
@menuname = ("メニュー1","メニュー2",…)
@url = ("URL1","URL2",…)

foreach $eachman (@txt) {
@menu = (split(/,/, $eachman));
}

for ($i=0;$i<9;$i++) {
$ix = $i+1;
if ($menu[$i]) { $w = "new!";} else { $w = "";}
print qq(<p><A HREF="$url[$i]">$ix.$menuname[$i]</A>$w</p>);
}
    • good
    • 0
この回答へのお礼

おかげさまでできました。

1,0,0・・のように記録するのはやめて7,8,9で
記録し、foreachでまわし、合致するメニュー番号のみに
New!マークがつくようにアレンジしました。

まだいろいろ改変したいのでそのときはぜひまた
よろしくお願いします。

お礼日時:2007/11/17 10:15

($mtime) = (stat($file))[9];


とすると$fileの更新時間を取ってくれるので、それで判定すると自動でやってくれるので面倒では無い気もします。

@file=('a.htm','b.htm');
$time = time;
$i = 0;
foreach(@file){
($mtime) = (stat($file))[9];
$mtime += 60*60*24*1; # 更新時間の一日後
if($time < $mtime){
$span[$i] = 'New';
}
とかすると自動でいい感じになるやもしれませぬ。

実運用だとデータをテキストで持って
0\お知らせ\tinfo.htm\tmynu/\n
1\tニュース\tnews.dat\tnews.cgi\n
2\tblog\tblog.dat\t./blog/\n
とかして、
foreach $data (@data) {
chomp($data);
($a,$b,$c,$d) = split(/\t/,$data);
($mtime) = (stat($c))[9] + 60*60*24*1;
print qq|<p><A HREF="$d">$b</A>|;
if($time < $mtime){
$span[$i] = 'New';
}
print qq|</p>\n|;
}
とかやればメンテがしやすいと思います。
    • good
    • 0

おそらく、データを記録するときに「2,4,6」とするよりも「0,1,0,1,0,1,0,0…」とした方が結果出力するときにやりやすいのではないかと思います。




$itemmax = 9;#メニューの数
@menuname = ("","メニュー1","メニュー2",…)

foreach $eachman (@txt) {
@menu = (split(/,/, $eachman));
}

for ($i=1;$i<=9;$i++) {
if ($menu[$i]) { $w = "new!";} else { $w = "";}
print qq(<p><A HREF="URL">$i.$menuname</A>$w</p>);
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!