简单的答案是不会在您提交表单时更新您的字段
它的工作方式是当你拖动一个小部件时,如果小部件信息在 application\modules\Core\settings\content.php 中具有 autoEdit true 像这样的内容
array(
'title' => 'Ad Campaign',
'description' => 'Shows one of your ad banners. Requires that you have at least one active ad campaign.',
'category' => 'Core',
'type' => 'widget',
'name' => 'core.ad-campaign',
// 'special' => 1,
'autoEdit' => true,
'adminForm' => 'Core_Form_Admin_Widget_Ads',
),
小部件表单将被自动加载。
否则,当您使用默认值拖动小部件时,它将临时保存在 js 中,当您保存布局时,它将所有布局信息保存到 db。
现在当您编辑表单时,它将在弹出窗口中打开表单并使用 js(application\modules\Core\views\scripts\admin-content\widget.tpl) 填充表单数据
if( $type(value) == 'array' ) {
value.each(function(svalue){
if( $(key + '-' + svalue) ) {
$(key + '-' + svalue).set('checked', true);
}
});
} else if( $(key) ) {
$(key).value = value;
} else if( $(key + '-' + value) ) {
$(key + '-' + value).set('checked', true);
}
现在您提交数据它会暂时将数据保存到 js 并将小部件内容更新到父 js
文件 application\modules\Core\views\scripts\admin-content\widget.tpl
<?php elseif( $this->values ): ?>
<script type="text/javascript">
parent.setWidgetParams(<?php echo Zend_Json::encode($this->values) ?>);
parent.Smoothbox.close();
</script>
<?php else: ?>
当它获取表单值时,它会更新父窗口小部件信息
希望这可以解决您的问题,小部件通常不适用于文件上传,或者不是为此而设计的。我建议你研究 application\modules\Core\controllers\AdminContentController.php 这个控制器和 application\modules\Core\views\scripts\admin-content\widget.tpl 文件比你在这个问题上更清楚