スタッフブログ

  • 最新配信
  • RSS

picoの改造 カテゴリの説明をちょっと使い易くする

naoto : XOOPS » モジュール 2010/3/26 17:40

Blogger's Avatar

こんばんわ。なおとです。

picoはコンテンツを作成および管理するために、とても重宝してます。

使っていく中で、場合によっては部分的に機能を付け足したりできると良いなと思うことがあります。 機能のバランスもあるので必ずしもそうあるべきとも言えないのですが、私が、「変えたい度」が比較的高いと感じた箇所を“ハック”してみようと思います。

ここを変えたい

ここを変えたい picoで扱う内容を、「コンテンツ」と「カテゴリー」の2つに分けたとすると、コンテンツについてはかなり至れり尽くせりで、機能的に不足を感じることはあまりないと言えます。 それと比較的する形で言うと、カテゴリーには思うところがあります。

カテゴリーの説明にはhtml形式で内容を書けるのですが、自動的に変換がかかるために癖があります。 しかも、「オプション」でその動作を変更できそうでいて、実は変えられない作りになっています。 以下は「カテゴリー編集」というリンクから呼び出せる、カテゴリーマネージャーの一部です。

特に改行をbr要素に変換しているため、テーブル要素などに影響がでます。

お仕事でサイト構築などしていると、時にはこのように、重箱の隅的なところなのですが、機能面での改造が必要になってきます。
オプションの指定が効かない

こうしたい

コンテンツの編集では、フィルターのON/OFFだけでなく、適用する順序を指定することができます。 それと同じであればより良いと思いますが、そこまで高機能でなくてもよさそうです。

まずは「xcode」「smiley」「nl2br」だけ、ON/OFFを切替えできるようにします。

手を加える箇所

修正するファイルは、「XOOPS_TRUST_PATH/modules/pico/class/PicoModelCategory.class.php」です。 作業前に念のため、バックアップしておきましょう。

修正前:getData4html()【148行目から】

function getData4html()
{
    $myts =& PicoTextSanitizer::getInstance();

    return array(
        'link' => pico_common_make_category_link4html($this->mod_config, $this->data),
        'title' => $myts->makeTboxData4Show($this->data['cat_title'], 1, 1),
        'desc' => $myts->displayTarea($this->data['cat_desc'], 1),
        'weight' => intval($this->data['cat_weight']),
        ) + $this->data;
}

※ブログに掲載するために、インデント(空白)を変えています。

修正後:getData4html()

修正前と修正後を参考に、メソッド「getData4html()」を入れ替えます。

function getData4html()
{
    $myts =& PicoTextSanitizer::getInstance();

    $cat_desc = $this->data['cat_desc'];
    if (array_key_exists('filters', $this->data['cat_options'])) {
        $filters_row = $this->data['cat_options']['filters'];
    } else {
        $filters_row = '';
    }
    $TareaOptions = array(
        'xoopstpl' => 0,
        'html' => 1,
        'smiley' => 1,
        'xcode' => 1,
        'image' => 1,
        'br' => 0,
        'nbsp' => 0,
        'number_entity' => 0,
        'special_entity' => 0,
        );
    $TareaOptions['xcode'] = ($this->checkFilterOption($filters_row, 'xcode')) ? 1 : 0;
    $TareaOptions['smiley'] = ($this->checkFilterOption($filters_row, 'smiley')) ? 1 : 0;
    $TareaOptions['br'] = ($this->checkFilterOption($filters_row, 'nl2br')) ? 1 : 0;

    return array(
        'link' => pico_common_make_category_link4html($this->mod_config, $this->data),
        'title' => $myts->makeTboxData4Show($this->data['cat_title'], 1, 1),
        'desc' => $myts->displayTarea(
            $cat_desc,
            $TareaOptions['html'],
            $TareaOptions['smiley'],
            $TareaOptions['xcode'],
            $TareaOptions['image'],
            $TareaOptions['br'],
            $TareaOptions['nbsp'],
            $TareaOptions['number_entity'],
            $TareaOptions['special_entity']),
        'weight' => intval($this->data['cat_weight']),
        ) + $this->data;
}

追加する:checkFilterOption()

getData4html()の直後に「checkFilterOption()」を追加します。

function checkFilterOption($filterName, $filterOption)
{
    if (empty($filterName) or empty($filterOption) or !is_string($filterOption)) {
        return false;
    }
    if (strpos($filterOption, $filterName) === false) {
        return false;
    } else {
        return true;
    }
}

この先

この改造を土台にすれば、他のフィルターを使えるようにするなどはできそうです。 興味のある人は挑戦してはいかがでしょうか。

PR: XOOPS Cubeのカンファレンスを開催いたします 2010年4月3日(土)

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.