最新エントリー
会社案内のページを見ていて「設立してからどのぐらいだったかな」といつも指折り数えていたのですが(^_^;、見てる人にさくっとお知らせできるようにsmartyプラグインを作ってみました。

年月日や年月から自動的に経過した年月日を表示します。工夫した点はPHP的なお話ですが、限りなく人が指折り数えた計算に近づけるため日数から計算ではなく地道なロジックにした、というところです。

ダウンロードはこちらから
http://ryus.co.jp/modules/d...

zipファイルを解凍すると modifier.ryus_howold.php というものができますので、お使いのサイトの

xoops_trust_path\libs\smarty\plugins

にアップロードしてください。

何をするプラグイン?


年月や年月日から「○年○月○日 経過」を返すプラグインです。デフォルトだとこのような表示になります。後述するように表示は指定する事で好きな表現にできます。

指定する年月や年月日は xxxx年xx月xx日 日本語でもいいし、よくある xxxx-xx-xx とか xxxx/xx/xxでもOKです。
あとシステム的な日付だと xxxx-xx-xx xx:xx:xx のように時間がくっついてる場合もありますのでその形の変数からでも使えるようにしてあります。


使い方事例 RYUSサイトの会社概要



株式会社RYUS 会社概要
http://ryus.co.jp/modules/a...

の 設立 というところに、

2006年7月(設立から6年10ヶ月)

と表示されています。picoを使ってこのページを作っていますが(設立から6年10ヶ月)とある部分はこのsmartyプラグインで表示しています。このとき、picoの編集画面「本文フィルター」のSmarty(XoopsTpl)にチェックを入れてください。

picoの編集画面で見ると該当部分は、
2006年7月(<{'2006年7月'|ryus_howold:'設立から%s年%sヶ月'}>)
と書いてあります。

|ryus_howold

で、smartyプラグインを指定してその後に どのような形で表示したいかを指定します。指定しない場合は「○年○ヶ月○日 経過」という形で表示されます。

%s を3つまで指定する事が出来ます。

2つ指定した場合は経過した 年、月 を%sと置き換えます。

同じく3つ指定した場合は経過した 年、月、日を、1つだけの時は年だけを置き換えます。

テンプレートで変数に指定するとさらに便利



テンプレート変数で年月日を持つものにこのsmartyプラグインを指定するとさらに便利ですね。

例えばpicoの場合、ALTSYSでpico_main_viewcontent.html を修正してみましょう。

<div class="pico_body" id="<{$mydirname}>_body">

とある行の下に

この記事を作成してから <{$content.created_time_formatted|ryus_howold}><br>
この記事を更新してから <{$content.modified_time_formatted|ryus_howold}><br>

のように入れて保存すると、

この記事を作成してから6年4ヶ月6日 経過
この記事を更新してから0年0ヶ月3日 経過

のように表示されました。

色々な使い方を考えてみました



picoならsmartyが利用できるので色々試してみました。


smartyプラグイン ryus_howold 使い方事例
http://ryus.co.jp/modules/m...




上記のように色々使い方があると思います。picoの本文で使ったり、色々なモジュールのテンプレートで使えると思いますのでご利用ください!

XOOPS Cubeでは、cubeUtilというモジュールを使うことで1つのXOOPSで
複数の言語むけのサイトを構築することができます。

このとき問題になるのが、新着ブロック等でのタイトル文字列の切り詰めです。

cubeUtilで多言語対応するときに、タイトルには
「[ja]日本語のタイトル[/ja][en]English Title[/en]」
のようにタイトル欄に日本語と英語の表記を多言語用のタグをつけて登録します。

これが新着ブロック等で短くきりつめられると
「[ja]日本語のタイトル[/ja][en]English …」
のように中途半端なところで切り詰められてから、多言語対応の仕組みがうごいて、
タグが画面にでてきたり、予想外の範囲まで別言語の扱いになって画面から消えてしまうことがあります。

多言語対応のサイトを構築していて、一部のコンテンツが画面に表示されなかったり、
多言語用のタグが画面に表示されるようなことが発生したら、
どこかでタイトル切り詰めが起きてないか調べてみてください。

タイトルの切り詰めをやめれば問題が解決するはずです。

まだtheme.html内で一発でサクッとトップページへのアクセスかを判定する方法が
なかったようなのでちょっとpreloadファイルをつくってみました。

下記コードをhtml/preload/IsToppage.class.phpとして保存します。
<?php
class IsToppage extends XCube_ActionFilter
{
    protected $isTop = false;
    public function preBlockFilter()
    {
        $this->mController->mRoot->mDelegateManager->add("Legacypage.Top.Access", array(&$this, 'topAccess'));
    }

    public function topAccess()
    {
        $this->isTop = true;
        $GLOBALS['xoopsTpl']->assign('xoops_is_top', $this->isTop);
    }
}
これだけで、theme.htmlで下記のようにトップページ判定ができるようになります。
<{if $xoops_is_top }>
トップページだよ!
<{else}>
トップページじゃないねっ
<{/if}>

予算は3つにわけて考えよう

カテゴリ : 
ビジネス
2013-2-19 15:47
前回、予算についてかきましたが、ついでにもうひとつ。
予算を考えるときは、次の3つにわけて考えておくことをおすすめします。

1.開発時の初期費用
2.初年度の予算
3.次年度以降のランニング費用

この中でポイントは2番の初年度予算です。

構築時にまとまった工数が必要なので、初期費用がかかるのは当然ですね。
ここは皆さんしっかり確保されます。
3番のランニング費用もちゃんと検討される方が多いです。

忘れられることが多いのが2番の初年度予算。

新しいシステムを導入して運用しはじめると、いろいろと手直ししたくなる部分というのが発生します。
こればっかりはいくら事前に十分検討したつもりでも、発生するものです。
このときの改修費用を確保しておかないと、手直ししたくても手直しできないという、なんとも苦しい状況になってしまいます。

 システムは使い始めたら手直ししたくなるモノ

そう考えて、初年度に改修用予算を確保しておくのがおすすめです。

ひと言で「Webシステム開発」と言ってもそのためにかかる工数や費用はピンキリで、
最少の金額と最大の金額を比較したら桁がいくつもかわるぐらい金額に開きがあります。

ちょっとしたショッピングカートCGIを設置するのをSOHOさんに頼んで5千円なんてこともあれば、
独自オンラインショップシステムの開発に1,000万ってこともあります。

そのため私がお客さんとシステムの相談をさせてもらうときは、最初にご予算について質問させてもらうことがほとんどです。

 お客さんから教えていただいたご予算の範囲で実現できること。

これをベースにしてお話していかないと、ご予算100万円というお客さんに1,000万かかるシステムの話しをしてしまって、話しがまったくまとまらずにお互いに時間を無駄にしてしまいます。

そのシステムはいくらぐらいの予算で実現したいことなのか?

是非これを明確にしてからシステム開発の相談をしてみることをおすすめします。

お客さんとシステム化の相談をしていると様々な要望がでてきます。

そんな要望のうち予算内でシステム化できることでも、あえてシステム化しないことを提案することもあります。

私がシステム化をお勧めしないのは、頻度が少ないのに複雑な処理が必要にな業務についてです。


・年に数回しか行わない
・手順が定まってない
・毎回ちょっとずつ違うやり方でやっている

こういう業務をシステム化すると、

・滅多に使わない機能なのに工数(開発費用)が増える
・数回使っただけで機能改修しないと使えなくなる
・他の良く使う機能が、滅多に使わない機能の複雑な制約にひっかかって使いにくくなる

なんてことが良く発生します。

だから予算があっても「滅多に使わない」「やけに複雑」な業務については
システム化するか慎重に判断することをおすすめしています。

めんどくさがり屋の龍司です。

めんどくさがり屋なので、楽をするために苦労してみることがあります。

今回は
「年末年始の営業日について『お知らせ』にも『お問い合わせ』にも書くのはめんどくさい」
と思ったのでそれを解決したときの方法をご紹介します。

このサイトでは、「お知らせ」にbulletinを使っています。
お知らせに書いた正月休みについての記事を問合せフォームでも表示できれば、営業日については一度書くだけで済みます。

...続きを読む


カスタムブロック管理画面に[更新して編集継続]ボタンを追加する

こんにちは。「XOOPS Themes and Templates Advent Calendar 2012」
XOOPS Themes and Templates Advent Calendar 2012
への4回目の投稿となります。

前日のAdventCalendar 2012↓
携帯対応レンダラーのスマホテーマのカスタマイズ with ThemeRoller
http://qiita.com/items/8a97...

今回はカスタムブロック編集中に不便に感じたことをhackして解決する方法を書きます。

第1回アドベントカレンダーの編集中にキーッ!となりました



アドベントカレンダーの第1回の記事は「クリスマスまであと何日?をブロックに表示する」というものでした。


これを作っている間の作業は管理画面カスタムブロックの編集、で

1.コンテンツ欄を修正する
2.[送信]を押す
3.別タブで表示している表画面で確認する
4.直したいところを発見する
5.互換モジュール »» ブロックの管理 で該当カスタムブロックの鉛筆マークをクリックする
1.に戻る

の繰り返しでした。何度も何度も試すためにだんだんイライラして「キーッ!」となってきました。「あれ~?たしか[更新して編集継続]ってなかったけ?」と思って見てみたのですが、ない。よく考えるとALTSYSのテンプレート管理の編集画面だけにそのボタンがあるのでした。

カスタムブロックは上記のように何度も何度も繰り返してダメなところを直すことがあるのでこのボタンがあればいいのに、と思いました。

[送信]ボタンの左側に[更新して編集継続]ボタンを表示する



まずはテンプレートを修正して[送信]ボタンを追加しましょう。

該当するテンプレートは

html\modules\legacy\admin\templates\customblock_edit.html

です。下の方に[送信]ボタンの記述
<input class="formButton" type="submit" value="<{$smarty.const._SUBMIT}>" />

がありますのでその上に

<input class="formButton" type="submit" value="更新して編集継続" name="_form_control_saveedit" />

を追加します。今回は簡単に日本語をじかに書いているので、保存するときに必ずサイトの文字コードに合わせてください。文字コードはutf-8かEUCのはずです。

コントロール部分に処理を追加する



カスタムブロックを編集しているコントロール部分は

html\modules\legacy\admin\actions\blockeditaction.class.php

です。このファイルを開いて、

function executeViewSuccess(&$controller, &$xoopsUser, &$render)

を探します。元は
	function executeViewSuccess(&$controller, &$xoopsUser, &$render)
	{
		$controller->executeForward("./index.php?action=BlockList");
	}

だけです。これは「ブロック一覧画面を表示する」ということです。

ここに「もしも[更新して編集継続]ボタンが押されていたら編集画面を表示する」というロジックを付け加えます。
以下のようなコードになります。

	function executeViewSuccess(&$controller, &$xoopsUser, &$render)
	{
        if(xoops_getrequest('_form_control_saveedit')){
            $controller->executeForward("./index.php?action=CustomBlockEdit&bid=".xoops_getrequest('bid'));
        } else {
            $controller->executeForward("./index.php?action=BlockList");
        }
	}

表示して実行してみます



追加する前の画面の下部はこんな感じ




追加した後はこんな感じになります。




ここまで出来たらOKです。何度も何度も繰り返し行っていた手順の

5.互換モジュール »» ブロックの管理 で該当カスタムブロックの鉛筆マークをクリックする

ここだけですが、短縮することが出来ます!画面遷移にかかる時間を考えるとだいぶ楽になったな~と感じられると思います。

おまけ 画面をスクロールするのもめんどくさくてイヤ!というとき



実際に直してみて「う~ん、満足満足」と思ったのですが、人間欲望は果てしないもので今度は一番下までスクロールするのがめんどうくさくなりました。コンテンツが長く、使っているのがノートパソコンだったからなのですが、でも面倒、、、さて~

と思ったときひらめきました。「コンテンツ」っていう見出しの下にも[更新して編集継続]ボタンがあればいいのではっ!と。

ちょっとかっこわるいですが、自分だけしか管理しないサイトとかならまぁありかもです。

さっき触った

html\modules\legacy\admin\templates\customblock_edit.html

ファイルの「コンテンツ」っていう見出しを探します。

      <td class="head"><{$smarty.const._AD_LEGACY_LANG_CONTENT}></td>

ここのようです。そこにさっき追加したボタンを追加します。

      <td class="head"><{$smarty.const._AD_LEGACY_LANG_CONTENT}>
      <br /><input class="formButton" type="submit" value="更新して編集継続" name="_form_control_saveedit" />
      </td>



これで編集画面を見てみると、今までこんな感じだったのが




このように、コンテンツの下にボタンが追加されました!




まぁこんな感じで見た目はあれですがカスタムブロックの編集でややこしいことをするときはこのボタン、便利なんじゃないかな~と思いました♪


*この方法はhackになりますのでくれぐれも元に戻せるよう、修正前のファイルをどこかに保存しておいてくださいね!

XOOPS Cubeを使っていると「何故かうまくうごかない」とか「さっきはちゃんと動作したのに、今はうまくうごかない」というような事態にたまに遭遇することがあります。

そんな時に念のために試してもらいたいのが、cache,templates_cディレクトリの中身を空にすることです。

cacheディレクトリには何が入る?


cacheディレクトリは、キャッシュという名前のとおり、ブロックキャッシュやモジュールキャッシュを有効にしたときに、ブロック出力のHTMLをファイルとしてキャッシュするために使われるディレクトリです。

その他にもモジュールが何かをキャッシュするためにこのディレクトリを使うことがあります。

たとえば、picoは、メインメニューに表示されるサブメニューの項目をcacheディレクトリにキャッシュします。

これに気がつかなくて、コンテンツ追加したのになんでサブメニューに表示されないんだろう?ってすごい悩んだこともあります(^^;

templates_cディレクトリって何に使われる?


こちらはSmartyテンプレートからHTML出力されるまでの間の中間ファイルが作成されるディレクトリになります。

Smartyの仕組みは、テンプレートファイルをもとにして、phpコードに変換し、phpコードを実行して出力を得るようになってます。このphpコードに変換したファイル(このファイルはコンパイル済みキャッシュと呼ばれます)の置き場所がtemplates_cです。

テンプレートに関係してよく起きる問題が「ファイルを書き換えたのに反映されない」という問題です。

こんな時にあれこれ悩む前にtemplates_cの中身をきれいさっぱり消してしまうとうまく反映されることがあります。

templates_cに作られるファイルも一種のキャッシュですので、想定外のことがあるとキャッシュが悪さして思うように変更が反映されないことがあるんですね。

ちなみに私がはまったケースでは、ディスク容量が不足したときに、中途半端なコンパイル済みキャッシュができてしまい、画面表示に失敗したというのがあります。

このときもtemplates_cをクリアしたら解決しました。

というわけで、何か変更が反映されないトラブルに遭遇したら、cache, templates_cディレクトリの中身の削除(ディレクトリは残してくださいね)を試してみてください。

こんにちは。「XOOPS Themes and Templates Advent Calendar 2012」
XOOPS Themes and Templates Advent Calendar 2012
への3回目の投稿となります。

前日のAdventCalendar 2012↓
XOOPSはPHPなんか分からなくとも何とかなるさあ(2)
http://qiita.com/items/7773...

今回は ブロックによって表示方法を変えるテーマの修正方法 という内容で書きます。


このブロックはこういうスタイルシートで表示したい!というとき



ブロックタイトルは表示したいけどこのブロックは別のスタイルシートで表示したいというようなときはちょっとテーマを修正することで実現することが出来ます。

今回は例えばということで、「Sunset Penguin」テーマを使っているサイトで「クリスマスまであと…」ブロックをそれっぽいタイトルで表示したい、という場合の修正方法を考えてみました。


ブロックidをさがす




「クリスマスまであと…」のブロックのブロックidをみつけます。

管理画面>互換モジュール>ブロックの管理 をみます。



BIDという列に書いてある番号 90 がこの場合は「クリスマスまであと…」のブロックidになります。
ブロックidは固定ではないのでかならず修正したいサイトで確認してくださいね。

テーマであるブロックのときだけ違うスタイルを適用する



theme.htmlで左ブロックを表示している部分を探します。themeによって書き方は色々ですが必ず似た箇所があるのでさがしてみてください。「Sunset Penguin」の場合は、

<{if $xoops_showlblock}>
  <div id="leftcolumn">
    <{foreach item=block from=$xoops_lblocks}>
      <h2 class="blockTitle"><{$block.title}></h2>
      <div class="blockContent"><{$block.content}></div>
    <{/foreach}>
  </div>
<{/if}>

の箇所でした。全て同じ形で出力されていますので、ブロックidが90の時だけ違うデザインになるように修正します。

<{if $xoops_showlblock}>
  <div id="leftcolumn">
    <{foreach item=block from=$xoops_lblocks}>
     <{if $block.id == 90}>
     <{* ブロックidが90の時だけタイトルをこの表示 *}>
      <div style="margin:0 0 5px 0; padding:5px 10px 5px 45px; color:#FFF; background:url('<{$xoops_imageurl}>/images/santa.png') no-repeat #ff99cc;"><{$block.title}></div>
     <{else}>
     <{* ブロックidが90でないときの表示 *}>
      <h2 class="blockTitle"><{$block.title}></h2>
     <{/if}>
      <div class="blockContent"><{$block.content}></div>
    <{/foreach}>
  </div>
<{/if}>

結果、このように表示されました。



テーマをちょっと変えるだけでオリジナルに



というような感じでテーマをちょっと変えるだけでちょっとだけオリジナルな修正、ができました。
テーマは作れないけどちょっと変えたい!というようなとき、こんな感じで修正してみたらいかがでしょう。

タイトルだけでなく本文の表示とか、色々出来ると思いますので試してみてくださいね♪

あわてんぼうのあなたへ、補足



テーマをいろいろ変えてるのにちっとも変わらない…キーッ! となっているあなた、この設定を確認してください。



「themes/ ディレクトリからの自動アップデートを有効にする」が「はい」になっていないと変更したテーマが適用されません(>_<)。

ブログ カレンダー
« « 2013 5月 » »
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
お客様事例
  「RYUSの天野さんは、オープンソースに詳しく、メタバーズ会員サイトの管理を任されている私にとっては、本当に頼りになる存在です」デジタルハリウッド大学大学院 専任教授 三淵啓自様 お客様事例 
 「できることなら当社のシステム案件はすべてRYUSさんにまかせたいぐらいです」株式会社ノード 代表取締役 藤村信夫様 お客様事例