アーカイブ

‘Tips’ タグのついている投稿

[EC Cube] scriptタグが#script tag escaped#に変換されないようにカスタマイズ

2010 年 1 月 12 日 snufkin コメントはありません

商品登録の時や編集の時、「詳細-メインコメント」欄に<script>のタグを使おうとすると「#script tag escaped#」に変換されます。これはXSSを防ぐための機能なのですが、商品紹介ページでjQueryなどを使ってみた目にインパクトを与えたり、機能を追加したりしたくなったのでちょっといじってみました。

手を加えるファイルは3つです。
/data/Smarty/templates/xxxx/detail.php

Line.54 辺り
■変更前
<p><!–★詳細メインコメント★–><!–{$arrProduct.main_comment|nl2br}–></p>

■変更後
<p><!–★詳細メインコメント★–><!–{$arrProduct.main_comment|nl2br|smarty:nodefaults}–></p>

/data/Smarty/templates/default/admin/products/confirm.php
Line.255 辺り
■変更前
<textarea name=”main_comment” value=”<!–{$arrForm.main_comment|escape}–>” maxlength=”<!–{$smarty.const.LLTEXT_LEN}–>” style=”<!–{if $arrErr.main_comment != “”}–>background-color: <!–{$smarty.const.ERR_COLOR}–><!–{/if}–>”  cols=”60″ rows=”8″ class=”area60″><!–{$arrForm.main_comment|escape}–></textarea><br /><span class=”red”> (上限<!–{$smarty.const.LLTEXT_LEN}–>文字)</span></td>
■変更後
<textarea name=”main_comment” value=”<!–{$arrForm.main_comment|escape}–>” maxlength=”<!–{$smarty.const.LLTEXT_LEN}–>” style=”<!–{if $arrErr.main_comment != “”}–>background-color: <!–{$smarty.const.ERR_COLOR}–><!–{/if}–>”  cols=”60″ rows=”8″ class=”area60″><!–{$arrForm.main_comment|escape|smarty:nodefaults}–></textarea><br /><span class=”red”> (上限<!–{$smarty.const.LLTEXT_LEN}–>文字)</span></td>
/data/Smarty/templates/default/admin/products/confirm.php
Line.42 辺り
■変更前
<!–{foreach key=key item=item from=$arrForm}–>
<input type=”hidden” name=”<!–{$key}–>” value=”<!–{$item|escape}–>”>
<!–{/foreach}–>
■変更後
<!–{foreach key=key item=item from=$arrForm|smarty:nodefaults}–>
<!–{if $key == “main_comment”}–>
<input type=”hidden” name=”<!–{$key}–>” value=”<!–{$item|escape|smarty:nodefaults}–>”>
<!–{else}–>
<input type=”hidden” name=”<!–{$key}–>” value=”<!–{$item|escape|script_escape}–>”>
<!–{/if}–>
<!–{/foreach}–>
Line.196 辺り
■変更前
<!–{$arrForm.main_comment|nl2br}–>
■変更後
<!–{$arrForm.main_comment|nl2br|smarty:nodefaults}–>
これで「詳細-メインコメント」欄内でjavascriptが利用できるようになりました。
XSSには注意しましょう。
Line.54 辺り
■変更前
<p><!–★詳細メインコメント★–><!–{$arrProduct.main_comment|nl2br}–></p>
■変更後
<p><!–★詳細メインコメント★–><!–{$arrProduct.main_comment|nl2br|smarty:nodefaults}–></p>
タグ: ,
カテゴリー: Tips タグ: ,

[concrete5] ヘッダから”generator”のメタタグを削除

2009 年 10 月 23 日 snufkin コメントはありません

concrete5のデフォルトだと出力されたページのヘッダに

<meta name="generator" content="concrete5 - xxx" />

という感じで自動的にconcrete5のバージョン情報が入ります。

セキュリティ的にもあまりよくなさそうなので、このメタタグが出力されないようにカスタマイズします。

/concrete/elements/header_required.php

/elements/header_required.php

にコピーして40行目あたりの

<meta name="generator" content="concrete5 - <?php echo APP_VERSION ?>" />

を削除します。

このようにすると優先的に「/elements/header_required.php」が読み込まれます。
これを「オーバーライド」といい、どのファイルを編集したか(カスタマイズしたか)がすぐわかり、アップグレードの時も上書きされずに住みます。

タグ: ,
カテゴリー: Tips, concrete5 タグ: ,

ブラウザで表示すると小さくなる記号の対処法

2009 年 9 月 29 日 snufkin コメントはありません

ずっと気になっていたのですが、さっき調べたら意外と簡単に対処できることがわかりましたのでメモしておきます。

“○” とか “×” などの記号はブラウザで表示するとほかの文字よりひとまわり小さくなってしまうことがあります。
これを回避するにはページ制作時に次のようにします。

スタイルシートのはじめに

@charset "utf-8";

と記述します。
もちろんそのスタイルシートはUTF-8で記述します。

次にそのスタイルシートに

body {
	font-family:'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro','メイリオ',Meiryo,'MS Pゴシック',sans-serif;
}

と書きます。

要するにブラウザが日本語の書体を使っていないので小さく表示されてしまうということみたいです。

参考
meisui8: 記号文字のフォントサイズが小さいのはなぜか
CSSのfont-family:ヒラギノとMS Pゴシックとメイリオの悩ましい関係 – webデザイナーのナナメガキ

タグ: , ,
カテゴリー: web製作 タグ: , ,

[concrete5] コントローラ内でメールの送信

2009 年 8 月 11 日 snufkin コメントはありません

concrete5 でコントローラの中でメール送信する時は、mail helperを呼び出して次のように設定・送信します。

$mh = Loader::helper('mail');
$mh->to( 送信先メアド );
$mh->from( 送信元メアド );

$mh->addParameter( 'param_a', $param_a );
$mh->load( 'mailbody' );

$mh->setSubject( メールタイトル );

@$mh->sendMail();
$mh->load( 'mailbody' );

の部分ではメール本文を設定しています。
/mail の中にテンプレート用のファイル ‘mailbody.php’ を用意します。
‘mailbody.php’ の中では変数「$body」に本文を代入します。
例えば

<?php
$body = 'こんにちは、メール本文です。';
?>

とすれば ‘こんにちは、メール本文です。’ という文字列がメール本文にセットされます。

$mh->addParameter( 'param_a', $param_a );

の部分では ‘mailbody.php’ に渡すパラメータをセットしています。
ここでセットした値は ‘mailbody.php’ の中で使うことができます。

最後は

@$mh->sendMail();

で送信します。

タグ: , , ,
カテゴリー: concrete5 タグ: , , ,

google の jQuery を読み込む

2009 年 7 月 28 日 snufkin コメントはありません

Google AJAX Libraries API というものがあります。

jQuery とか Prototype とかのJavaScript ライブラリが特定の URL から読み込めます。
サイトを作るたびにライブラリをアップロードしなくても、いつも決まったURLから呼び出せるのでとても便利です。

しかもホストしているのはGoogleで、次のような主要なJavaScript ライブラリが使えます。

  • jQuery
  • jQuery UI
  • Prototype
  • script.aculo.us
  • MooTools
  • Dojo
  • SWFObject
  • Yahoo! User Interface Library(YUI)

Google がホストしてるのに YUI も使えるところがステキですね。

使い方は、

    <script src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("jquery", "1.3.1");
        google.load("jqueryui", "1.5.3");
        google.load("prototype", "1.6.0.3");
        google.load("scriptaculous", "1.8.2");
        google.load("mootools", "1.2.1");
        google.load("dojo", "1.2.3");
        google.load("swfobject", "2.1");
        google.load("yui", "2.6.0");
    </script>

のようにするだけ。
google.load() の二つ目の引数は各ライブラリのバージョンです。

バージョンの細かい指定方法はこのへんに詳しく書いてあります。

タグ: , , , ,
カテゴリー: Tips, web製作 タグ: , , , ,

[css] リストのマーカーを背景にした時の折り返し

2009 年 7 月 28 日 snufkin コメントはありません

リストのマーカーを画像にしたいとき、list-style-imageを使うと位置がうまくそろわない場合が多いので、背景にイメージを敷いてpadding-left を少し広く空けて代用したりします。

そんなときに困るのが、リストの折り返し。

リストの中身が折り返したとき、マーカーの下に折り返したテキストが入り込んでしまいます。

これを回避するには、「display: inline-block;」。

liタグに指定します。

タグ: , ,
カテゴリー: web製作 タグ: , ,

[concrete5] 検索用索引作成とサイトマップファイル作成の自動化

2009 年 7 月 17 日 snufkin コメントはありません

concrete5はサイト内検索用にサイトをインデックス化する機能を持っています。
また、concrete5のインストールディレクトリにsitemap.xmlをつくる機能もあります。

サイトが成長するにつれ、この2つはとても重要な機能になります。
でも、この2つの機能はデフォルトでは手動でしか動かせません。

自動で実行させるためにはサーバのcronという機能を利用します。

coreserverでは管理メニューの「CRONジョブ」で自動実行させたいシェルスクリプトの指定と自動実行させる時間の間隔を設定することができます。

シェルスクリプトには次のように書きます。

#!/bin/sh
/usr/bin/wget --spider http://example.com/index.php/tools/required/jobs?auth=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
exit
http://example.com/index.php/tools/required/jobs?auth=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

の部分はconcrete5の管理画面の「メンテナンス」を開いた最下部にある「もしもこのジョブをバックグランドで実行されたいのであれば、Cronなどを使い、定期的、自動的に下記のリンクにアクセス出来るようにして下さい:」のURLを入れます。

このシェルスクリプトを「c5jobs.sh」などと名前をつけ、サーバにアップロードして実行権限を与えます。
coreserverのCRONジョブ設定でアップロードしたシェルスクリプトの指定と時間の間隔を設定すると自動で検索用索引作成とサイトマップファイル作成が行われるようになります。

はじめはphpでURLにアクセスさせてみたのですが、ファイルが見つからないエラーになってしまったのでちょっと調べました。
lynxとかも試しましたが、アクセスするたびにサーバからの反応が返されたりしてちょっと気持ち悪かったのでなんとかならないかなーと思ってたらwgetのことを思い出しました。
最近はunixコマンドから少し離れていたのでwgetのことなどすっかり忘れていました・・・。
でもwgetだとアクセスしたファイルをダウンロードしてしまうので、オプションとか調べたら「–spider」などというオプションがあって驚きました。
このオプションのおかげでごみファイルなども残すことなく自動化できるようになりました。

タグ: , , ,
カテゴリー: concrete5 タグ: , , ,

[concrete5] ユーザ項目の追加と利用

2009 年 7 月 16 日 snufkin コメントはありません

concrete5にはユーザ項目を追加する機能があります。
ユーザ登録の時などに入力させ、ユーザ情報の一部として利用することができます。
ユーザ項目の追加は管理画面の「ユーザ・グループ管理」から「ユーザ項目」に入ると行うことができます。

ユーザ項目の追加[concrete5]

例えば “gender” というハンドルの項目を作った場合、その項目を扱うには次のようにするようです。

$u = new User;
$ui = UserInfo::getByID( $u->uID );
$gender = $ui->getUserGender();

ミソは

$ui->getUserGender();

で、
“getUser” + 取得したいハンドル

というように呼び出します。

ちなみに、

  • getUserID()
  • getUserName()
  • getUserPassword()
  • getUserEmail()
  • getUserDateAdded()
  • getUserStartDate()
  • getUserEndDate()
  • getUserInfoList()

はシステムによって予約済みのようですので、ハンドルには

  • id
  • name
  • password
  • email
  • date_added
  • start_date
  • end_date
  • info_list

などは使わない方が無難みたい。(使えなかったりややこしかったりするので)

参考
http://www.concrete5.org/help/building_with_concrete5/developers/mvc/scripting_common_concrete5_tasks

タグ: , ,
カテゴリー: concrete5 タグ: , ,

[ケータイ] スパム対策

ここ数週間、急にケータイへのスパムメールが増えた。
いつも同じような時間に同じようなタイトルのメールが届く。
即削除・・・なんだけど、ケータイがなるたびにいちいち反応するのに疲れた。

auのサイトで調べたら、対策がいくつか載っていた。
とりあえず「ドメイン認証規制」にしてみた。

しばらく様子をみることにする。

タグ: , , ,
カテゴリー: Tips タグ: , , ,

concrete5 ログインページのカスタマイズ

2009 年 6 月 23 日 snufkin コメントはありません
/themes

/concrete/themes/core/concrete.php

をコピー。
つまり

/themes/core/concrete.php

ができあがる。
それをいじるとhtmlのヘッダやページ左上部のconcrete5のロゴ画像などを変更できる。

中身は

/concrete/single_pages/login.php

/single_pages

にコピーして編集。

タグ: , ,
カテゴリー: Tips, concrete5 タグ: , ,