Nucleus(JP)フォーラム Forum Index

Find on the forum:
OR  AND    » Advanced Search

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

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


登録日: 2004.03.18
記事: 1490
所在地: 横浜

記事 日時: 2005.03.09 (水) 04:31   記事の件名: アイテムによってテンプレートを分けることってできるでしょうか?
引用付きで返信

あるカテゴリーのアイテムを表示するときだけ,別のテンプレートを使いたいと思っています。
カテゴリー表示のときに分けるのではなく,「メインの目次」などで一覧で出ているときに,
そのカテゴリーのアイテムのときだけ違う処理にしたいのです。

テンプレートでは<%if%>も使えないし,タカさんのWritePHPxsもテンプレート変数が記述できないし,で
行き詰っています。

_________________
Foodyn CMS開発日誌
http://www.matsubarafamily.com/lab/

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
nakahara21
モデレーター
モデレーター


登録日: 2003.11.14
記事: 1298
所在地: 尼崎

記事 日時: 2005.03.09 (水) 08:44   記事の件名:
引用付きで返信

私も同じ事考えてます。
現状では実現できるプラグインはなさそうだなーと思ってます。
例えばShowBlogsなんかだと自分で書いたプラグインなのですぐに改変して対応することができるのですが.....
今のコーディングのままだと、記事1個ずつクエリ発行となるので、負荷がかかるなぁ、と思って作ってません。

実際php+mysqlだからそんなに遅くなることはないのかも、とも思うんですけどね。
(サムネイルの動的生成なんかに比べたら全然マシなのかもしれないけど)

だから負荷を回避するために、ShowUsingQueryを使い回すのではなく、コピペしてちょっと手直しした別functionを用意するべきだなーで半年ストップしてます Crying or Very sad

実際、これができると、most visitorに興味なさげなカテゴリの記事はタイトルのみ表示とかできて、すっごく欲しい機能なんですよね Wink

_________________
nakahara21
http://nakahara21.com/
*移転しています

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
kalm



登録日: 2004.11.13
記事: 7

記事 日時: 2005.03.09 (水) 09:00   記事の件名: Re: アイテムによってテンプレートを分けることってできるでしょうか?
引用付きで返信

はじめまして, dj krist です.

Andy wrote:
カテゴリー表示のときに分けるのではなく,「メインの目次」などで一覧で出ているときに,
そのカテゴリーのアイテムのときだけ違う処理にしたいのです。

どの程度テンプレートの内容を変えるのかにもよりますが, ひとつのテンプレート内で NP_WritePHPxs を使って 部分的 に出力を制御する方法も取れると思います. NP_WritePHPxs は 「テンプレート内では、テンプレート変数を使用しなければ使えます」 となっていますので, テンプレート内で例えば

Code:
<%WritePHPxs(
global $catid;
if ($catid == 3) {
  echo '<h2 class="special_category">';
}
else {
  echo '<h2 class="item">';
}
)%>
<%title%>
</h2>

のように, プラグインの呼び出しと変数の呼び出しを完全に分離して書くこともできると思います. ただ, こう条件分岐ばかりではサーバへの負荷もその分高まりますし, あまり実用的とは言えません. これは NP_WritePHPxs だけでそれを実現するためのアイデア程度です. Sad

他には, テンプレートの <%if%> 変数でカテゴリ ID を呼び出せるようにコアを編集, または <%blog%> 変数で特定のカテゴリのテンプレートを変えられるようにコアを編集するという 2 点が頭に浮かんだのですが. nakahara21 さんも仰っているように今のところこういった機能に対応したプラグインは無いようですので, 少なくともコアの編集は必要ではないでしょうか.

nakahara21 wrote:
だから負荷を回避するために、ShowUsingQueryを使い回すのではなく、コピペしてちょっと手直しした別functionを用意するべきだなーで半年ストップしてます Crying or Very sad

nakahara21 さん, 先日は NP_ShowBlogsEx の件, ありがとうございました. ところでこの機能についてですが, NP_ShowBlogsEx のほうで検討してみてもよろしいでしょうか Question

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
nakahara21
モデレーター
モデレーター


登録日: 2003.11.14
記事: 1298
所在地: 尼崎

記事 日時: 2005.03.09 (水) 11:49   記事の件名:
引用付きで返信

なんだかよくわかってないですが、私の作った物ベースのことなら何でもご自由にどうぞ。

単純に、テンプレート名にcatidくっつけてクエリ発行させればいい、とか思ってるんですけど(^^ゞ
テンプレートを変化させたい特定のカテゴリについては、「grey/short_5」とかテンプレートを準備しておく。
存在しない、「grey/short_6」を呼び出そうとするときは事前に検知して、「grey/short」を呼び出す。
みたいなかんじで。

さぼりすぎですけど。

_________________
nakahara21
http://nakahara21.com/
*移転しています

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
jun
モデレーター
モデレーター


登録日: 2004.02.07
記事: 346

記事 日時: 2005.03.09 (水) 13:18   記事の件名: Re: アイテムによってテンプレートを分けることってできるでしょうか?
引用付きで返信

Andyさん wrote:
カテゴリー表示のときに分けるのではなく,「メインの目次」などで一覧で出ているときに,
そのカテゴリーのアイテムのときだけ違う処理にしたいのです。

 カテゴリー表示のときに分けるんだったら、NP_MultiBlogsを少しカスタマイズすれば実現可能ですが、nakahara21さんが言及しているようにShowUsingQueryを使っているプラグインなので無理ですね。

 別トピの話で恐縮ですが、ついでなのでNP_MultiBlogs絡みということで書いておきます。
 テンプレートのコメント部分への記述ですが、おそらく下記コードをNP_MultiBlogsの「function doTemplateVar」の上あたりに追加すればOKかと思われます。
Code:
   function doTemplateCommentsVar(&$item, &$comment, $mode = '') {
      if(!$mode || $mode == 'i') $this -> doTemplateVar(&$item, $mode);
   }

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信
Andy
モデレーター
モデレーター


登録日: 2004.03.18
記事: 1490
所在地: 横浜

記事 日時: 2005.03.09 (水) 18:16   記事の件名: Re: アイテムによってテンプレートを分けることってできるでしょうか?
引用付きで返信

ShowBlogsやMultiBlogsを大きく改造すれば,できないことはないのは分かるのですが,ブログ表示系のプラグインは好みがあるので,できればそれに依存しないでできないかなあと。

とすると,考えられるのはWritePHPxsを改造してテンプレート変数をパースできるようにすること。
やってみたら,一応動くようになりました。追加した部分だけ掲載しておきます。At your own riskでお願いします。
Code:

    function doTemplateVar() {
        $params = func_get_args();
        $item = $params[0];
        array_shift($params); //remove 'item'
        $code = implode(',',$params);
       
        ob_start();
        $this->parse_code($code,$skinType);
        $content = ob_get_contents();
        ob_end_clean();
       
        $this->_doTemplateParse($content, $item);
    }

   function _doTemplateParse($content,&$item) {
      global $blogid, $currentTemplateName;
   
      $template = TEMPLATE::read($currentTemplateName);
      
      // create parser object & action handler
      
      $blog = new BLOG($blogid);
      $actions = new ITEMACTIONS($blog);
      $parser = new PARSER($actions->getDefinedActions(),$actions);
      $actions->setTemplate($template);
      $actions->setParser($parser);
      $item->timestamp = strtotime($item->itime);
      $actions->setCurrentItem($item);
        $content = preg_replace(array('/<:/','/:>/'), array('<%','%>'), $content);
      $parser->parse($content);
   }         

この修正に伴って,doSkinVar内でskintypeがtemplateの場合を考慮しなくてよくなるので,そっちはだいぶシンプルになります。

jun wrote:
 別トピの話で恐縮ですが、ついでなのでNP_MultiBlogs絡みということで書いておきます。
 テンプレートのコメント部分への記述ですが、おそらく下記コードをNP_MultiBlogsの「function doTemplateVar」の上あたりに追加すればOKかと思われます。
Code:
   function doTemplateCommentsVar(&$item, &$comment, $mode = '') {
      if(!$mode || $mode == 'i') $this -> doTemplateVar(&$item, $mode);
   }

ありがとうございます。 Very Happy

_________________
Foodyn CMS開発日誌
http://www.matsubarafamily.com/lab/

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
Andy
モデレーター
モデレーター


登録日: 2004.03.18
記事: 1490
所在地: 横浜

記事 日時: 2005.03.09 (水) 19:02   記事の件名:
引用付きで返信

あー,でもこれだけだとやっぱりやりたいことはできないんだなあと気付いて鬱 Sad
_________________
Foodyn CMS開発日誌
http://www.matsubarafamily.com/lab/

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
Andy
モデレーター
モデレーター


登録日: 2004.03.18
記事: 1490
所在地: 横浜

記事 日時: 2005.03.09 (水) 19:54   記事の件名:
引用付きで返信

一人芝居ですみません。
さっきのだとindexページのアイテムのテンプレートのところでカテゴリーで処理を分けることができません($catidがセットされないので)。
そこで,自前で持つようにしたら望みどおりの動作になりました。 Wink

改造は,
1. クラス変数で$catid, $itemidを宣言
2. クラス変数へのアクセス用に
Code:
    function catid() { return $this->catid; }
    function itemid() { return $this->itemid; }

を新設。
3. 先ほどのdoTemplateVarを
Code:
    function doTemplateVar() {
        global $itemid, $catid;
        $params = func_get_args();
        $item = $params[0];
        array_shift($params); //remove 'item'
        $code = implode(',',$params);
        $this->itemid = $item->itemid;
        $this->catid = $item->catid;

        ob_start();
        $this->parse_code($code,$skinType);
        $content = ob_get_contents();
        ob_end_clean();
       
        $this->_doTemplateParse($content, $item);
    }

に修正,です。
テンプレートからは
Code:
<%WritePHPxs(
   global $catid;
   if (NP_WritePHPxs::catid() == カテゴリーID){
       特別な処理
} else {
       普通の処理
}
)%>

みたいに利用できます。 Laughing

_________________
Foodyn CMS開発日誌
http://www.matsubarafamily.com/lab/

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動
新しいトピックを投稿 トピックに返信
特定期間内の記事を表示:   

Page 1 of 1

All times are GMT + 9 Hours

移動先:  

新規投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
投票参加: 不可
ファイル添付不可
ダウンロード:

Powered by phpBB © 2001, 2002 phpBB Group