Nucleus(JP)フォーラム Forum Index

Find on the forum:
OR  AND    » Advanced Search

未返信の記事を表示全てのフォーラムを既読にする

新しいトピックを投稿 トピックに返信
投稿者 メッセージ
藤咲
モデレーター
モデレーター


登録日: 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等を指定すればいいのでは。取り合えず思いついたことを断片的に書いておきます。(※全て未検証ですが)

ああ、そういう手もありますよね Shocked
全然考えてなかったです(^^;

でも結局最初のアイディアに固執しまして、以下のようにしました。
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