设置select的readonly属性

html表单元素有Disabled和Readonly之分:

  • disabled的项目不会提交;
  • readonly的项目会提交;

今天发现select(下拉选择)不支持readonly,只支持disabled,如果我们想提交里面的数据怎么办?方式很多,比如干脆整个select隐藏掉,或者输出html前已经判断到要隐藏了,就干脆输出成type=”hidden”的input,但这两种方法的缺点都是看不到这个选项的已选值。

所以,今天我采用了隐藏掉select的备选项option的方法,示例:

<select name="my_fav" id="my_fav" readonly=1>

	<option selected="1" value="Michael Jackson" style="display:none" >Michael Jackson</option>

	<option selected="1" value="Air Supply" style="display:none" >Air Supply</option>

	<option selected="1" value="Dido" style="display:none" >Dido</option>

</select>

bonus一句简单的jquery:

$('select#my_fav option').css('display','none');

制作CakePHP语言包(Poedit使用方法)

CakePHP和许多其它开源程序一样,使用.mo格式的语言包,
先下载并安装poedit:http://www.poedit.net/download.php

先要让poedit用PHP的方式来支持.ctp扩展(CakePHP的View文件):

  1. 打开poedit,工具栏>>文件>>首选;
  2. 到“解析器”tab,选中PHP,点“编辑”;
  3. 将“列示扩展名……”里设成 *.ctp;*.php ;(注意是分号,不是逗号)
  4. 将“解析器命令”里改成 xgettext --language=PHP --force-po -o %o %C %K %F ;(我之前因为采用默认的设置,导致后来无法获取表(报错:warning: file ‘.ctp’ extension ‘ctp’ is unknown; will try C.),在浪费了半个小时后终于找到这篇文章

可以动工了,假定CakePHP程序在E:\cakephp\,新建目录:
E:\cakephp\app\Locale\zh_cn
E:\cakephp\app\Locale\zh_cn\LC_MESSAGES

用poedit新建一个项目,地址为上述LC_MESSAGES目录,文件名为default.po,

  1. 项目目录设置里,基本路径为此LC_MESSAGES目录,记得在路径里设为“.”,这代表将搜寻所有子目录,见截图:
    poedit类目设置(路径)
  2. “关键字”tab里,增加函数__,见截图(可以增加多个函数关键字):
    poedit:__()
  3. 工具栏>>类目>>从源更新,poedit会查询项目目录里所有php、ctp文件里用到的“__()”函数,将待翻译项罗列出来(如果po文件里某字符串已经翻译好了,该翻译不会被覆盖,如果po文件里某字符串不再存在于项目目录里,则会被删掉);
  4. 恭喜你,可以开始翻译了!(每次保存po文件时,将在相同目录下产生mo语言文件)

关于函数__d及其它

CakePHP里还用到的字符输出函数__d(‘cake’,’translate me’,’param’),表示按“cake”域的语言包来进行翻译,用不同的域有利于我们拆解且方便管理语言包文件,也能让一个字符串在不同情况下可以有不同的翻译,请如上述default一样,在LC_MESSAGES下创建cake.po项目,但因为它采用的函数有别于“__()”,“__d(‘domain’,’translate me‘,’param’)”的待翻译变量是第二个变量,需要在项目设置里,把关键字设成“__d:2”,见下图:

poedit:__d()