|
|
| 投稿者 |
メッセージ |
藤咲
モデレーター

登録日: 2003.11.17
記事: 1164
所在地: 広島
|
日時: 2005.03.06 (日) 01:12 記事の件名: NP_ContentsListで特定のサブカテゴリを非表示or表示する
こちらの続きなのですが、やはりNP_ContentsListでは一部のサブカテゴリだけを表示or非表示にすることはできないようでした。
タカさんも対応の方は考えていないようでしたので、とりあえず改造を試みているのですがうまくいきません。
スキンパラメータで[]でくくった数字をカテゴリIDと判断させ、
<%ContentsList([12])%>
のようにしたらカテゴリIDが12のものだけサブカテゴリを表示、
<%ContentsList(-[12])%>
のようにしたらカテゴリIDが12のものはサブカテゴリを表示しないという風にしようと考え、
NP_ContentsListの270行目から始まる部分を
| Code: | switch(substr($val,0,1)){
case '>':
$sNewtemplate = substr($val,1);
$cnt ++;
break;
case '@':
$aOpen[] = $b->getShortName();
break;
case '-':
if(substr($val,1,2) != '*'){
if(substr($val,1,2) == '['){
$subClose[] = substr($val,2,(strrpos($val,']')-1));
}else{
$aClose[] = substr($val,1);
}
}
break;
case '[':
$subOpen[] = substr($val,1,(strrpos($val,']')-1));
break;
default:
$aOpen[] = $val;
$subOpen[] = $val;
} |
のように書き換えました。(この時点ですでにうまくいっていない気が…。)
で、サブカテゴリの展開を判定しているのが、470行目付近、
| Code: | // sub category ---
if ($subcat && (!$subcurrent || $catid == $catdata['catid']) && !$subnoOpen) { |
の部分と思うのですが、ここをどうすればいいのかがわからなくて行き詰まっています。
とりあえず
| Code: | if(isset($subOpen) && in_array($catid,$subOpen)){
$sOpen = 1;
}
if(isset($subClose) && in_array($catid,$subClose)){
$sClose = 1;
}
if ($subcat && (!$subcurrent || $catid == $catdata['catid']) && !$subnoOpen && !$sclose && !$sOpen) { |
とかしてみたのですが、当然うまくいかず…。
どなたか知恵を貸していただけませんでしょうか。
_________________ 藤咲
備忘録とかもろもろ
http://fjsk.tk/
|
|
トップに戻る
|
|
jun
モデレーター

登録日: 2004.02.07
記事: 346
|
日時: 2005.03.06 (日) 18:30 記事の件名: Re: NP_ContentsListで特定のサブカテゴリを非表示or表示する
WHERE節で除外サブカテゴリーid等を指定すればいいのでは。取り合えず思いついたことを断片的に書いておきます。(※全て未検証ですが)
「case '-':」のところに、例えば「if(substr($val,1,1) == '[') $judge = 1;」を入れた上で、「// sub category ---」のWHERE節の末尾に「if($judge) $query .= ' and scatid != '.$exceptsubcatid」のような感じで加えるとか。
ちなみに、私だったら、A.<%ContentsList(?/12/15)%>のようにしたらカテゴリIDが12と15のものはサブカテゴリを表示しないという風に、B.<%ContentsList(!/12,15)%>のようにしたらカテゴリIDが12と15のものだけサブカテゴリを表示するという風にして、$val = explode('/', $val, 2)で除外サブカテゴリーid等を配列$val[1]に格納し、それらをWHERE節において展開すると思います。 (※A.の場合はforeach文を使ってループ処理させる)
NP_MultiBlogsでは同様のことが実現しているみたいなので、バージョン2.44の「// for NP_MultipleCategories」の「if($mcat[0] == 'scat')」以下のソースが参考になるかも。
|
|
トップに戻る
|
|
藤咲
モデレーター

登録日: 2003.11.17
記事: 1164
所在地: 広島
|
日時: 2005.03.11 (金) 01:54 記事の件名: Re: NP_ContentsListで特定のサブカテゴリを非表示or表示する
| jun wrote: | | WHERE節で除外サブカテゴリーid等を指定すればいいのでは。取り合えず思いついたことを断片的に書いておきます。(※全て未検証ですが) |
ああ、そういう手もありますよね
全然考えてなかったです(^^;
でも結局最初のアイディアに固執しまして、以下のようにしました。
NP_ContentsListの270行目から始まる部分を
| Code: | if (count($params)>0) {
$cnt = 0;
foreach ($params as $val) { //easy check
if (preg_match("/^[a-z]+\s*[!<>=]{1,3}\s*[^!<>=\s]+$/",$val)) {
$aWhere[] = 'b.'.$val;
$cnt ++;
} elseif ($val == "@s") {
$subcurrent = 1;
$cnt ++;
} elseif ($val == "-*s") {
$subnoOpen = 1;
$cnt ++;
} else {
switch(substr($val,0,1)){
case '>':
$sNewtemplate = substr($val,1);
$cnt ++;
break;
case '@':
$aOpen[] = $b->getShortName();
break;
case '-':
if(substr($val,1,1) != '*'){
if(substr($val,1,1) == '['){
$subClose[] = substr($val,2,-1);
}else{
$aClose[] = substr($val,1);
}
}
break;
case '[':
$subOpen[] = substr($val,1,-1);
break;
default:
$aOpen[] = $val;
}
}
}
if ($cnt == count($params)) $catAll = 1;
} else {
$catAll = 1;
} |
*別件:279行目が
| Quote: | | if(substr($val,1,2) != '*'){ |
ってなってたんですけど、これって
| Quote: | | if(substr($val,1,1) != '*'){ |
が正しいですよね?
あと、// sub category ---のあとに
| Code: | switch (true) {
case !isset($subOpen) && !isset($subClose):
case isset($subOpen) && in_array($catdata['catid'],$subOpen):
case isset($subClose) && !in_array($catdata['catid'],$subClose):
|
を加えて、
// ---------------の前で}を追加。
これで[]に入った数字のカテゴリIDの場合だけサブカテゴリを表示するか、
-[]に入った数字のカテゴリIDの場合のみサブカテゴリを非表示にするかという動作ができるようになりました。
ただし、@や、blogShoortNameを使用して「どのブログを表示させるか」を指定しないとうまく動作しませんので
この改造をする場合は注意してください。
_________________ 藤咲
備忘録とかもろもろ
http://fjsk.tk/
|
|
トップに戻る
|
|
|
|
|
|
Page 1 of 1
All times are GMT + 9 Hours
新規投稿: 不可 返信投稿: 不可 記事編集: 不可 記事削除: 不可 投票参加: 不可 ファイル添付不可 ダウンロード: 可
Powered by phpBB © 2001, 2002 phpBB Group
|