スタッフブログ
そんな要望のうち予算内でシステム化できることでも、あえてシステム化しないことを提案することもあります。
私がシステム化をお勧めしないのは、頻度が少ないのに複雑な処理が必要にな業務についてです。
・年に数回しか行わない
・手順が定まってない
・毎回ちょっとずつ違うやり方でやっている
こういう業務をシステム化すると、
・滅多に使わない機能なのに工数(開発費用)が増える
・数回使っただけで機能改修しないと使えなくなる
・他の良く使う機能が、滅多に使わない機能の複雑な制約にひっかかって使いにくくなる
なんてことが良く発生します。
だから予算があっても「滅多に使わない」「やけに複雑」な業務については
システム化するか慎重に判断することをおすすめしています。
めんどくさがり屋なので、楽をするために苦労してみることがあります。
今回は
「年末年始の営業日について『お知らせ』にも『お問い合わせ』にも書くのはめんどくさい」
と思ったのでそれを解決したときの方法をご紹介します。
このサイトでは、「お知らせ」にbulletinを使っています。
お知らせに書いた正月休みについての記事を問合せフォームでも表示できれば、営業日については一度書くだけで済みます。
そんな時に念のために試してもらいたいのが、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ディレクトリの中身の削除(ディレクトリは残してくださいね)を試してみてください。
Qiita
サイトには「プログラミング知識を共有しよう。」と書かれていて、基本はプログラマ向けの情報共有サイトです。
他の人が書いた記事を「ストック」として収集しておくこともできます。
ちょっとした小ネタを書きやすいので最近私もちょこちょこメモ代わりに投稿することが増えてきました。
記事はタグごとに分類されていて、XOOPSタグもありますのでちょっとのぞいてみてくださいね。
・Qiita XOOPSタグのついた記事一覧
私も書いてますので気になるネタがありましたら是非ストックしてください。
でXOOPS Cubeでも利用しているSmartyにつていの脆弱性が報告されてます。
Smartyのバージョンアップをするのがベターなのですが、テンプレートにトリッキーな記述があったりすると、バージョンアップで動かなくなることもあるので、サクッとバージョンアップするわけに
はいかないケースもあると思います。
その場合は下記の様に現在のコードを修正することで回避してみてください。
XOOPS_ROOT_PATH/class/smarty/Smarty.class.php 1090行目あたりに下記の様なコードがあります。
function trigger_error($error_msg, $error_type = E_USER_WARNING)
{
trigger_error("Smarty error: $error_msg,", $error_type);
}
これを下記に書き換えてください。
function trigger_error($error_msg, $error_type = E_USER_WARNING)
{
$msg = htmlentities($error_msg);
trigger_error("Smarty error: $msg", $error_type);
}
メニューからPhpStrom→Preference
ProjectSettingsでPHPを開く
Smartyを選択してデリミタ設定を "{" から"<{"、"}"から"}>"へ変更
これでXOOPS CubeでのSmartyのデリミタ設定に合わせることができます。
HTMLページを作成するpicoモジュールでは、サブメニューにカテゴリなどを自動的に展開する機能があります。
ところが、カテゴリを追加してもサブメニューにカテゴリが追加されないことがありました。
最初は不思議だったのですが、コードを追っかけてたら一定時間サブメニューをキャッシュするつくりになっていたのを発見しました。
XOOPS_TRUST_PATH/modules/pico/xoops_version.php line48
$_sub_menu_cache = XOOPS_TRUST_PATH . '/cache/'. urlencode(substr(XOOPS_URL, 7)) . '_' . $mydirname . '_' . (is_object(@$GLOBALS['xoopsUser'])? join('-', $GLOBALS['xoopsUser']->getGroups()):XOOPS_GROUP_ANONYMOUS) . '_' . $GLOBALS['xoopsConfig']['language'] . '.submenu';
if (is_file($_sub_menu_cache) && time() - 3600 < filemtime($_sub_menu_cache)) {
$modversion['sub'] = unserialize(file_get_contents($_sub_menu_cache));
} else {
require_once dirname(__FILE__).'/include/common_functions.php' ;
$modversion['sub'] = pico_common_get_submenu( $mydirname ) ;
file_put_contents($_sub_menu_cache, serialize($modversion['sub']));
}
キャッシュされたくなければ、3600を0に書き換えてしまえばキャッシュされなくなります。サイト構築時はキャッシュ無しの方がすぐに表示確認できて便利ですよね。
公開時にはまたキャッシュ数値を大きくすると良いと思います。
様々なオープンソース関係者が集まるオープンソースのお祭り「オープンソースカンファレンス(以下OSC)」 9月7日〜8日と明星大学で開催されたオープンソースカンファレンス2012 Tokyo/Fallに1日だけですが参加してきました。
ロードバイクで片道2.5時間
最近すっかりロードバイクにはまってる(くわしくは「40代からのロードバイク」をごらんください)ので、自宅から明星大学日野キャンパスまでロードバイクで移動してみました。
行きは約2.5時間、帰りは約2時間弱だったかな(^^;
軽いトレーニングのつもりで走るにはちょうどよい距離でした。
誰もいないXOOPSブース(^^;
いつもこういうイベント出展のときに力がぬけてるXOOPSブースらしく、私が到着した頃には誰もブースにいませんでした(^^;
それと比較するととなりのNetCommonsブースは気合いがはいってましたねぇ
NetCommonsセッション
XOOPSのセッションは9月7日(金)に開催されていて私の参加した土曜日にはセッションがなかったので、かわりにNetCommonsのセッションを聞いてきました。
NetCommonsは学校、教育関係での導入実績が豊富です。最近でそれ以外の実績もちょくちょく見かけるようになりましたね。
つい先日お台場で開催された「お台場サイクルフェスティバル」のサイトもNetCommonsで構築されてましたし。
デザインや細かなところを見るとやや時代遅れ感もあるのですが、こういう保守的な見た目の方が良いということもあるので、これはこれでありだろうな思ってます。
それにしても驚いたのが毎月3回セミナーが開催されていること。 入門講座、活用講座、デザインカスタマイズ講座、モジュールカスタマイズ講座、システム運用講座と学びたい内容にあわせて5種類のセミナーが用意してあって毎月いずれか3つが開催されてるようです。 かなり力はいってますね。
夜のOSC
夜は久しぶりにXOOPS関係のみなさんと楽しい食事ができました。
なんだかんだで4,5時間同じ店でしゃべり続けてたような気がします(^^;
フォーム作成方法が簡単になってると思いますので、もしよければお試しください。
CMSインサイド当日に使ったスライドを少しだけ手直ししてSlideShareにもUPしました。
復習等にお使いいただければと思います。
今回ご紹介するのは、uname でのログイン禁止です。
unameは、XOOPS Cubeでユーザさんのハンドル名として扱われるカラムでログインするときも、このunameとパスワードのペアでログインするのがデフォルトです。
ただ日本では、ハンドル名に日本語を使いたかったり、社内ポータルとしてXOOPS Cubeを使うケースではunameに本名を記述して、ユーザ名として表示させたりしていて、ログインIDとして使うには不向きなことがあります。
そんなときにはemail+パスワードでログインできるpreload等を使うのが定番です。
通所だと、email+パスワードでも、uname+パスワードでもログインできてOKとなることがほとんどなのですが、先日出てきたご要望で「unameでのログインは禁止したい」という要望があり、対応しました。
改造する箇所はシンプルです。
html/modules/user/kernel/LegacypageFunctions.class.php のcheckLoginメソッドを改造します。
function checkLogin(&$xoopsUser)
{
if (is_object($xoopsUser)) {
return;
}
$root =& XCube_Root::getSingleton();
$root->mLanguageManager->loadModuleMessageCatalog('user');
return;
このタイミングでreturnしてるのは、一応userモジュールの言語ファイルだけ読み込むためです。
(他のログイン関係のpreload等で使われる可能性が高いので)
レアな改造ですが、もし同じ事をしたくなったら参考にしてください。