PPPPPRIQIA Press (プププププリッキアプレス)

by 有限会社プリッキア

web・ホームページ・モバイルサイト制作の横浜にある制作会社PRIQIA(プリッキア)のスタッフブログです。

modxの管理画面がカスタマイズしやすくなったらしいので・・・

投稿者: shimojoカテゴリ: CMS, プログラミングタグ:,

皆さんこんにちは。
最近ブログ投稿をサボっていたので
引き続きshimojoが投稿します。

たまには技術の話でも・・・ということで
今回はMODX Evolutionの話です。

先月あたりに新しいバージョンが出まして、
管理画面のカスタマイズが行いやすくなったとのことなので早速使ってみました。
まだあまり情報が無かったので今回はとりあえずツリーペインをカスタマイズしてみることにしました。

元々のツリーペインは皆さん知っていると思いますがこんな感じ。

 

作業手順は以下のとおり

1.プラグインコードの記述

エレメント > エレメント管理 > プラグイン

とたどり新しいプラグインを作成します。

今回は簡易的に↓の様な、指定した親IDを持つリソースの
一覧と新規作成のみを表示するものを作りました。

if($action!=1 || $_GET['f']!==’tree’) return;

$pids = array(2,3,4);

echo <<<EOT
<style type=”text/css”>
#treeView {
line-height: 2em;
}
#treeView dt {
margin-top: 10px;
background-color:#ccf;
font-size: 20px;
}
#treeView dd {
font-size: 16px;
}

</style>
EOT;

echo ‘<dl id=”treeView”>’;
foreach ($pids as $pid) {
$res = $modx->getDocument($pid, “pagetitle”, 1);
if (empty($res)) {
$res = $modx->getDocument($pid, “pagetitle”, 0);
}
echo “<dt>{$res['pagetitle']}</dt>”;

echo “<dd><a href=\”index.php?a=4&pid={$pid}&newtemplate={$tids[$pid]}\” target=\”main\”>{$res['pagetitle']}の新規追加</a></dd>”;
echo “<dd><a href=\”index.php?a=3&id={$pid}&newtemplate={$tids[$pid]}&tab=0\” target=\”main\”>{$res['pagetitle']}の一覧</a></dd>”;
}
echo ‘</dl>’;

if($_SESSION['mgrRole'] != ’1′) {
$modx->event->setGlobalVariable(‘action’,998);
}

一つずつ説明すると、

if($action!=1 || $_GET['f']!==’tree’) return;

これがツリーペインの判別方法。
このままコピペすればツリーペイン以外ではreturn(元々の処理が実行)されます。

次に

$pids = array(2,3,4);

ここで表示対象の親リソースIDを指定しています。

次に

echo <<<EOT
?
EOT

で見た目を適当に調整するようCSSを記述しています。

次に

echo ‘<dl id=”treeView”>’;
?
echo ‘</dl>’;

の処理で新規追加と一覧へのリンクを生成します。

最後に重要ポイント。

if($_SESSION['mgrRole'] != ’1′) {
$modx->event->setGlobalVariable(‘action’,998);
}

この処理でv1.0.6Jで実装された何もしないというアクション(998)を設定します。
これを入れることでデフォルトのメニューペインを表示しないようにしています。
ちなみに今回はデバッグの利便性も考え、ロールがAdministrator(ロールID:1)の場合には
デフォルトのメニューペインも表示するようにしています。

2.システムイベントの設定

今回実装するのはツリーペインなので、
プラグイン編集画面のシステムイベントタブから、
管理画面のページ初期化処理(OnManagerPageInit)にチェックを入れます。

3.保存

最後に右上の保存ボタンを押下して完了。
これでツリーペインがカスタマイズされているはずです。
ツリーペインは管理画面内のページを遷移しても再描画されませんので、
手っ取り早くログアウト → ログインして見ます。
そうするとこんな感じに表示が変わります。

 

こうすると余計なメニューは表示されないので、
あまり知識の無い人へ管理画面の情報を教えるときに
このカスタマイズをしておくと安心ですね。

IE6でmin-heightとか

投稿者: nakageカテゴリ: CMS, CSS/HTMLタグ:

背景画像をグラデでフェードアウトとかさせて、本文が少ない場合にうっかり画像が見切れてしまう・・・みなさんはそんな体験ありませんか?ありますよね、たまには。どうしようもない記事を書き続けるnakageです。

「min-heightでどうにかなるんじゃないっけ」

「いやでもIE6でry」

「あー、なんだっけ、2行足せばいいんですよ」

Google先生に尋ねる

・・・といった一連の流れを経て、だったら、もうブログにメモろうと。

min-height: 100px;
height: auto !important;
height: 100px;

これを気に、社内で「なんだっけー、なんだっけー」とかつこく隣の人に聞かないようにします!

以前、イラレでど忘れしてた機能を思い出そうとググったら自分で書いた過去の記事が出てきたので、今回はググるまでもなく、きちんと覚えます。。。

WordPressで新着記事に「NEW」を表示する

投稿者: たかおファンカテゴリ: CMSタグ:

お世話になっております。出費を極力押さえているにも関わらず、お金が貯まらない不幸なたかおファンです。

最近WordPressを組み込んだウェブサイト制作をしました。
その際にオリジナルのテンプレートを作成したのですが、新着記事に「NEW」マークを付けたいとの要望。
それの実装を検討してみました。

記事の続きを読む »

MT5で月送りカレンダーウィジェット作った

投稿者: たかおファンカテゴリ: CMSタグ:,

お世話になっております、たかおファンです。

今、MovableType 5(正確にはMTOS5だけど)で複数のブログを複合したサイト作ってるんすけど、
カレンダーの構築で超苦戦しました。なぜだ。。。

標準でカレンダーウィジェット付いてるけど、なんともお粗末で、
月送り機能や、カレントの月以外の表示ができんのです。WordPressではデフォなのになんでや!
おそらく記事数が増えると再構築のコストが半端無いからでしょうね。

さてそんなことは放っておいてガシガシ組んでみました。

<mt:SetVarTemplate name="calendar">
<div class="lNavisec01 inlineC">
<h3 class="h3_style02">Calendar</h3>
	<p class="inlineC mb12 fS"><$mt:ArchiveDate language="en" format="%B %Y"$></p>
	<table cellpadding="0" cellspacing="0">
		<tr>
			<th>M</th>
			<th>T</th>
			<th>W</th>
			<th>T</th>
			<th>F</th>
			<th>S</th>
			<th>S</th>
		</tr>
	<mt:Calendar month="this">
        <mt:CalendarWeekHeader><tr></mt:CalendarWeekHeader>
			<td>
				<mt:CalendarIfToday><span class="stay"></mt:CalendarIfToday>
		        <mt:CalendarIfEntries>
		        	<mt:Entries lastn="1"><a href="<$mt:EntryPermalink archive_type="Daily"$>"><$mt:CalendarDay$></a></mt:Entries>
		        </mt:CalendarIfEntries>
				<mt:CalendarIfNoEntries><$mt:CalendarDay$></mt:CalendarIfNoEntries>
				<mt:CalendarIfBlank>&nbsp;</mt:CalendarIfBlank>
				<mt:CalendarIfToday></span></mt:CalendarIfToday>
            </td>
		<mt:CalendarWeekFooter></tr></mt:CalendarWeekFooter>
	</mt:Calendar>
	</table>
	<div class="div_lNavicalendar clearfix">
		<p class="div_lNavicalendarL"><mt:ArchivePrevious archive_type="Monthly"><a href="<$mt:ArchiveLink archive_type="Monthly"$>"><$mt:ArchiveDate language="en" format="%B"$></a></mt:ArchivePrevious></p>
		<p class="div_lNavicalendarR"><mt:ArchiveNext archive_type="Monthly"><a href="<$mt:ArchiveLink archive_type="Monthly"$>"><$mt:ArchiveDate language="en" format="%B"$></a></mt:ArchiveNext></p>
	<!-- /div_lNavicalendar --></div>
<!-- /lNavicalendarsec01 --></div>
</mt:SetVarTemplate>

<mt:IfArchiveType archive_type="Monthly">
	<$mt:Var name="calendar"$>
<mt:Else>
<mt:IfArchiveType archive_type="Daily">
	<$mt:Var name="calendar"$>
<mt:Else>
	<mt:ArchiveList archive_type="Monthly" lastn="1">
		<$mt:Var name="calendar"$>
	</mt:ArchiveList>
</mt:IfArchiveType>
</mt:IfArchiveType>

そのままコピペしたのでclassとか見出しとかカレンダーと直接関係無いものも混じってます。
すごい苦労した。そして改めてMT公式のリファレンスが言葉足らず過ぎると実感しました。

ポイントは月別、日別アーカイブページの時とは違って、インデックスページの場合でarchive_typeの変更が必要な事ですね。
カレンダー表示するには特定の月のアーカイブの走査が必要なので、インデックスページではカレンダーのテリトリー内だけarchive_type=”Monthly”とする必要があります。
そして、lastn=1として最新月に設定。

という感じでした。
眠いのでこれでさよなら。

NEW!MR.SAMURAIサービス

今週も火曜日がやってきました!

毎週火曜はプリッキアがサービスをリリースする日です!

今回ご紹介するのは……

http://www.priqia.com/service/modx/index.html

http://www.priqia.com/service/modx/index.html

Modx運用マニュアル!

http://www.priqia.com/service/modx/index.html

Modxについてもっと知りたいのに、あまり情報がない!

誰かに聞きたいけど、まわりに詳しい人がいない!など

プリッキアがサポートいたします!マニュアルで有効使用!

【名刺デザイン】名刺デザイン・印刷-横浜のWEB制作会社PRIQIA(プリッキア)_1280307343964

名刺デザインサービス

http://www.priqia.com/service/card/index.html

なんと、なんと、弊社では名刺が100枚まで、

デザイン料込で9800円でやらせていただきます。

もちろんオリジナルデザイで作成します!

【予約管理システム】予約を自動で楽々管理-横浜のWEB制作会社PRIQIA(プリッキア)_1280308423254

予約管理システム

http://www.priqia.com/service/reservation/index.html

こちらのサービスは、ネイルサロン、美容室、歯医者、整体院など

事前予約が必要なサービスのホームページなどに導入すれば、

らくらく予約管理ができます!

あなたに合ったサービスはありましたか?

是非ご活用ください!

PHPMailerにハマッタ

投稿者: shimojoカテゴリ: CMS, プログラミングタグ:,

私事ですが、本日は私の誕生日でした。?(^◇^)/

社内の人たちに祝ってもらい、本日のブログネタ完成!
・・・と思ったのですが、写真は撮ってないし、
ブログとしてはちょっと文字数が足りないということで、
前回(2/22)に引き続き、技術系の話をします。

今回は開発者向けのコアな内容にします。
お題はPHPのメール送信ライブラリであるPHPMailer。

事の発端は弊社CMS担当から
「MODxでフォームからメールを送信すると送信者名が文字化けします」
の一言。

私もMODxで組んだフォームからメールを送信したことがありますが、
一度も文字化けが発生したことがありませんでした。

とはいえ実際に文字化けしたメールがある以上調査をせねば
ということでまずは文字化けしたメールを確認。

送信者名が↓の様になっています。

ここに非常に長い名前のメール送信者名\r\n を設定してみます

これを見てピンとくる人もいるかもしれませんが、
どうやら文字化けというより、改行コードがそのまま表示されている模様。
ということでそのあたりを中心に調査開始。

普段メールを使用していても、知っている人は少ないと思いますが、
メールの送信者名は文字をそのまま送っているのではなく、
Base64という方式に変換されて送信されています。
これは送る文字が日本語などであってもすべて英数字+α(64種類)
だけを使用して表すことができるというものです。
たとえば、問題の送信者名を変換すると

=?ISO-2022-JP?B?GyRCJW8hPCVrJUkbKEIgGyRCJW8lcxsoQiAbJEIlSCVsITwlRyUjGyhC?=

といった感じになります。(長いので一部抜粋)

この方式の難点は、64種類であらわすため文字の長さが約33%増加するところで、
メールの規格で定められた“78文字で改行するべき”という規格に簡単に接触し改行が行われます。

ということでこの改行を行っているところを調査すると、以下の記述を発見!

$encoded = addcslashes($str, “\0..\37\177\\\”");

これがなにをしているかというと
文字コードの0?31番(8進数で0?37)と127(8進数で177)と\と”を
文字コードから文字列に変換しますという処理。
改行コード(と再起コード)である10番(と13番)は0?31番に含まれるわけで・・・
しかもマルチバイト文字の場合のみ通るというピンポイント処理。

これを対処するには以下の三つが考えられます。
1.addcslashesの処理を改変する
2.処理を行っているメソッドをオーバーライドする。
3.あきらめて長文にならないようにする。

今回は自分で作成したフォームからの送信なので、
手軽さを考え1の対処をしました。↓

$encoded = addcslashes($str, “\0..\11\13..\14\16..\37\177\\\”");

とりあえず、これで問題なく送信されていますが、
オープンソースのコードは過信してはいけないようです。

と書いたのはいいのですが、つい先日このメールフォームスニペットの
新バージョンが出たようで、その中ではこの問題は対処されているそうですorz
あと一週間くらい早く出してほしかった・・・

TinyMCEには隠し設定がある!?

投稿者: shimojoカテゴリ: CMSタグ:

技術系の話がほとんど無いというのもどうかと思うので、今回はそれ系の話をしようと思います。

最近弊社では、modxというCMSを用いたサイトの管理を提案させて頂いています。
提案する側として、常により良い使い方を求めて日々勉強していますが、
ごく最近まで知らなかった設定の謎についてお話します。

modxでは1つのページをパーツごとに分割して作成することが出来ます。
例えば、ヘッダー、コンテンツ、フッターを別々に作成するなんてことが可能です。
また、作成画面はリッチテキストエディターを使用するため、
↓の図のようにグラフィカルな表示になっているので、直感的に操作ができてとても便利です。

blog0223_02

しかし、当然のことながら各パーツを別々に作るということは、ヘッダーで定義されたCSSファイルの情報は、
コンテンツの作成には反映されないという状態になります。
そのため、作成画面を開くと↓の図のように残念な感じで表示されてしまいます。

blog0223_04

そんなときのために、modxには作成画面に反映させるCSSを指定する設定が用意されています。

blog0223_03

これを指定すればすべて解決・・・と思っていたのですが、実はこれを指定しても作成画面には反映されないのです。

その原因を探るため、ググること約1ヶ月。
やっと見つけた答えは、リッチテキストエディターの設定情報がmodxのCSS指定を上書きしていたというものでした。。

このリッチテキストエディターは、modxをインストールするときに一緒にインストールされるもので、
元々modxの設定を上書く様になっているんです。
しかもそんな注意書きはどこにも書いてないし o(`ω´*)o

こんな隠し設定のようなものをなんで作るんでしょうか(?_?)

デフォルトの設定は信用してはいけないんですね。。