ページ: 1
3.3でスペシャル・スキン・パーツができましたが,これをスキン部品としても使えないかと思ってプラグインを作ってみました。使い方はスキン中に
<%includespecial(スペシャル・スキン・パーツの名前)%>
と書くだけです。そのスキンに付属するパーツ以外は呼べません。
試作品なのでバグありありだと思いますが,試していただければと思います。
<?php
class NP_includespecial extends NucleusPlugin {
function getName() { return 'Include Special'; }
function getAuthor() { return 'Andy'; }
function getURL() { return ''; }
function getVersion() { return '0.1'; }
function getDescription() { return 'include a special skin part and, parse it'; }
function supportsFeature($what) {
switch($what)
{ case 'SqlTablePrefix':
return 1;
default:
return 0; }
}
function doSkinVar($skinType, $partsname) {
global $skinid;
$skin = new SKIN($skinid);
if (!$skin->isValid) {
return;
}
$contents = $skin->getContent($partsname);
if (!$contents) {
return;
}
$actions = $skin->getAllowedActionsForType($skinType);
// set IncludeMode properties of parser
PARSER::setProperty('IncludeMode',$skin->getIncludeMode());
PARSER::setProperty('IncludePrefix',$skin->getIncludePrefix());
$handler =& new ACTIONS($type, $skin);
$parser =& new PARSER($actions, $handler);
$handler->setParser($parser);
$handler->setSkin($skin);
$parser->parse($contents);
}
}
?>
オフライン
3.3でスペシャル・スキン・パーツができましたが,これをスキン部品としても使えないかと思ってプラグインを作ってみました。
おお、これでExtraSkinJP代替になりそうな感じです?
藤咲
備忘録とかもろもろ
http://fjsk.tk/
オフライン
ExtraSkinJPでいうと「グローバル」の部品の置き換えは可能です。
「blogのみ」とか「blogとcategory」は,ifと組み合わせて実現してもらうしかないです。
オフライン
なるほど!面白いですね。これはプラグインというよりも、コアに欲しい機能の様な気がします。*.inc ファイルが多いスキンでは、サーバとして利用するプロバイダによっては大幅にパフォーマンスがアップするかもしれませんね。
早速の要望なのですが、もし該当するスペシャルスキンパーツがない場合に、スキンディレクトリから『*.inc』ファイルを読み込んで自動的にスペシャルスキンパーツとして登録した後に利用するっていう事は出来ますか?
<%if(hasplugin,includespecial)%>
<%includespecial(foo)%>
<%else%>
<%parsedinclude(foo.inc)%>
<%endif%>
という記述で、このプラグインがインストールされていてもいなくても両方に対応出来るようなスキンの記述を考えています。
Nucleus-SQLite の配布は終了しました
VBScript / JScript で Win32API / 構造体 / コールバック関数: SFC mini
オフライン
明示しないのにincを読み込むというのもちょっと気持ち悪いので
<%includespecial(パーツ名|ファイル名)%>
という書き方をしたときにパーツがないとファイルを読みにいくようにしてみました。
このほか無限ループを防ぐためのレベル判定を加えています。
<?php
class NP_includespecial extends NucleusPlugin {
var $level;
function getName() { return 'Include Special'; }
function getAuthor() { return 'Andy'; }
function getURL() { return ''; }
function getVersion() { return '0.2'; }
function getDescription() { return 'include a special skin part and, parse it'; }
function supportsFeature($what) {
switch($what)
{ case 'SqlTablePrefix':
return 1;
default:
return 0; }
}
function init() {
$this->level = 0;
}
function doSkinVar($skinType, $partsname) {
global $skinid;
if ($this->level > 3) return;
$skin = new SKIN($skinid);
if (!$skin->isValid) {
return;
}
$parts = explode('|', $partsname, 2);
$actions = $skin->getAllowedActionsForType($skinType);
// set IncludeMode properties of parser
PARSER::setProperty('IncludeMode',$skin->getIncludeMode());
PARSER::setProperty('IncludePrefix',$skin->getIncludePrefix());
$handler =& new ACTIONS($type, $skin);
$parser =& new PARSER($actions, $handler);
$handler->setParser($parser);
$handler->setSkin($skin);
if (($contents = $skin->getContent($parts[0]))) {
$this->level++;
$parser->parse($contents);
$this->level--;
} else {
$handler->parse_parsedinclude($parts[1]);
}
}
}
?>
ちなみに名前を全部小文字にしたのはコアに入れたときに違和感ないようにというところも狙っています。
オフライン
ちなみに名前を全部小文字にしたのはコアに入れたときに違和感ないようにというところも狙っています。
ですね。
$handler->parse_parsedinclude($parts[1]); の後で自動的に、ファイル$parts[1]の内容を$parts[0]という名前でスペシャルスキンパーツに追加してしまうっていうのは、どうでしょうか。
Nucleus-SQLite の配布は終了しました
VBScript / JScript で Win32API / 構造体 / コールバック関数: SFC mini
オフライン
$handler->parse_parsedinclude($parts[1]); の後で自動的に、ファイル$parts[1]の内容を$parts[0]という名前でスペシャルスキンパーツに追加してしまうっていうのは、どうでしょうか。
このあたりも,今後これをコアに入れていくかどうか次第かと思っています。コアに入れるならなるべく余分な機能は付けない方がいいと思います。
オフライン
コアに入れるならなるべく余分な機能は付けない方がいいと思います。
そうですね。コアに入るまでの間、このプラグインがインストールされている場合とされていない場合の両方に関して、スキンの側でどういった対応が出来るか、少し考えてみます。
Nucleus-SQLite の配布は終了しました
VBScript / JScript で Win32API / 構造体 / コールバック関数: SFC mini
オフライン
使っていてひとつ見つけました。
44行目付近:
$handler =& new ACTIONS($skinType, $skin);
$type → $skinType に修正、で、if(skintype) が正しく効くようになります。
Nucleusだとか
http://nucleus.datoka.jp/
オフライン
「エラー」スキンタイプで$skinidがセットされないことがあったので
その部分を修正してみました。
<?php
class NP_includespecial extends NucleusPlugin {
var $level;
function getName() { return 'Include Special'; }
function getAuthor() { return 'Andy'; }
function getURL() { return ''; }
function getVersion() { return '0.3'; }
function getDescription() { return 'include a special skin part and, parse it'; }
function supportsFeature($what) {
switch($what)
{ case 'SqlTablePrefix':
return 1;
default:
return 0; }
}
function init() {
$this->level = 0;
}
function doSkinVar($skinType, $partsname) {
global $skinid, $blogid, $CONF, $manager;
if ($this->level > 3) return;
if (!$skinid) {
if (!$blogid) $blogid = $CONF['DefaultBlog'];
$blog =& $manager->getBlog($blogid);
$skinid = $blog->getDefaultSkin();
}
$skin = new SKIN($skinid);
if (!$skin->isValid) {
return;
}
$parts = explode('|', $partsname, 2);
$actions = $skin->getAllowedActionsForType($skinType);
// set IncludeMode properties of parser
PARSER::setProperty('IncludeMode',$skin->getIncludeMode());
PARSER::setProperty('IncludePrefix',$skin->getIncludePrefix());
$handler =& new ACTIONS($skinType, $skin);
$parser =& new PARSER($actions, $handler);
$handler->setParser($parser);
$handler->setSkin($skin);
if (($contents = $skin->getContent($parts[0]))) {
$this->level++;
$parser->parse($contents);
$this->level--;
} else {
$handler->parse_parsedinclude($parts[1]);
}
}
}
?>
Nucleusだとか
http://nucleus.datoka.jp/
オフライン
ページ: 1