プログラミング」カテゴリーアーカイブ

[#XOOPSCube] Factoryで生成したモジュールとletag、lecat連携

Factoryモジュール()で自動生成したモジュールとletag,lecatモジュールの連携ですが、
ぶっちゃけ管理画面の一般設定でletag,lecatを選択すればだいたい何とかなります。

カテゴリが表示されなかったり項目のViewActionでタグが表示されなかったりするので、ちょっとだけ手を加えました。

letag連携のタグが表示されない

「タグを使う」にチェックを入れて作成したテーブルのViewActionのテンプレートを見ると、

<!-- tag -->
    <{if count($object->mTag)>0}>
    <dt class="tagList"><{$smarty.const._TAG}>: </dt>
    <dd class="tagList">
    <{foreach item=tag from=$object->mTag}>
     <{assign var=tagurl value=$tag|xoops_escape:url}>
      <span><a href="<{xoops_cooluri dirname=$dirname dataname=$dataname query="tag=`$tag`"}>"><{$tag|xoops_escape}></a></span> 
    <{/foreach}>
    <{/if}>

と、タグ出力用のテンプレートが含まれていることがわかります。しかし、タグを設定したレコードを作成しても、何も表示されません。
そこで、xoops_trust_path/modules/moduleName/class/handler/Table.class.phpに関数を1つ追加します。

diff --git a/xoops_trust_path/modules/moduleName/class/handler/Table.class.php b/xoops_trust_path/modules/moduleName/class/handler/Table.class.php
index e76ffc3..58401c9 100644
--- a/xoops_trust_path/modules/moduleName/class/handler/Table.class.php
+++ b/xoops_trust_path/modules/moduleName/class/handler/Table.class.php
@@ -61,6 +61,26 @@ class ModuleName_TableObject extends Legacy_AbstractObject
 		return 0;
 	}
 
+	public function loadTag()
+	{
+		$tagDirname = ModuleName_Utils::getModuleConfig($this-&gt;getDirname(), 'tag_dirname');
+		if ($this-&gt;_mIsTagLoaded == false &amp;&amp; $tagDirname) {
+			$tagArr = array();
+			if (! $this-&gt;isNew()) {
+				XCube_DelegateUtils::call(
+					'Legacy_Tag.'.$tagDirname.'.GetTags',
+					new XCube_Ref($tagArr),
+					$tagDirname,
+					$this-&gt;getDirname(),
+					'table',
+					$this-&gt;get('table_id')
+				);
+			}
+			$this-&gt;mTag = $tagArr;
+			$this-&gt;_mIsTagLoaded = true;
+		}
+	}
+		
 }

この関数をどこかのタイミングで呼び出すことにより、オブジェクトにタグの情報を読みこませることができます。
ちなみに、この関数はXCCKモジュールで利用されていたものを参考に、カラム名等を書き換えたものです。

タグを利用できるようにするために、xoops_trust_path/modules/moduleName/class/AbstractViewAction.class.phpの_setupObject関数に、次のようにして先ほどの関数を呼び出すように記述します。

diff --git a/xoops_trust_path/modules/moduleName/class/AbstractViewAction.class.php b/xoops_trust_path/modules/moduleName/class/AbstractViewAction.class.php
index 8ef92f1..0aaa003 100644
--- a/xoops_trust_path/modules/moduleName/class/AbstractViewAction.class.php
+++ b/xoops_trust_path/modules/moduleName/class/AbstractViewAction.class.php
@@ -71,6 +71,8 @@ abstract class ModuleName_AbstractViewAction extends ModuleName_AbstractAction
 		$this-&gt;mObjectHandler =&amp; $this-&gt;_getHandler();
 
 		$this-&gt;mObject =&amp; $this-&gt;mObjectHandler-&gt;get($id);
+
+		$this-&gt;mObject-&gt;loadTag();
 	}
 
 	/**

これでオブジェクトのmTagsメンバにタグ情報がセットされます。
あとはViewActionで表示してみれば、タグを設定している項目についてはタグが列挙されるはずです。

カテゴリが表示されない

モジュールをインストールして実際にデータを追加してみると、なぜかカテゴリが表示されない現象に遭遇しました。もちろん事前にlecatモジュールでカテゴリを作成して有ります。対策として、テンプレートを一部変更することで表示できました。こういう時にALTSYSモジュールはとっても便利ですね!

書き換える場所はカテゴリIDを表示しようとしている場所全てです。(e.g. {dirname}_{table}_view.html) IDをそのまま表示すると言うことではなく、カテゴリ名称を表示させます。

- <td><{assign var=catId value=$obj->getShow('category_id')}><{$mainTitleList.$catId|xoops_escape}></td>
+ <td><{$accessController->getTitle($obj->getVar('category_id'))|xoops_escape}></td>

$accessControllerが、lecatモジュール(Legacy_Tag準拠モジュール)よりカテゴリを取得する役割を持っているようで、自動生成されたActionからアサインされています。

これでカテゴリ・タグともに表示できるようになりました。
まだタグを限定したList表示がうまく動作していないので、検証次第またこちらで報告したいと思います。

[メモ][XOOPS] XOOPS CubeをPostgreSQLに対応させる試み その1

XOOPS CubeをPostgreSQLに対応させてみようと思うんだ。
動機なんてない。単に私の中でPostgreSQL熱がじわじわと広がりつつあるからだ。

過去に同じようなことを考えた人がいるであろうことは明らかだったが、XOOPS2.0.7をPostgreSQL対応させるパッチしか見つからないし、そもそもインストーラで読み込むべきSQLファイルが存在しないので、結構大変かもしれない。

ベースはXoopsX 2012/09/11現在のtarball。
pgsqldatabase.phpを先述のパッチから移植している。(←だいぶ前のものではあるがどうにか動くらしい
とりあえず作業予定項目

  • html/install/sql/pgsql.structure.sql
  • html/install/sql/pgsql.data.sql
  • インストーラでpgsqlを選択できない問題
  • user, profileをはじめとする標準同梱モジュール群のSQL
  • 動作確認

P.S.
○名前.comでドメインを取得したので、近日中にブログ、CMSテストページの再構築をやるかもしれない

家計簿Webシステム(仮称) リリース!

こんにちは、bis5です。

Twitterですでにつぶやいていますが、
本日(3/2)、家計簿Webシステム(仮称)をリリース、公開しました。

家計簿Webシステム(仮称)は、CakePHPフレームワークの上で動作するWebアプリケーションです。
今までノートなどの紙媒体やエクセルのワークシート上で記録していた家計簿をサーバー上で記録することができます。
ユーザー認証機能を実装しており、同一URLで複数のユーザーが利用することができます。
もちろん、それぞれのユーザーが閲覧できるのは自分で登録した情報だけ。

Webアプリケーションですから、PCはもちろん、AndroidやiPhone等のスマートフォンからも利用できます。
レイアウトなどの最適化は行っていませんが、従来型の携帯電話(いわゆるガラケー)でも利用可能です。

利用方法
・http://abook.app.bis5.mydns.jp にアクセス
・「新規登録」からユーザー登録 ※重複するユーザー名があると、エラーとなります
・ログインし、まず収支区分を登録
・あとはお金の流れが発生したときにそれを登録すればOK

現状では登録して一覧表示する程度の機能しかありませんが、
集計関連の機能を中心に順次実装していく予定です。

バグ・不具合、実装して欲しい機能の要望などあれば、
Twitterか、Redmine(バグトラッカー)(別途登録が必要)へお願いします

[CakePHP][覚え書き] find()の引数でデータをソートして取得したかった

んです。

class HogeController extends AppController {
    public $uses = 'Hoga';
    function index() {
        $this->Hoga->find('all', array('order' => 'date'));
    }
}

こんな感じに、find()の第2引数にオプションとして放り込めばソートできました。
orderの値にはソートするフィールドを指定します。

参考までに、実行されているSQL文はこんな感じでした。

SELECT `Hoga`.`id`, `Hoga`.`date`, `Hoga`.`name`, `Hoga`.`description`, `Hoga`.`created`, `Hoga`.`modified` 
FROM `hoga` AS `Hoga` WHERE 1 = 1 ORDER BY `date` ASC

参考リンク

[Windows][C#][OSS] Googleのタスクリストを表示するだけのプログラムを作って公開してみた

GoogleカレンダーのToDoリストだけを表示できるhttps://mail.google.com/tasks/canvasを表示するだけのプログラム「Google ToDo Viewer」を適当に作ってリリースしてみた。

オープンソースソフトウェアなので自由に改変できます。(ライセンスはMS-PL(日本語訳見つからない>< )です) 自分ではほとんどコード書いてないけど

Windows専用(.net Framework 4.0 CE必須)です。

リリースノート:v1.0.0.0リリース
ダウンロード:Windows実行形式ファイル(.exe)
Sourceforge.jp(PersonalForge):GoogleToDoViewer作業部屋

注意:
使いにくいのは仕様です。
使 い に く い の は 仕 様 で す 。
大事なことなので2回(ry

バグ・要望はTwitterRedmineプロジェクト(要ユーザ登録)へチケット登録でお願いしますノ