コンテンツ更新プログラムのtextareaの中が崩れて……

コンテンツを更新できる更新プログラムを作っていて、
コンテンツを丸ごと更新できるフォーム(<textarea>)内に、
コンテンツのフォームソースを入れると、
途中で更新プログラムのソースと、まじってしまって、再編集時にレイアウトが崩れるわデータは登録できないわ……。という状態になりました。

データベース内で”の前に円マークが入ってないのかなと思ったけど、その処理ミスではなくて。

TEXTAREA要素が…。 [WEBアプリ]
を参考にさせていただきました。

<textarea name="data" id="data" cols="45" rows="50" >{{$data}}</textarea>

<textarea name="data" id="data" cols="45" rows="50" >
{{$data}}</textarea>

と、<textarea>の後に改行してやるだけで治りました。

mb_structを使用したときの文字化け

Smartyで、文字を丸めるSmarty_modifier_mbtruncateというのを使用していたのですが、mb_structとマルチバイドのはずなのに語尾が文字化けして四角二つとかになっちゃうことがありました。

なぜかなと思いながら、他の方が作成されたSmarty_modifier_mbtruncateのコードを探していると、文字コード指定をすると直るらしい。

前に見たブログ記事が見つからなくなっちゃったので、こちらでも同じように書いていただいてるのリンク

続・Smarty truncateをマルチバイト対応に – こまちドーナツ

ちなみに私の使用しているコードはこちら

<?php
function Smarty_modifier_mbtruncate($string, $length=80, $etc=’…’, $break_words = false){
ツꀀ
ツꀀツꀀツꀀ if ($length == 0)
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ return ”;

ツꀀツꀀツꀀ if (strlen($string) > $length) {
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ $length -= strlen($etc);ツꀀ
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ if (!$break_words)
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ return mb_strcut($string, 0, $length,”UTF-8″).$etc;
ツꀀツꀀツꀀ } else
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ return $string;
}

?>

月(数字)から日本名の月を表示するプラグイン

月名から(数字に限る)から日本名の月を表示するプラグインを作りました。
たいしたものではありませんが・・・・・・。

ファイル名:modifier.japanesemonth.php

<?php
/**
ツꀀ* Smarty plugin
ツꀀ* 2009.2.5 terarin
ツꀀ*/
function smarty_modifier_japanesemonth($mon)
{

ツꀀツꀀツꀀ #日本の月名を入れていきます。
ツꀀツꀀツꀀ $month = array(”,’睦月’,’如月’,’弥生’,’卯月’,’皐月’,’水無月’,’文月’,’葉月’,’長月’,’神無月’,’霜月’,’師走’);
ツꀀツꀀツꀀ
ツꀀツꀀツꀀ $mon = intval($mon);
ツꀀツꀀツꀀ
ツꀀツꀀツꀀ if($mon < 1 or $mon > 12){
ツꀀツꀀツꀀ ツꀀ$mon = 0;
ツꀀツꀀツꀀ }
ツꀀツꀀツꀀ
ツꀀツꀀツꀀ return $month[$mon];
}

?>

月でない値の場合は、0を返して空白になります。

smartyのテンプレートにjavascriptとcssコードが含まれる場合

smartyのテンプレート内にjavascriptとcssコードが含まれます。
そんなのが回避できない場合は、以下のようにデリミタを変更

<?php

$smarty->left_delimiter = ‘<!–{‘;
$smarty->right_delimiter = ‘}–>’;

$smarty->assign(‘foo’, ‘bar’);
$smarty->assign(‘name’, ‘Albert’);
$smarty->display(‘example.tpl’);

?>

smartyマニュアルの「smartyの構文解析を回避する」より。

私的には、XOOPSのテンプレートが最初だったからか、<!–{って結構なじみがあるのですけど、タイプに時間がかかるとかあって、なるほどなーと。

面白い記事があったので、リンクしておきます。
最良のSmartyデリミターを求めて(@http://nonn-et-twk.net/twk/

{{が一番楽かな? 見にくいけど。sakuraエディターで色の登録できたっけなー。

sectionでforみたい

Smartyを使ったとき、数字を選ばせるselectをいちいち書くのが面倒だなと思って、forみたいなことができないかなと調べました。

ツꀀSmartyでfor文みたいな動きをさせるには(@みるくぜりー

8時から18時を選ばせるselect

<select name=”mte_hour” id=”mte_hour” {if $error.mte_hour}class=”errorinput” {/if}>
ツꀀツꀀツꀀツꀀ {section name=cnt start=8 loop=19}
ツꀀツꀀ<option value=”{$smarty.section.cnt.index}”{if $data.mte_hour == $smarty.section.cnt.index} selected{/if}>{$smarty.section.cnt.index}</option>
ツꀀツꀀ{/section}
ツꀀツꀀ</select>時

0分から55分を5分単位で選ばせるselect

<select name=”mte_minite”ツꀀ id=”mte_minite” {if $error.mte_minite}class=”errorinput” {/if}>
ツꀀツꀀツꀀツꀀ {section name=cnt start=0 loop=60}
ツꀀツꀀツꀀツꀀ {if $smarty.section.cnt.index%5 == 0}
ツꀀツꀀ<option value=”{$smarty.section.cnt.index}”{if $data.mte_hour == $smarty.section.cnt.index} selected{/if}>{$smarty.section.cnt.index}</option>
ツꀀツꀀ{/if}
ツꀀツꀀ{/section}
ツꀀツꀀ</select>分

Smarty使って真っ白。

Smartyを使ったプログラム、ローカルサーバーから実際のサーバーにアップしたら真っ白!

何故!?

と思ったら、Templates_cなどのフォルダに書き込み権限を与えていませんでした。
ローカルは全部開放状態だから、そういうことを考えずに使ってしまう。
気をつけないと。

Section

Smartyでいつも検索しちゃうのでメモメモ。

{section name=”test” loop=$data start=”0″ step=”2″ max=”5″}

{sectionelse}
データがありません
{/section}

{$smarty.section.test.iteration}で番号

こんな使い方もあります。

{if $smarty.section.td.iteration % 3 == 1}