NP_locMoveAfterItemPost

Nucleusのアイテム投稿後の画面遷移を制御することが技術的に可能か試してみた。

アイテム投稿は、新規追加と編集の2種類に分類されているようだ。これを「新規追加を行った後は再度、アイテム新規追加画面へ(連続してアイテムを投稿する運用のケース)」と、「編集の後はそのアイテムへ移動」という動作にしてみる。



<?php
/*
        Name: NP_locMoveAfterItemPost
        License: GPL
        History:
                0.1a:  (2010-02-21) First Release. via NP_FixLinkAfterEdit http://japan.nucleuscms.org/bb/viewtopic.php?t=1165
      * PostAddItem -> location move admin additem page.
      * PostUpdateItem -> location move that item page.
                0.2a:  (0000-00-00)
      *
      *

*/


class NP_locMoveAfterItemPost extends NucleusPlugin {
  function getName()           { return 'locMoveAfterItemPost'; }
  function getAuthor()         { return 'floors'; }
  function getURL()            { return 'http://luvsic.net/'; }
  function getVersion()        { return '0.1 alpha'; }
  function getDescription()    { return 'アイテムの新規投稿後と、編集後に飛ぶURLをそれぞれ固定します。'; }
  function supportsFeature($w) { return ($w == 'SqlTablePrefix') ? 1 : 0; }

  function getEventList() {
    return array('PostAddItem','PostUpdateItem',);
  }

  function install() {
    $this->createOption("disable", "Disable this plugin", "yesno", "yes");
  }

  function event_PostAddItem() {
                if ($this->getOption('disable') == 'yes') return;
    global $CONF;
    $blogid = requestVar('blogid');
    header ('Location: '.$CONF['AdminURL'] . 'index.php?action=createitem&blogid=' . $blogid);
  }

  function event_PostUpdateItem() {
                if ($this->getOption('disable') == 'yes') return;
    global $CONF;
    $itemid = intRequestVar('itemid');
    //header ('Location: '.$CONF['AdminURL'] . 'index.php?action=itemedit&itemid=' . $itemid);
    header ('Location: '.$CONF['IndexURL'] . 'item/' . $itemid);
  }

}
?>

NP_FixLinkAfterEditを改変して作成。なお、編集の場合でのアイテムページへダイレクトに移動するのは、Nucleusに標準装備のFancyURLでしか対応していない、まあサイトのURL生成ルールに合わせて改変すればいいだけからこれでいいのだけど。

しかしやはり痛いのは、ブックマークレット投稿に対応できないこと。調べたところ「通常投稿」と「ブックマークレット投稿」は同じイベントのため、差別化ができない、これはNP_FixLinkAfterEditも同様。コアハックで拡張すればどうにかなるのだろうけど、そうするとコアのバージョンアップが…うーん、別途管理でいいか。

header Location は大丈夫か、アイテムの新規登録は怖い、という作者様の2意見があるので、何らかの手を打ちたい、が、自分がその技術レベルに達するにはあと10年くらいかかりそう、しょぼん。

[追記2010-0313]
「通常投稿」と「ブックマークレット投稿」の差別化は、PreAddItem(アイテムがデータベースに追加される直前)、PreUpdateItem(データベースにあるアイテムが更新される直前)のイベントでリファラーから「bookmarklet.php」からきたのか、管理画面のnucleus/index.phpからきたのか判別すればできるかも。

参照: Nucleus プラグイン API

/
Skooler Records

No comments yet

%3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%22%20%76%61%6c%75%65%3d%22%32%31%39%32%35%32%32%30%39%65%62%37%62%30%37%30%37%33%64%66%64%61%33%32%61%32%34%33%30%62%33%34%22%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%5f%68%61%73%68%22%20%76%61%6c%75%65%3d%22%30%62%63%37%63%61%34%38%65%36%64%39%33%31%63%39%65%64%34%65%35%31%33%38%32%30%66%38%64%30%36%34%22%3e
© 2006 – 2014 by Luvsic. Some rights reserved.