Skip to main content.

javascriptによるフィルタリング

あけましておめでとうございます。<には遅いですが。

新年1発目はjavascriptで始まりました。
http://japan.nucleuscms.org/bb/viewtopic.php?t=3783
に反応して。

javascriptのメニュー系な小物にはtoggleとかアコーディオンとかありますが大抵は
<div id="menu1">
  menu1の中身 
</div>
 <div id="menu2">
  menu2の中身
 </div>
ってソースを整えてやらないといけないんですよね。

今回のミソは
    <li id="c"><a href="**">Consideration</a></li>
    <li id="g"><a href="**">General</a></li>
    <li id="n"><a href="**">nucleuslink</a></li>
    <li id="p"><a href="**">pc</a></li>
    <li id="t"><a href="**">Tips</a></li>
    <li id="t"><a href="**">todo</a></li>
    <li id='p'><a href="**">プラグイン</a></li>
とランダムに登場するidをフィルタリングするtoggleスクリプト!

いつも忘れるので

メモ。

SELECT inumber FROM nucleus_item WHERE inumber IN (1,60,12,16) ORDER BY FIND_IN_SET(inumber,'1,60,12,16');

xfy Blog Editorを使ってみたり。

xfy Blog Editorを使ってみた。

http://www.xfy.com/jp/blog/

ブログサービスの種類は『Movable Type』で。
サイトURL聞かれて、次へ進むとアカウント名とパスワードと
『エンドポイント』
ってな入力項目が現れる。

このエンドポイントに
サイトtopのURL/nucleus/nucleus/xmlrpc/server.php
を入れたらOKな様子ですね。

ふーん。

テンプレート内で<%if%>を使うプラグインの続編

お久しぶりです。
NP_STIFを育ててみました。

ダウンロード:NP_STIF02.zip
※セキュリティの保証はまだいただいていません。どなたか軽くチェックして感想をお聞かせ頂けると幸いです。(何か見つけた際はMLかフォーラムのメッセ下さいまし)

このv0.1に、パラメータ選択肢が増えました。

まず、繰り返しの何番目かを判定する『row』。
<%STIF%>
<%if(STIF,row,1)%>
 1番目アイテム等のテンプレ
<%else%>
 それ以外のテンプレ
<%endif%>

みたいな感じで。

あと、おまけで、繰り返し番号が奇数かどうか判定する『odd』。
<%STIF%>
<div id="item<%if(STIF,odd)%>odd<%endif%>">
アイテム表示の定義
</div>

って書いたとしたらdivのidが「itemodd」と「item」のアイテムが交互になりますから、背景色を交互に変化させるとかできますねぇ。

はてなキーワード関連のプラグイン作成、継続中

preitemで一括置換は却下ですね。
テンプレートに置換startとendポイントを書き込んで、はさんだところだけ置換は成功。
それとページ表示の時は置換を行わないで、ボタンを押したら特定のidブロック文を置換するajax設置も成功。

そこで欲が沸きました。
キーワード「だけ」を抽出してコレクションしたい!
(通常は文章を投げたら自動リンク挿入後の文章が返ってくる仕組みですの)
....ああ、できるんですね。おもしろい。
....つーことは、はてなキーワードを抽出して、タグ候補として表示したり、Relatedキーワード自動生成とかに再利用できるじゃないですかぁ。茶筅立てたりこしあんいただいたりしなくても!

が、もう一つ欲が沸きました。
PEARもいいんですけどね、どうせなら同梱のxmlrpc.inc.php使いたいですよ!

Services_Hatena::factory('Autolink')なnucleusプラグイン

全然違う事を検索していたらPEARにはてなserviceが収録されていた事を今更ながら知りまして。(おそっ!)
じゃ、昔やりたくてできなかった、はてなキーワードリンクの自動挿入プラグインでも書いてみる?と実験中。

あらま、簡単にできましたよ!便利なもんですねぇ。
でも、はてなキーワードへのリンクがついたら嬉しいのか?びみょ〜。

1)最初、event_PreItemでやってみました。
2)が、それってサイドバーの新着記事n件とかでも実行されちゃう?!ってのはまずいよなぁ。
3)じゃ、スキンとかテンプレートとかに「ここからここまではてなワードを判別してね」命令を書き込む仕組み?
4)それも使う時面倒そうじゃん。(いつも思うのですが、テンプレートにフィールド増設できるプラグインevent欲しいなぁ)

んで、結局、現在の仕様は。
ページ内の特定のidがついたブロック内だけajax置換(←またかよ)。
例えばテンプレでアイテム本文をid=itembodyなdivブロックとしているページがあるとしたら、id=itembody内だけ自動リンク挿入する仕組み。これが一番利用しやすい気がするんだけど。
ブラウザによっては実行されないかもしれないけど、その時は自動リンク挿入されていないアイテムがそのまま表示されるから問題ないし。

ただ、innerHTMLするデータをaction.php?type=プラグイン名&string=(ブロック内のhtmlソース)で取得するのが見え見え。
セキュリティ的にもやばそうだし、はっきり言ってページソース見たらurl丸見えだから、はてなリンクサービスを一般に提供しているようなもんです。

という訳で公開はまだ先ですかねぇ....

NP_ArchiveListEX 新バージョンの試作版

アーカイブリストにアイテム情報を含めるプラグインの試作版を。
NP_ArchiveListEX101.zip
※公開サイトにはまだ使用しないで下さいね。責任負いません。

今のところは、スキンに
<%ArchiveListEX(テンプレート名)%>
と書くだけのバリエーションしかありません。

専用のテンプレートを用意します。
テンプレートの利用の仕組み
↑という構造で年ごとにテンプレートを利用します。

↓コピペ用
<dd><a href="<%archivelink%>">%Y年%m月分</a></dd>
<a href="javascript:getData(<%monthid%>)">→<%sum%>件のタイトルを表示</a>
<div id="result<%monthid%>"></div>


標準機能と読み替える点は、『アーカイブリストのヘッダー(フッター)』は、年ごとのヘッダー(フッター)になるという点です。
<div id="result<%monthid%>"></div>の中にアイテム情報が表示されます。
※ajax表示なので、ここのdiv内にアイテム定義をする訳ではありません。

アイテムについては、通常であればタイトルとアイテムリンクだけの定義になると思います。(←実はここを変化させると想定外の使い方が広がりますが)

アーカイブ一覧ページを変えてみました〜

超古いArchiveListEXを引っ張り出して来たって書きましたが、とりあえず月ごとにクリックしたらタイトル一覧を表示するって仕組みのタイプに加工してみました。
えーと、上の「Archives」ってタブデザインをクリックすればサンプルが見れると思います。

イカしてる点は:
・クリックして初めてタイトル一覧を取得する(のがいいのかどうか)
・Nucleus標準機能のテンプレートでデザインできる!
 +『アーカイブ一覧のヘッダー(フッター)』が年ごとに出力!
 +タイトル一覧の所は同じテンプレートのアイテムのパーツをそのまま使える!(コメントだろうがなんだろうが何でも自由)

イカしてない点は:
最初から一覧表示じゃないからサイトマップにはならん。でも記事数多かったらとてもじゃないけどテンプレ自由に使って全部表示させるなんて重くて無理だから。

まだやってない事:
・カテゴリ(サブカテゴリ)絞り込み連動
・RightURL使わないとitemlinkが変
・dayモード必要?

公開するに至るのでしょうか?

『アーカイブ一覧のヘッダー(フッター)』が年ごとに出力されるってのは嬉しい人がいるのかも。
*年*月の横に記事数出せるってのも楽しいのかも。
ちょっと使い方を工夫すると例えばYUIのtabviewなんか使って凝った見せ方もできそうだし。

夜が明けちゃいました。ちょっとしたリハビリになりました。

テンプレート変数の拡張?

復活しつつあるので、まずはアーカイブがサイトマップにならないとダメだよなぁ〜と、超古いNP_ArchiveListEXを引っ張り出して加工中。
itime仕様変更(ふるっ)やら$b->getCorrectTime()対応やらを済ませてみる。

で、どうせならAjaxで月クリックしたらタイトル一覧を裏で読み込むワザとか、もしくはDtreeで年月タイトルの3levelツリー?などとぼんやり考え中。
(でもどっちも検索サイトがタイトル一覧をキャッシュしてくれなくなるんだよね、きっと。Dtreeの方はツリーデータのスクリプトもソース内に吐き出すようにしたらマシなんだろうけど?)

そんなこんなしているうちに発見。

アイテムが存在する年月を拾い出すsqlクエリにcount(*)もSELECTするように追加して、
$data['sum'] = $current->sum;
して、<%sum%>って『アーカイブ一覧の本体』に書き込んだテンプレートにTEMPLATE::fillしたら....
普通に月別記事数が表示された〜。

当たり前ですね。
とっくの昔に誰かやってますよね、そんな事。
でも、変数が増えたみたいな気分でなんか嬉しかったっす。

でもってたぶん読んでいる方々は発見前の妄想に興味がおありとかなのかしらん。現時点では妄想です。こんなくだらない事を発見と思っちゃうレベルですから〜(泣)

テンプレート内で<%if%>を使うプラグイン

テンプレートの中でif分岐するプラグインを書いてみました。
v3.3以降でITEMSCTIONS.php改造してないと使えません。
※改造しないで同じ事をやりたい場合は、NP_ifを使うといいかも。

主に手直ししてやろうという方はDLよろしく→NP_STIF01.zip

<%STIF%>
<%if(STIF,itemid,1/5/8)%>
 itemidが1か5か8の場合のテンプレ
<%else%>
 そうじゃない時のテンプレ
<%endif%>
みたいな使い方。

<%STIF%>
<%if(STIF,itembid,current)%>
 選択中のblogに属する記事に使用されるテンプレ
<%else%>
 選択中のblogに属さない記事に使用されるテンプレ
<%endif%>
みたいな使い方。

パラメータの2番目には
・itemid
・itembid(そのアイテムが属するblogid)
・itemcid(そのアイテムが属するcatid)
・itemaid(そのアイテムのauthorid)が使えます。
パラメータの3番目には
・具体的な値
・複数の値をスラッシュで区切って指定
・「current」(itembid、itemcidだけ)

問題点は、コレを使う時は、それより前に<%STIF%>と書いてdoTemplateVarを実行させないとカレントitemを引っ張らない所。書き忘れると1個前のアイテム情報を参照してしまいます。
誰か「こうしたらいいよ」ってコメント頂けると嬉しい。

たぶん、既存のプラグインでも同じ事できるような気もするんですけど、わからなくって作っちゃいました。
私がコレを使いたい理由は、トップページのindex表示で、全てのblog記事を時系列に並べつつ、たぶん多くの人は読まないであろうblogの記事はタイトルだけ表示しとく、という狙いです。
スキン側で、もしくはプラグイン側でテンプレートをチェンジさせようとするとどうしても日付のヘッダが途切れますので、一括item読込でありながらテンプレを変化させるのが最適っぽかったので。
本当は、複数のテンプレートを切り替えてくれるのが嬉しいけど....それってできるのでしょうかねぇ?

あ、あとサブカテゴリ判定ももちろんできるように加工できますけど、まずは問題点を解決してからの方がいいかなぁってワザと入れてません。要望があれば、って感じでよろしく。

テンプレートで<%if%>を使う!

実は知っている人は知っている話らしいですが、テンプレートでもifが使えるようにできるらしいです。

出典はこちら→http://lordmatt.co.uk/item/222/

バージョンがv3.3の人は書き換えるファイル名はBLOG.phpじゃなくってITEMACTIONS.phpですね。
ただし、自己責任で。

なぜ正式機能としてリリースされていないのかは未調査です。何か不具合があるのか、それとももうちょっとテンプレート用に判別条件をゴージャスにする計画があるからなのか。
スキン用に作成されて来たifですから、思ったほどは使い道多くないかもしれないですけどね。

んで、この改造したらこのプラグインが使えます。

また、改造しないでif使いたい人は、こちらのプラグインをどうぞ。

サイト内で迷子になる??

ボケてる事書いてる確率70%で。

1)生成りな状態でblog新設
2)当然、blogid=2にはcatid=2が作成される
3)早速、index.php?catid=2にアクセスしてみる
...あれれ。デフォblogのindex表示じゃん。

なんか、こう、
『catidをURLで特定された場合は、正しいblogidも同時に(つまりはindex.php?catid=2&blogid=2)指定しない限りは正常ブラウズしないでサイトTOPと同じ表示にする』
って仕様変更があったのはかすかに記憶があります。
(たぶん過去に記事書いてるはずな雰囲気)

で、でも〜
複数blog運用の場合は、テンプレート内のカテゴリリンクにblogidを含める定義しないとダメなんて〜
それって高度じゃあないんですかねぇ。今更ですけど。

allモードでShowBlogs使って2個目のblogはスキン変えて見たらURLに正しくblogidを含めた場合と含めなかった場合を比較すると表示してる記事は同じなのにデザインだけ変わる、というヘンテコリンな状態。
ShowBlogsはblogidなくてもcatidだけで抽出してくれるから。(←ああ、そういえばタカちゃんとこの仕様も論議したっけ。準拠してblogid指定の有無を判別するかどうかって。)

う〜ん。
インストール直後にblog増設してみてすぐにカテゴリブラウズしたらこのハードルってなんかイヤだな。

v3.3の自動ドラフト保存について その2

珍しくプラグイン書く気になって手をつけてみたのはいいが、javascriptのあまりの書けなささに愕然orz
しかも特定のfunctionをキャンセルさせるボタンってどうやって作んのよ!やりたいのは「以下すべて無効」ぢゃない!むきーっ。

えーと。
思い切り簡単なアイディア!
記事書いてる途中で『勝手に』バックグラウンドで保存されちゃうからイヤンな感じかも、と思って...
『とりあえずこの時点でドラフト保存しときます?』と聞いてくれる改造。

xmlhttprequest.jsの128行目付近を
/**
 * Monitors the edits
 */
function doMonitor() {
    if (checks * (now() - seconds) > 120 * 1000 * 50) {
        answer =  confirm ("Save it automatically?");
        if (answer == true){
            autoSaveDraft();
        } else {
                seconds = now();
        }
    }
    else {
        checks++;
    }
}
こんなかんじで。

でも、日本語変換候補入力中に聞かれちゃうとかえってウザいかも。でも、自動保存もたまにはしておきたいという人向けね。

未来永劫金輪際、autosaveなんて使うもんか、という人はnucleus/libs/include/ディレクトリにある.templateファイル4つ全部のxmlhttprequest.jsを含めようとしている行を削除するのがいいのかなぁ。

v3.3の「自動保存」機能について

すげくご無沙汰。
すげく重い腰が少しだけ上がりました。

http://japan.nucleuscms.org/bb/viewtopic.php?t=3209
にて、euc-jp運用の場合は自動保存機能がおかしい報告が上がっております。

javascriptでxmlhttprequestしてるんだろうから自動でUTF-8エンコードしてそれをそのまま保存しているんだろう、とはピンと来ます。
アイテムを自動保存する直前で
if(_CHERSET != 'UTF-8'){
$i_body = mb_convert_encoding($i_body,_CHARSET,"UTF-8");
}
してやれば、とりあえずeuc-jpで保存してくれましょう。(確かめ済み)

ところが。

同時に数々の問題と宿題も頭をよぎる訳です。
1)単純にencodeURIでいーのかよ?
2)自動保存機能保存をoffにする設定とかボタンとかほすぃ。

とりあえず、仕組みとテストのメモを....

『Nucleusでつくる!最強のブログサイト』発売になります。

Nucleusと出会って4年、本を書きたいと思って2年、やっと1冊目の本が形になりました。
当然ながら私は大したこと書けませんから、豪華メンバーのパワー集結!です。みなさんかなーりお忙しいのに、それでもガシガシ集まったのはちょっとカンドー。
たぶん本当はみんなもっとマニアックな域に熱をこめたかったと思うんだけど、まずは「Nucleusってこんなもの」を念頭にクールダウンしつつ....

やっぱり書籍っていいですよね。コピペはできないけど、別のパワーがある。何よりPULLじゃなくってPUSHできちゃうし。(いや、じゅうぶんPULL?!w)

ちなみに、Nucleus CMSについてのペーパーブックは全世界で初めて、らしいです。そのくらい、Nucleus CMSは日本で愛されている訳ですね。そして、日本で愛されるキッカケの1つに私のこのしょぼいブログも入っているのではないかとうぬぼれてみたりして。Felさんにこの本が届けばいいなぁ〜と思ったりして。タカちゃんもjunさんも触ってくれたらいいなぁ〜と思ったりして。

なんか、何気なくNucleusフレンズになっている方々ですけど、実はいろんなベクトルを持つ方々がいらっしゃって、あらためて、なんかワンダフルだと気付きました。ウルウル。