Nucleus

NP_skinsetting

2008年12月23日

yama.kymsさんのNP_SkinEditを見ていて気がついたのは、ブログ情報表示のための<%blogsetting%>に相当する、スキン情報を表示するためのスキン変数がNucleusには無いこと。

もしあれば、何か便利かもしれない。今は思いつかないけれど。

なので、作ってみた。もしかしたら、似たプラグインがすでにあるかもしれない。

使い方:
<%skinsetting(id)%>
<%skinsetting(description)%>
<%skinsetting(contenttype)%>
<%skinsetting(includemode)%>
<%skinsetting(includeprefix)%>
<%skinsetting(name)%>
<%skinsetting(type)%>

高度な(?)使い方:
<%skinsetting(idfromname,[skin_name])%>
<%skinsetting(namefromid,[skin_id])%>
<%skinsetting(content,[skin_type])%>

ついでに、NP_otherskinsettingも作ってみた(NP_skinsettingが必要)。

NP_skinsetting.php
<?php 
class NP_skinsetting extends NucleusPlugin { 
    function getName() { return 'NP_skinsetting'; }
    function getMinNucleusVersion() { return 220; }
    function getAuthor()  { return 'Katsumi'; }
    function getVersion() { return '0.1'; }
    function getURL() {return 'http://japan.nucleuscms.org/wiki/plugins:authors:katsumi';}
    function getDescription() {
        return 'Usage:<br />
&lt;%skinsetting(id)%&gt;,
&lt;%skinsetting(description)%&gt;,
&lt;%skinsetting(contenttype)%&gt;,
&lt;%skinsetting(includemode)%&gt;,
&lt;%skinsetting(includeprefix)%&gt;,
&lt;%skinsetting(name)%&gt;, or
&lt;%skinsetting(type)%&gt;';
    } 
    function supportsFeature($what) { return ($what=='SqlTablePrefix')?1:0; }
    function getEventList() { return array('InitSkinParse'); }
    var $skinobj;
    function event_InitSkinParse(&$data) {
        $this->skinobj=&$data['skin'];
    }
    function doSkinVar($skintype,$type,$p1='') {
        if ($type=='type') $data=$skintype;
        elseif (method_exists($this->skinobj,"get$type")) {
            $data=call_user_func(array($this->skinobj,"get$type"),$p1);
        }
        echo htmlspecialchars($data,ENT_QUOTES);
    }
}

NP_ohterskinsetting.php
<?php 
class NP_otherskinsetting extends NucleusPlugin { 
    function getName() { return 'NP_otherskinsetting'; }
    function getMinNucleusVersion() { return 220; }
    function getAuthor()  { return 'Katsumi'; }
    function getVersion() { return '0.1'; }
    function getURL() {return 'http://japan.nucleuscms.org/wiki/plugins:authors:katsumi';}
    function getPluginDep() { return array('NP_skinsetting'); }
    function getDescription() {
        return str_replace('skinsetting(','otherskinsetting([skin_id/name],',
            $this->skinsetting->getDescription());
    }
    function supportsFeature($what) { return ($what=='SqlTablePrefix')?1:0; }
    var $skinsetting;
    function init(){
        global $manager;
        $this->skinsetting=$manager->getPlugin('NP_skinsetting');
    }
    function doSkinVar($skintype,$id,$type,$p1='') {
        static $objs=array();
        if (!is_numeric($id)) $id=SKIN::getIdFromName($id);
        $id=(int)$id;
        if (!isset($objs[$id])) {
            $objs[$id]=new NP_skinsetting;
            $obj=new SKIN($id);
            $data=array('type'=>$skintype,'skin'=>&$obj);
            $objs[$id]->event_InitSkinParse($data);
        }
        return $objs[$id]->doSkinVar($skintype,$type,$p1);
    }
}

コメント

Katsumi (2008年12月23日 16:04:30)

あぁ、doIf()の実装を忘れた。もし使う人が居れば、次のバージョンで対応します。

コメント送信