Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2004-07-05 04:13:32

Rinoa
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

お初にお目にかかります。Rinoaといいます。

いきなり本題なんですが、「現在のアイテムが属するblogのID」をテンプレートで表示したく思い、方法をご教授願えないかと思います。

見本があったほうがいいかと思いましたので、まだデザインが途中の状態で申し訳ないんですが、画像をアップしておきます。

NP_AllBlogsを使って、複数のBlogのアイテムをまとめて表示させてる状態です。その際に、どのブログのアイテムか、というのが一目で判るように、blogのID別に画像を変えたいのです。アップした画像だと、カラフルな球状の表示の部分です。

現在は、応急処置で<%catid%>を使って「現在のアイテムが属するカテゴリーのID」別に画像を分けている状態ですが、これではカテゴリーが増えるたびにCSSを弄らなければならないため、あまり効率が良くありません。でも、<%blogid%>だと、「現在閲覧しているblogのID」になってしまって、全部同じ色になってしまい、意味がありません。

「現在のアイテムが属するblogのID」が表示できるようになれば、そのアイテムのblogidが1であれば青色、2であれば緑色といったことができそうなのです。

いろんなプラグインを調べたり、中身をみたりしても、プログラムの命令文(?)自体が判らないので、自分では全くお手上げです。PHPやMySQLの解説サイトを覗いてはみたのですが、難しい言葉や複雑なプログラムばかりで全然判りません。NP_AllBlogsでカテゴリー表示をすると、きちんと「現在のアイテムのBlogの名前」が表示されてるので、きっとできるはずなんですが・・・。

判る方は是非、回答のほう、よろしくお願いします。


Attachments:
gif 1.gif, Size: 13.16 KiB, Downloads: 14,172

#2 2004-07-05 10:11:47

jun
メンバー
登録日: 2004-02-07
投稿: 345

Re: 現在のアイテムが属するblogのIDを表示させた

あまりよく分かっていませんが、 NP_AllBlogsの199行目を、

$query .= ' concat(c.cname, " / ", ifnull(b.bname,"")) as category,' ;

例えば以下の通りに変更すれば、取り合えずblogのIDを表示することができるはずです。

$query .= ' concat(c.cname, " / ", b.bnumber, ".", ifnull(b.bname,"")) as category,' ;

ちなみにphpMyAdminの「nucleus_blog」テーブルを見れば、「MysqlではbnumberがblogのIDなんだ」ということが何となく分かると思います。ご参考までに。

オフライン

#3 2004-07-05 12:10:22

ゲストユーザー
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

Junさん、はじめまして。回答ありがとうございます。参考にさせていただきました。
今自分の書き込みを見たらちょっと判りづらかったですね。(^^;

Junさんが書かれたことをやってみたら、確かにそれぞれのアイテムのBlogIDが出てきました。
ただ、これだとAllBlogsの中で出力されてしまうので、別途の命令文でBlogIDが引き出せたらいいなと思ってます。

例えば、<%AllBlogid%>とテンプレート内で入力すると、1、とか2とか出てくるような感じです。

#4 2004-07-05 12:12:03

Rinoa
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

上の書き込みは私です。失礼しました。

#5 2004-07-05 13:02:41

jun
メンバー
登録日: 2004-02-07
投稿: 345

Re: 現在のアイテムが属するblogのIDを表示させた

Anonymousさん さんの発言:

例えば、<%AllBlogid%>とテンプレート内で入力すると、1、とか2とか出てくるような感じです。

テンプレート内に記述する方法は思いつきませんが、Anonymousさんがアップした画像を見る限り、以下のようにすればカラフルな球状を表示できると思います。

NP_AllBlogsの198行目を、

$query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, UNIX_TIMESTAMP(i.itime) as timestamp, i.itime, i.imore as more, m.mnumber as authorid,' ;

以下の通りに変更した上で、

$query = 'SELECT i.inumber as itemid, i.ibody as body, m.mname as author, m.mrealname as authorname, UNIX_TIMESTAMP(i.itime) as timestamp, i.itime, i.imore as more, m.mnumber as authorid,' ;

その後に↓を挿入すれば、タイトルの前にblogのIDを表示することができると思います。

$query .= ' concat(b.bnumber, i.ititle) as title,' ;

また、例えば/nucleus/icon/ディレクトリに、blogのIDごとのアイコン(1.gif,2.gif…)を置いている場合、↑を以下のようにすればblogのIDごとにカラフルな球状アイコンを表示することができると思います。

$query .= ' concat("<img src="/nucleus/icon/", b.bnumber, ".gif" alt="icon" />", i.ititle) as title,' ;

これでいいのかしら? 見当外れだったらゴメンナサイ :oops:

オフライン

#6 2004-07-05 16:14:06

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

ずっと前に作っていたものを公開。

<?php 
class NP_ItemBid extends NucleusPlugin { 
    function getEventList() { return array(); } 
    function getName() { return 'Show blogid';    } 
    function getAuthor() { return 'nakahara21';    } 
    function getURL() { return 'http://xx.nakahara21.net'; } 
    function getVersion() { return '0.9'; } 
    function getDescription() { return 'Displays blogid of the item'; } 
    function supportsFeature($what) { 
        switch($what){ 
            case 'SqlTablePrefix': 
                return 1; 
            default: 
                return 0; 
        } 
    } 
    function doTemplateVar(&$item) { 
        $thisblogid = getBlogIDFromItemID($item->itemid); 
		echo $thisblogid;
    } 
} 
?>

これを「NP_ItemBid.php」として保存、サーバに転送後管理エリアでインストールすれば、普通にテンプレートで
<%ItemBid%>と書くとそこにblogidが入るはず。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#7 2004-07-05 16:15:24

Rinoa
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

なるほど、そういう方法もあるんですね。ただ、これだとIMGタグを使わなければならないのがネックでしょうか。IMGタグを入れると別スキンでもアイコンを入れなければならなくなってしまうので。

上の画像ではカテゴリーのIDでクラス分けをして、スタイルシートで画像を表示している状態です(例えばカテゴリーIDが2ならば、cat2というクラスを作成して、そのクラスのBackground-Imageで左端に画像を表示)。

で、IMGタグの部分とかを勝手に変えてみて、無理やりテンプレートとつなげてたりしたんですが、TOPページではうまくいったものの、TOPではない別のブログに行くと<%AllBlogs%>ではないので、記述が反映されず、結局、無理やりは良くないという結論に行き着きました。(^^;
ちなみにどういう風に無理やりにしたかというと、

junさん さんの発言:

また、例えば/nucleus/icon/ディレクトリに、blogのIDごとのアイコン(1.gif,2.gif…)を置いている場合、↑を以下のようにすればblogのIDごとにカラフルな球状アイコンを表示することができると思います。

$query .= ' concat("<img src="/nucleus/icon/", b.bnumber, ".gif" alt="icon" />", i.ititle) as title,' ;

のコードの部分を

$query .= ' concat(""blogitemid", b.bnumber, "">", i.ititle) as title,' ;

としました。あとはテンプレートでh3タグのクラスを中途半端に書いてBlogIDをくっつけるだけです。結果、BlogIDが4の場合、

<h3 class="blogitemid4">Itemtitle [ <a href="http://(略)/">category / blogname</a> ]</h3>

のようになります。あんまり無理やりすぎですね。(苦笑

うーん、やっぱり、専用のプラグインが必要のようです・・・。

#8 2004-07-05 16:16:15

ゲストユーザー
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

おっと、書いてたら別の方の投稿が。

今から試してみますね。

#9 2004-07-05 16:30:11

Rinoa
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

nakahara21さん、ありがとうございました。無事BlogIDを取得し、ブログごとの画像分けができるようになりました。

お二方のおかげで勉強になりました。少しはプラグインを作る勉強をしたほうがよさそうですね。その前にPHPの基礎中の基礎からでしょうけど・・・。

お二方とも、お忙しい中ありがとうございました。(^^

#10 2004-07-22 11:33:12

とりい
ゲストユーザー

Re: 現在のアイテムが属するblogのIDを表示させた

:Dはじめまして。
上記のNP_ItemBidを少し書き換えてブログIDの代わりにブログ名を表示するやり方を作者のnakahara21さんに教えていただいたので(ありがとうございました!)付け加えておきます。
「NP_ItemBid.php」の18、19行目の

$thisblogid = getBlogIDFromItemID($item->itemid); 
      echo $thisblogid;

$thisblogid = getBlogIDFromItemID($item->itemid);
$thisblogname = getBlogNameFromID($thisblogid);
echo $thisblogname;

で置換すればブログIDの代わりにブログの名前が表示されます。

#11 2004-07-22 11:44:43

Taka
メンバー
From: 千葉
登録日: 2003-11-17
投稿: 264
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

私も前まで使ってたやつ置いときます。テンプレートで
<%blogsetting(id)%>と<%blogsetting(name)%>と<%blogsetting(url)%>
が使えます。出力されるのはもち、そのアイテムのblog情報です。

<?php 

class NP_blogsetting extends NucleusPlugin { 
  function getEventList() { return array(); } 
  function getName() { return 'blogsetting'; } 
  function getAuthor() { return 'Taka'; } 
  function getURL() { return 'http://vivian.stripper.jp'; } 
  function getVersion() { return '0.1'; } 
  function getDescription() { 
    return 'This plugin extends Template Variables.'; 
  } 

  function supportsFeature($what) {
    switch($what){
      case 'SqlTablePrefix':
        return 1;
      default:
        return 0;
    }
  }

  function doTemplateVar(&$item,$what) {
    global $CONF, $manager;
    $itemid = $item->itemid;
    $bid = getBlogIDFromItemID($itemid);
    $b =& $manager->getBlog($bid);
    switch ($what) {
      case 'id':
        echo $bid;
        break;
      case 'name':
        echo $b->getName();
        break;
      case 'url':
        if ($CONF['URLMode'] == 'pathinfo'){
          $link = $CONF['BlogURL'] . '/blog/' . $blogid;
        }else{
          $blogurl = $b->getURL();
          if(!$blogurl){
            $blogurl = $CONF['BlogURL'];
          }
          if(substr($blogurl, -4) != '.php'){
            if(substr($blogurl, -1) != '/')  $blogurl .= '/';
            $blogurl .= 'index.php';
          }
          $link = $blogurl . '?blogid=' .$b->getID();
        }
        echo $link;
        break;
    }
    
  }

}
?>

オフライン

#12 2006-03-01 19:21:52

cha_cya
メンバー
From: 東京
登録日: 2004-08-25
投稿: 745

Re: 現在のアイテムが属するblogのIDを表示させた

別に改造でもなんでもないですが。一応。

Taka さんの発言:
    switch ($what) {
      case 'id':
        echo $bid;
        break;
      case 'name':
        echo $b->getName();
        break;
      case 'shortname': 
        echo $b->getShortName();
        break;

(caseをひとつ追加)のようにしておくと、<%blogsetting(shortname)%>でそのアイテムのbshortnameが得られます。
特殊な構造のサイトじゃないといらないかもですが roll
#便利ですねこれ

オフライン

#13 2008-08-19 18:37:59

Ephemera
メンバー
登録日: 2006-09-08
投稿: 18
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

NP_BlogSetting(Takaさん+cha_cyaさん作)とNP_BlogInfo(avaさん作)をくっつけた「NP_BlogInfo」のコードをUPします。
自らの必要性に迫られてPHPの入門書を片手に手直し致しました。作者の方々には無断でコードを引用して公開し申し訳ありません。
ずうずうしくはありますが、訂正・改良箇所がございましたら教えて頂けますと嬉しいです yikes

引用元 :
2004-07-22 NP_BlogSetting Ver.0.1.0 (Taka) released the first source:
<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewtopic.php?p=2765#2765">viewtopic.php?p=2765#2765</a><!-- l -->
2005-10-23 NP_BlogInfo Ver.0.1.0 (ava) released the first source:
<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewtopic.php?p=9382#9382">viewtopic.php?p=9382#9382</a><!-- l -->
2006-03-01 NP_BlogSetting Ver.0.1.1 (cha_cya) added the function:
<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewtopic.php?p=11252#11252">viewtopic.php?p=11252#11252</a><!-- l -->

機能 :
1, 標準のスキン変数<%blogsetting%>と同様の機能をスキン及びテンプレートで実現
ex.) <%BlogInfo(id)%>, <%BlogInfo(short)%>, <%BlogInfo(name)%>, <%BlogInfo(desc)%>, <%BlogInfo(url)%>

2, 第2パラメータにblogidを指定する事で、指定したidのブログのnameやurlなどが表示できる。
ex.) <%BlogInfo(id,3)%>, <%BlogInfo(short,3)%>, <%BlogInfo(name,3)%>, <%BlogInfo(desc,3)%>, <%BlogInfo(url,3)%>

経緯 :
以前は、こちらのスレッドのTakaさんとcha_cyaさんが掲載されたコードからNP_BlogSettingというプラグインを作って利用していましたが、ある日サイトの手直しをした際消失しました。

しかしこの度、再度必要になった為プラグインページを見ていると、同機能のNP_BlogInfoが掲載されていましたので、こちらを利用し始めました。
NP_BlogSettingにプラスアルファの機能が付いていたので、それにも興味がありました。

けれども残念な事に、BlogInfoは、複数ブログ混合の状況下において、テンプレートで使用した際、正常に動作しませんでした(スキンではOK)。
──具体的に言いますと、blogid=1のブログの中にblogid=2や3のitemを表示していた場合、テンプレートにて<%BlogInfo()%>を記載すると、2や3ではなく全てblogid=1として扱われたのです。
「global $blogid」を使うか「getBlogIDFromItemID($item->itemid)」を使うかの違いですね。

但し、NP_BlogInfo独自の機能(機能 2)も捨てがたかった為、私のPHPの勉強も兼ねまして、両方のプラグインをくっつけた次第です。

尚、一機能("選択中のブログの設定を挿入")に対して複数の名前が存在すると不便だろうという理由でNP_BlogSettingとして作業を進めていましたが、スキン関数として使用した際にデフォルトの<%blogsetting%>とブッキングする事が発覚、大文字小文字の判別をしないのですね・・、機能2の第2パラメータが受け付けられなかった為、名をNP_BlogInfoに改めました。

<?php

/*
	2004-07-22 NP_BlogSetting Ver.0.1.0 (Taka) released the first source: http://japan.nucleuscms.org/bb/viewtopic.php?p=2765#2765
	2005-10-23 NP_BlogInfo Ver.0.1.0 (ava) released the first source: http://japan.nucleuscms.org/bb/viewtopic.php?p=9382#9382
	2006-03-01 NP_BlogSetting Ver.0.1.1 (cha_cya) added the function: http://japan.nucleuscms.org/bb/viewtopic.php?p=11252#11252
	2008-08-19 NP_BlogInfo Ver.0.1.1 (ephemera) united NP_Info with NP_BlogSetting:
*/

class NP_BlogInfo extends NucleusPlugin {
	function getName() {
		return 'BlogInfo';
	}

	function getEventList() {
		return array();
	}

	function getAuthor() {
		return 'Taka + cha_cya + ava + ephemera';
	}

	function getURL() {
		return 'http://japan.nucleuscms.org/bb/viewtopic.php?p=2765#2765';
	}

	function getVersion() {
		return '0.1.1';
	}
/*
	function init() { 
		// include language file for this plugin
		$language = ereg_replace( '[\\|/]', '', getLanguageName());
		if (file_exists($this->getDirectory().$language.'.php')) {
			include_once($this->getDirectory().$language.'.php');
		} else {
			include_once($this->getDirectory().'english.php');
		}
	}

	function getDescription() {
		return _BLOGINFO_Description;
	}
*/

	function getDescription() {
		return '1, Plug-in to replace <%blogsetting%> in skin and template. <br />ex.) <%BlogInfo(id)%>, <%BlogInfo(short)%>, <%BlogInfo(name)%>, <%BlogInfo(desc)%>, <%BlogInfo(url)%> <br />2, Plug-in that obtains name and url of blog that specifies blogid for the second paragraph. <br />ex.) <%BlogInfo(id,3)%>, <%BlogInfo(short,3)%>, <%BlogInfo(name,3)%>, <%BlogInfo(desc,3)%>, <%BlogInfo(url,3)%>';
	}

	function install() {
	
	}

	function supportsFeature($what) {
		switch($what){
			case 'SqlTablePrefix':
				return 1;
			default:
				return 0;
		}
	}

	function doTemplateVar(&$item, $mode, $m_blogid='') {
		$this->ModeSelect($item, $mode, $m_blogid, 0);
	}

	function doSkinVar($skinType, $mode, $m_blogid='') {
		$this->ModeSelect($skinType, $mode, $m_blogid, 1);
	}

	function ModeSelect($item, $mode, $m_blogid, $st){
	
		global $CONF, $blogid, $manager;
		if($st){
			$bid = $blogid;
		}else{
			$itemid = $item->itemid;
			$bid = getBlogIDFromItemID($itemid);
		}

		if($m_blogid){
			$bid = $m_blogid;
		}

		$b =& $manager->getBlog($bid);
		switch ($mode) {
			case 'id':
				echo $bid;
				break;
			case 'name':
				echo $b->getName();
				break;
			case 'desc':
				echo $b->getDescription();
				break;
			case 'short':
				echo $b->getShortName();
				break;
			case 'url':
				echo $b->getURL();
				break;
/* ----------
			case 'url':
				if ($CONF['URLMode'] == 'pathinfo'){
					$link = $CONF['BlogURL'] . '/blog/' . $blogid;
				}else{
					$blogurl = $b->getURL();
					if(!$blogurl){
						$blogurl = $CONF['BlogURL'];
					}
					if(substr($blogurl, -4) != '.php'){
						if(substr($blogurl, -1) != '/')	$blogurl .= '/';
						$blogurl .= 'index.php';
					}
					$link = $blogurl . '?blogid=' .$b->getID();
				}
				echo $link;
				break;
---------- */
			default:
				break;
		}
	}
}
?>

<del>余分な事</del>プラグインDescriptionの英語・EUC・UTF-8対応 をやってZIP化した物を添付しておきます。


Attachments:
zip NP_BlogInfo011.zip, Size: 2.24 KiB, Downloads: 218

オフライン

#14 2008-10-21 10:31:51

yama
Administrator
登録日: 2005-07-07
投稿: 1,244
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

気付くのが遅くなりましたが、こちらを最新としてwikiに掲載させていただきました。

オフライン

#15 2008-11-11 19:34:46

Ephemera
メンバー
登録日: 2006-09-08
投稿: 18
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

機能(3)を追加しました。機能(2)の応用です。

メンバーの情報を固定表示します。スキン・テンプレート・スペシャルスキンどれでも使えました。
NP_Profileが同様の機能を持っていそうな印象を受けましたけど、
こちらは独自テーブルを作成しないプラグイン・・という事で。

この機能・・BlogInfoというより、MemberInfoという感じです :?

--------------------

1, 引数に[id][short][name][desc][url]を指定し、標準のスキン変数<%blogsetting%>と同様の機能をスキン及びテンプレートで実現。
- 記述例 : <%BlogInfo(id)%>

2, 第2引数でblogidを指定し、そのidのブログの[id][short][name][desc][url]を表示。
- 記述例 : <%BlogInfo(id,3)%>

3, 第2引数にmemberidを指定し、そのidのメンバーの[name][realname][notes][url][email][id]を表示。尚、[name]らを第1引数に指定する際には、頭に[m]を付け[mname]とする事。
- 記述例 : <%BlogInfo(mname,1)%>

※ 機能(3)の利用は、第2引数が必要です。無い場合は出力されません。

--------------------

yama.kymsさま、Wikiからのリンクをありがとうございます。

何やらフォーラムの「プラグイン全般」ではなく「プラグイン」に属する内容になってきましたけど、
そうするとせっかくして戴いたリンクが切れてしまいますので、ここに追加記入致しました。
# 追加した機能も、需要があるかどうか怪しい程度のものですし lol
# もちろん自分自身ではしっかり利用しております。


Attachments:
zip NP_BlogInfo012.zip, Size: 2.6 KiB, Downloads: 188

オフライン

#16 2008-11-12 20:17:33

yama
Administrator
登録日: 2005-07-07
投稿: 1,244
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewforum.php?f=12">viewforum.php?f=12</a><!-- l -->
Ephemeraさん、もしよければ上記にトピを独立で立てて公開しちゃってください。
コアでサポートしてそうで実際にはサポートされてない機能もあって、そういう意味で重要な情報だと思います。

オフライン

#17 2008-11-13 01:29:15

Ephemera
メンバー
登録日: 2006-09-08
投稿: 18
ウェブサイト

Re: 現在のアイテムが属するblogのIDを表示させた

Nucleus(JP)フォーラム Forum Index -> フォーラムプラグインのダウンロード
に、NP_BlogInfoを掲載させて戴きました。
<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4185">viewtopic.php?t=4185</a><!-- l -->

yama.kymsさん、後押しありがとうございました。

# ・・正直なところ、他の方が作られたコードを私がアップしてしまっていいのか不安でなりません。

オフライン

#18 2008-11-13 08:14:02

cat
Administrator
登録日: 2003-11-14
投稿: 291

Re: 現在のアイテムが属するblogのIDを表示させた

NP_BlogInfo v0.12のzipファイルに元ファイルも同梱してくださるとうれしいです。

オフライン

Board footer