/** * @wiki /MVC模式/视图窗体(控件)/表单控件 * ==select== * =Bean配置数组= * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |options * |array * |无 * |可选 * |配置options的数组 * |} */ public function buildBean(array &$arrConfig, $sNamespace = '*', \org\jecat\framework\bean\BeanFactory $aBeanFactory = null) { parent::buildBean($arrConfig, $sNamespace); if (array_key_exists('options', $arrConfig)) { foreach ((array) $arrConfig['options'] as $arrOption) { if (count($arrOption) > 2) { $this->addOption($arrOption[0], $arrOption[1], $arrOption[2]); } else { $this->addOption($arrOption[0], $arrOption[1]); } } } }
/** * @wiki /MVC模式/视图窗体(控件)/表单控件 * ==复选框== * =Bean配置数组= * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |type * |string * |无 * |必须 * |此项须以下列字符串为值,用来指定选项是checkbox还是radio,"checkbox" 控件以checkbox形式体现,"radio" 控件以radio形式体现 * |} */ public function buildBean(array &$arrConfig, $sNamespace = '*', \org\jecat\framework\bean\BeanFactory $aBeanFactory = null) { parent::buildBean($arrConfig); if (array_key_exists('type', $arrConfig)) { switch ($arrConfig['type']) { case "checkbox": $this->setType(self::checkbox); break; case "radio": $this->setType(self::radio); break; } } $this->setChecked(!empty($arrConfig['checked'])); }
/** * @wiki /MVC模式/视图窗体(控件)/表单控件 * ==组(Group)== * =Bean配置数组= * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |widgets * |array * |无 * |可选 * |组控件内部包含的控件元素,每个数组元素都是一个控件的bean数组 * |} */ public function buildBean(array &$arrConfig, $sNamespace = '*', \org\jecat\framework\bean\BeanFactory $aBeanFactory = null) { parent::buildBean($arrConfig, $sNamespace); // widgets if (!empty($arrConfig['widgets'])) { if (!($aView = $this->view())) { throw new BeanConfException("Group Widget 尚未设置 View 对象,无法完成 Bean::buildBean()操作"); } if (!is_array($arrConfig['widgets'])) { throw new BeanConfException("Group Bean配置的 widgets 必须是一个数组"); } foreach ($arrConfig['widgets'] as $sId) { if (!($aWidget = $aView->widget($sId))) { throw new BeanConfException("Group Bean配置指定的 widget 无效:%s", $sId); } $this->addWidget($aWidget); } } }
/** * @wiki /MVC模式/视图窗体(控件)/表单控件 * ==Text== * =Bean配置数组= * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |type * |string * |"single" * |必须 * |此项须以下列字符串为值,"single" 将Text初始化为单行文字输入框,即html中设置input标签的type属性为"text","password" 将Text初始化为密码数据框,即html中设置input标签的type属性为"password","multiple" 将Text初始化为字符编辑区域,即html中的textarea标签,"hidden" 将Text初始化为单行文字输入框,即html中设置input标签的type属性为"hidden" * |} */ public function buildBean(array &$arrConfig, $sNamespace = '*', \org\jecat\framework\bean\BeanFactory $aBeanFactory = null) { parent::buildBean($arrConfig, $sNamespace); if (array_key_exists('type', $arrConfig)) { switch ($arrConfig['type']) { case "single": $this->setType(self::single); break; case "password": $this->setType(self::password); break; case "multiple": $this->setType(self::multiple); break; case "hidden": $this->setType(self::hidden); break; } } }
/** * @wiki /MVC模式/视图窗体(控件)/表单控件 * ==文件上传== * = 使用方法 = * 需要一个文件夹路径作为必要参数,文件最终会保存在这个参数所指的文件夹中.推荐以代码所在扩展的公共文件夹的路径作为参数的值. * * 此控件分3种工作状态: * = 1.为空且未上传文件时 = * 这是控件最原始状态,没有值,也没有和任何文件绑定. * = 2.上传文件时 = * 控件会找到放在服务器临时目录中的文件,并把它移动到初始化控件时提供的文件保存路径参数所指定的文件夹中. * 移动文件成功后,即可通过此控件提供的接口获得此文件的具体位置,比如用getFileUrl方法取得网页中访问该文件的url.也可以通过file方法取得这个文件的文件对象. * 文件存放的具体目录和文件的名字会进行特殊处理,以便不会和同名文件冲突. * 如果此控件绑定了校验器并且校验失败,此控件会自动删除刚刚上传的文件. * = 3.显示文件时 = * 一般在表单编辑时会呈现这个状态,控件的样子会有所变化,控件会显示文件的大小,下载文件的url和删除文件的checkbox.如果点选删除文件的checkbox并再次提交表单,控件会删除它所绑定的文件. * [!]使用此控件时,务必在控件所在form添加 enctype="multipart/form-data" 属性,确保文件能够上传到服务器[/!] * =Bean配置数组= * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |folder * |string * |无 * |必须 * |文件夹路径 * |-- -- * |fullpath * |bool * |true * |可选 * |数据保存时保存完整的文件路径还是忽略参数提供的路径部分, true 完整的文件路径, false 不带参数所指的文件夹路径 * |} */ public function buildBean(array &$arrConfig, $sNamespace = '*', \org\jecat\framework\bean\BeanFactory $aBeanFactory = null) { parent::buildBean($arrConfig, $sNamespace); if (array_key_exists('folder', $arrConfig)) { $this->aStoreFolder = $arrConfig['folder']; } if (array_key_exists('fullpath', $arrConfig)) { $this->setFullPath($arrConfig['fullpath']); } }
/** * @wiki /MVC模式/视图窗体(控件)/分页控件 * ==使用方法== * 与model一起组合使用,单独使用无效 * ==Bean配置数组== * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |count * |int * |10 * |可选 * |每页显示的条目数量 * |-- -- * |nums * |int * |5 * |可选 * |显示页码的个数 * |} * ==模板属性配置== * {| * !属性 * !类型 * !默认值 * !可选 * !说明 * |-- -- * |attr.showFirst * |mixed * |true * |可选 * |是否显示“第一页” * |-- -- * |attr.showLast * |mixed * |true * |可选 * |是否显示“最后一页” * |-- -- * |attr.showTotal * |mixed * |true * |可选 * |是否显示“共*页” * |-- -- * |attr.showPre * |mixed * |true * |可选 * |是否显示“上一页” * |-- -- * |attr.showNext * |mixed * |true * |可选 * |是否显示“下一页” * |-- -- * |attr.strategy * |mixed * |middle * |可选 * |显示策略(显示哪些页码),可以是一个字符串(表示类名)或者一个对象(需要设置type为expression) new \org\jecat\framework\mvc\view\widget\paginatorstrategy\Middle * |} * [example php frameworktest template/test-mvc/testviewwindow/TestPaginaterWidget.html 15 16] */ public function buildBean(array &$arrConfig, $sNamespace = '*', \org\jecat\framework\bean\BeanFactory $aBeanFactory = null) { parent::buildBean($arrConfig, $sNamespace); if (!empty($arrConfig['count'])) { $this->setPerPageCount($arrConfig['count']); } if (!empty($arrConfig['nums'])) { $this->setCurrentPageNum($arrConfig['nums']); } $this->setDataFromSubmit(Request::singleton()); }