我为Socialengine 4构建了一个Widget,并构建了一个Admin-Form,用于在Layout - Editor中配置页面内的Widget。一切正常,除了一件事 - 如果我再次编辑Widget而不触及文件上传,之前上传的图像就消失了。
这是我的小部件的manifest.php:
...
'adminForm' => array(
'elements' => array(
array(
"file",
"image_upload",
array(
'label' => "Bild Upload",
'destination' => 'upload'
)
),
....
以下是我的问题,如何防止此行为? manifest.php里面有一个选项吗?
感谢您的帮助,抱歉我的英语不好。
答案 0 :(得分:0)
简单的答案是,当您提交表单时,您的字段将不会更新
它的工作方式是拖动窗口小部件,如果在内容中,窗口小部件信息的autoEdit在application \ modules \ core \ settings \ _php.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 文件比你在这个问题上会更清楚