我为Socialengine 4构建了一个Widget,并构建了一个Admin表单,用于从布局编辑器的页面中配置Widget。一切都很好,除了一件事--如果我再次编辑Widget而不接触文件上传,以前上传的图像就会消失。
下面是我的小部件的manifest.php:
...
'adminForm' => array(
'elements' => array(
array(
"file",
"image_upload",
array(
'label' => "Bild Upload",
'destination' => 'upload'
)
),
....这是我的问题,我怎样才能防止这种行为?在manifest.php中有选项吗?
谢谢你的帮助,也很抱歉我的英语不好。
发布于 2014-05-07 04:37:58
简单的回答是,当您提交表单时,您的字段将被更新。
当您拖动一个小部件时,它的工作方式是如果在小部件信息的内容中有autoEdit true,就像在application\modules\Core\settings\content.php中这样
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文件,而不是在这个问题上更加清楚。
https://stackoverflow.com/questions/23484059
复制相似问题