このサイトは株式会社オープンソース・ワークショップの旧サイトです。
新サイトを参照していただけますようお願いいたします。
https://opensource-workshop.jp/
NetCommons開発TIPS
NetCommons2 の任意のモジュールでjqueryを利用する
こんにちは。
オープンソース・ワークショップの牟田口です。
NetCommons2 のJavaScriptライブラリはprototype.jsですが、jqueryを使いたい時があります。
jqueryを使う時に、jqueryを個別にダウンロードして読み込むと、ウィジウィグの画像添付、ファイル添付が動作しなくなったり、jqueryの多重読み込みで白画面になったりする不具合が出たりします。
そこでNetCommons2でもメニューの一部がjqueryを使っていますので、その仕組みを流用して他のモジュールでも使えるようにする方法を記載します。
1.html/webapp/modules/モジュール名/モジュール名_script.html
<script class="nc_script" type="text/javascript">
if(!iepCls["<{$id}>"]) {
iepCls["<{$id}>"] = new clsIep("<{$id}>");
}
// use jquery
// 実装例: https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/modules/menu/files/js/menu.js#L899
// jqcheckCls変数: https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/modules/common/files/js/jqcheck.js
// jquery実体: https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/modules/comp/files/js/extension/jquery-1.6.4.min.js
// これを書くことでjqueryを読み込んでる
jqcheckCls.jqload("jquery-1.6.4.min", "window.jQuery", function() {
});
</script>
・上記を書くことで、jqueryが読み込まれ、$の代わりにjQueryで書く事が出来ます。
・[補足] NetCommons2ではprototype.jsで$を先に使っているため、jqueryも使う$と衝突します。そのため$の代わりに別の変数jQueryを使って記述します。
・モジュール名_script.htmlは、各テンプレートから参照させるため、モジュールのどのテンプレートでもjQueryが使えるようになります。
・この方法でjqueryを何度も読み込んでも、jqueryの多重読み込みになりませんでした。
JQuery記述例
// 項目表示
jQuery('#discroption').show('slow');
// 項目非表示
jQuery('#discroption').hide('slow');
参考になれば幸いです。
(2019/12/23追記)
Jqueryのライブラリは拡張モジュールを含めると、複数ありました。
本体検索:
html/webapp/modules/comp/files/js/extension/jquery.mobile_addition.js
html/webapp/modules/comp/files/js/extension/jquery-1.6.4.min.js
html/webapp/modules/comp/files/js/extension/jquery.mobile-1.0.1.min.js
⇒共通としてJquery利用
Jqueryの利用
https://github.com/netcommons/NetCommons2/search?q=jquery&unscoped_q=jquery
html/webapp/modules/menu/files/js/menu.js
⇒メニューの一部テンプレートで利用
html/webapp/modules/comp/files/js/extension/jquery.mobile_addition.js
⇒スマホ表示のjqueryモバイルで利用
html/webapp/modules/common/files/js/jqcheck.js
⇒何かチェックしてる?
html/webapp/modules/comp/files/js/plugins/comp_textareamain.js
⇒ウィジウィグの入力にIE+jquery属性入ってるかのIF文。Jquery利用の観点からすると影響なし。
拡張モジュール検索:
multimedia/files/images/jquery.jplayer.js
multimedia/files/images/jquery-1.7.1.min.js
multimedia/files/images/jquery-1.8.3.min.js
⇒動画モジュール再生のjplayerで利用
参考まで。
NetCommons2 loggerでデバッグログをファイル出力する
こんにちは。
オープンソース・ワークショップの牟田口です。
NetCommons2 にはloggerの仕組みがありますが、初期状態は画面出力のため、ファイル出力されず、インストール時の確認やデバッグ時には不便な場合があります。
そこでloggerの出力をファイル出力に変更する方法を記載します。
1. html\webapp\config\global-config.ini を変更
;;DEFAULT_LOGGER = viewDisplayManage
DEFAULT_LOGGER = simpleFile
2. html\webapp\config\define.inc.php の末尾に追記
define('LOG_LEVEL', LEVEL_ERROR);
すると、下記ディレクトリにログが出力されます。
html\webapp\logs\maple.log
[2019/06/02 02:23:57] [error] 存在しないコンポーネントが指定されました : dicon://Session - DIContainerInitializer#doValueBeforeParse
[2019/06/02 02:24:53] [error] 存在しないコンポーネントが指定されました : dicon://Session - DIContainerInitializer#doValueBeforeParse
[2019/06/02 02:24:55] [error] 存在しないコンポーネントが指定されました : dicon://Session - DIContainerInitializer#doValueBeforeParse
参考になれば幸いです。
参考リンク
https://nc2.netcommons.org/bbjx36jrx-6666/#_6666
NetCommons2 ページスタイル 指定できるテーマの違いについて
オープンソース・ワークショップのプログラマの牧野です。
NetCommons2のページスタイルのテーマについて、備忘録として記載しておきます。
NetCommons2では、全体、ページ、ブロック毎にページスタイルを設定できますが、
その時に指定できるテーマについて、差があります。
テーマ種類 | 全体 | ページ | ブロック |
クラシック | 〇 | 〇 | 〇 |
サイドライン | 〇 | 〇 | 〇 |
アンダーライン | 〇 | 〇 | 〇 |
シンプル | 〇 | 〇 | 〇 |
タイトルアクセント | × | × | 〇 |
パネル | 〇 | 〇 | 〇 |
パネル+ライン | 〇 | 〇 | 〇 |
点線 | 〇 | 〇 | 〇 |
アート | 〇 | 〇 | × |
テクスチャ | 〇 | 〇 | × |
アクセシビリティ対応 | 〇 | 〇 | × |
例えば、「タイトルアクセント」は、サイト全体もしくはページ全体に指定ができませんので、ブロックごとに指定する必要があります。
「アート」は、サイト全体もしくはページ全体で指定できますが、ブロックごとに指定する事ができません。
ページスタイルのテーマを指定する時は、上記の事をお気を付けください。
NetCommons2 新着情報のバグ
こんにちは。
株式会社オープンソース・ワークショップの永原です。
NetCommons2 新着情報のバグを見つけたので、とりあえずここにメモ。
発現する条件は以下
- 新着情報を配置している。
- 新着情報に日誌を表示している。(他のモジュールでも起こり得そう)
- 日誌をブロック移動した。
この時、移動した日誌ブロックの記事をクリックすると、
"入力値が不正です。不正にアクセスされた可能性があります。"
とエラーになって、表示できないことがあります。
これは、NetCommons2 の新着情報モジュールのバグです。
- ログインしていること。
- ブロック移動前に新着から該当記事にリンクすること。
- この時点で、そのユーザが該当記事を見たという履歴ができる。
- 履歴データはroom_id を持っていない。
- ブロックを移動する。
- 再び新着をクリック。
- 履歴があるかどうかを判定する際、room_id も含めて確認するので、履歴なしと判定。
- 履歴をINSERTしようとするが、データベースのキーはroom_id がないので、重複エラーになる。
ということで、以下のように修正。
webapp/modules/whatsnew/components/Action.class.php
function setRead() { $_user_id = $this->_session->getParameter("_user_id"); if (empty($_user_id)) { return true; } $whatsnew = $this->_request->getParameter("whatsnew"); if (empty($whatsnew)) { return false; } // 新着の既読確認に romm_id が含まれていたので、削除。by nagahara@opensource-workshop.jp // リンク先のブロックをルーム移動した際、エラーになる。 // エラーは、ここで romm_id を含んで既読確認しているのに、既読データのINSERT は romm_id なしで行おうとするため。 $params = array( "whatsnew_id"=>$whatsnew["whatsnew_id"], "user_id" => $_user_id ); /* $params = array( "whatsnew_id"=>$whatsnew["whatsnew_id"], "user_id" => $_user_id, 'room_id' => $whatsnew['room_id'] ); */
Win7 + IE11の動画ダウンロードについて
こんにちは。
オープンソース・ワークショップの永原です。
Win7 + IE11の動画ダウンロードについて、はまった件があったのでメモです。
対象は当社のシンプル動画モジュール。
ログインする(HTTPS)とダメで、ログアウトしている(HTTP)と再生できるという現象でした。
以下、備忘録として。
原因はIE のSSL 時に Content-disposition: inline にした際、IE がファイル名を認識せず、動画再生で拡張子とファイル形式の不一致エラーがあったこと。
ログイン時にアウトなのは、ログインすると、SSL になるから。
Content-disposition: attachment なら、イケた。しかし、ダウンロードの選択画面が出る。
Content-disposition: inline で動かすためには、動画のデータはHTTP で流す必要がある。
そのため、以下をカスタマイズ。
simplemovie_view_main_init.html で動画のリンクは、http にする。
define.inc.php で、ログイン時の強制HTTPS を動画再生時には無効にする。
movie/View.class.php で、Content-disposition のinline指定
Simplemovie_View_Main_Iframe で動画のリンクは、http にする。
以上