new_dom_id();
$input_name = $params['name'];
$input_value = $params['value'];
$image_src = base_storager::image_path($input_value,'s');
if(!$params['width']){
$params['width']=50;
}
if(!$params['height']){
$params['height']=50;
}
$imageInputWidth = $params['width']+24;
$url=""index.php?app=desktop&act=alertpages&goto=".urlencode("index.php?app=image&ctl=admin_manage&act=image_broswer").""";
$html = '
';
return $html;
}
function input_object($params){
$return_url = $params['return_url']?$params['return_url']:'index.php?app=desktop&ctl=editor&act=object_rows';
$callback = $params['callback']?$params['callback']:'';
$params['breakpoint'] = isset($params['breakpoint'])?$params['breakpoint']:100;
$object = $params['object'];
if(strpos($params['object'],'@')!==false){
list($object,$app_id) = explode('@',$params['object']);
$params['object'] = $object;
}elseif($params['app']){
$app_id = $params['app'];
}else{
$app_id = $this->app->app_id;
}
$app = app::get($app_id);
$o = $app->model($object);
$render = new base_render(app::get('desktop'));
$ui = new base_component_ui($app);
$dbschema = $o->get_schema();
$params['app_id'] = $app_id;
if(isset($params['filter'])){
if(!is_array($params['filter'])){
parse_str($params['filter'],$params['filter']);
}
}
$params['domid'] = substr(md5(uniqid()),0,6);
$key = $params['key']?$params['key']:$dbschema['idColumn'];
$textcol = $params['textcol']?$params['textcol']:$dbschema['textColumn'];
//显示列 可以多列显示 不完全修改 。。。。。。。
$textcol = is_array($textcol) ? $textcol : explode(',',$textcol);
$_textcol = $textcol;
$textcol = current($textcol);
$tmp_filter = $params['filter']?$params['filter']:null;
$count = $o->count($tmp_filter);
if($count<=$params['breakpoint']&&!$params['multiple']&&$params['select']!='checkbox'){
if(strpos($textcol,'@')===false){
$list = $o->getList($key.','.$textcol,$tmp_filter);
if(!$list[0]) $type=array();
foreach($list as $row){
$label = $row[$textcol];
if(!$label&&method_exists($o,'title_modifier')){
$label = $o->title_modifier($row[$key]);
}
$type[$row[$key]] = $label;
}
}else{
list($name,$table,$app_id) = explode('@',$textcol);
$app = $app_id?app::get($app_id):$app;
$mdl = $app->model($table);
$list = $o->getList($key,$tmp_filter);
foreach($list as $row){
$tmp_row = $mdl->getList($name,array($mdl->idColumn=>$row[$key]),0,1);
$label = $tmp_row[0][$name];
if(!$label&&method_exists($o,'title_modifier')){
$label = $o->title_modifier($row[$key]);
}
$type[$row[$key]] = $label;
}
}
$tmp_params['data-search'] = 'fuzzy-search';
$tmp_params['name'] = $params['name'];
$tmp_params['value'] = $params['value'];
$tmp_params['type'] = $type;
if($callback)
$tmp_params['onchange'] = $callback.'(this)';
$str_filter = $ui->input($tmp_params);
unset($tmp_params);
return $str_filter;
}
$params['idcol'] = $keycol['keycol'] = $key;
$params['textcol'] = implode(',',$_textcol);
$params['_textcol'] = $_textcol;
if($params['value']){
if(strpos($params['view'],':')!==false){
list($view_app,$view) = explode(':',$params['view']);
$params['view_app'] = $view_app;
$params['view'] = $view;
}
if(is_string($params['value'])){
$params['value'] = explode(',',$params['value']);
}
$params['items'] = &$o->getList('*',array($key=>$params['value']),0,-1);
//过滤不存在的值
//某些数据被添加后 可能原表数据已删除,但此处value中还存在。
$_params_items_row_key = array();
foreach( $params['items'] as $_params_items_row ) {
$_params_items_row_key[] = $_params_items_row[$key];
}
$params['value'] = implode(',',$_params_items_row_key);
}
if(isset($params['multiple']) && $params['multiple']){
if(isset($params['items']) && count($params['items'])){
$params['display_datarow'] = 'true';
}
$render->pagedata['_input'] = $params;
return $render->fetch('finder/input.html');
}else{
if($params['value']){
$string = $params['items'][0][$textcol];
}else{
$string = $params['emptytext']?$params['emptytext']:app::get('desktop')->_('请选择...');
}
unset($params['app']);
if($params['data']){
$_params = (array)$params['data'];
unset($params['data']);
$params = array_merge($params,$_params);
}
if($params['select']=='checkbox'){
if($params['default_id'] ) $params['domid'] = $params['default_id'];
$params['type'] = 'checkbox';
}else{
$id = "handle_".$params['domid'];
$params['type'] = 'radio';
$getdata = '&singleselect=radio';
}
if(is_array($params['items'])){
foreach($params['items'] as $key=>$item){
$items[$key] = $item[$params['idcol']];
}
}
$params['return_url'] = urlencode($params['return_url']);
$vars = $params;
$vars['items'] = $items;
$object = utils::http_build_query($vars);
$url = 'index.php?app=desktop&act=alertpages&goto='.urlencode('index.php?app=desktop&ctl=editor&act=finder_common&app_id='.$app_id.'&'.$object.$getdata);
$render->pagedata['string'] = $string;
$render->pagedata['url'] = $url;
$render->pagedata['return_url'] = $return_url;
$render->pagedata['id'] = $id;
$render->pagedata['params'] = $params;
$render->pagedata['object'] = $object;
$render->pagedata['callback'] = $callback;
return $render->fetch('finder/input_radio.html');
}
}
function input_html($params){
$id = 'mce_'.substr(md5(rand(0,time())),0,6);
$editor_type=app::get('desktop')->getConf("system.editortype");
$editor_type==''?$editor_type='wysiwyg':$editor_type='wysiwyg';
$includeBase=$params['includeBase']?$params['includeBase']:true;
$params['id']=$id;
$img_src = app::get('desktop')->res_url;
$render = new base_render(app::get('desktop'));
$render->pagedata['id'] = $id;
$render->pagedata['img_src'] = $img_src;
$render->pagedata['includeBase'] = $includeBase;
$render->pagedata['params'] = $params;
$style2=$render->fetch('editor/html_style2.html');
if($editor_type =='textarea'||$params['editor_type']=='textarea'){
$html=$style2;
}else{
$style1 = $render->fetch('editor/html_style1.html');
$html=$style1;
$html.=$style2;
}
return $html;
}
/**
* 带放大镜功能的图片输入组件(支持单图和多图)
* @param array $params 参数数组
* @return string HTML代码
*/
function input_image_magnifier($params){
$ui = new base_component_ui($this);
$domid = $ui->new_dom_id();
// 参数处理
$input_name = $params['name'];
$input_value = $params['value'];
$max_images = isset($params['max_images']) ? intval($params['max_images']) : 1; // 默认支持1张图片
if ($max_images > 1) {
// 多图片模式
$existing_images = array();
if ($input_value) {
// 如果是逗号分隔的多个图片ID
if (strpos($input_value, ',') !== false) {
$image_ids = explode(',', $input_value);
foreach ($image_ids as $image_id) {
$image_id = trim($image_id);
if ($image_id) {
try {
$imageModel = app::get('image')->model('image');
$image_info = $imageModel->dump($image_id);
if ($image_info) {
$existing_images[] = array(
'image_id' => $image_id,
'url' => base_storager::image_path($image_id, 's'),
'full_url' => $image_info['url']
);
}
} catch (Exception $e) {
// 忽略无效的图片ID
}
}
}
} else {
// 单个图片ID
try {
$imageModel = app::get('image')->model('image');
$image_info = $imageModel->dump($input_value);
if ($image_info) {
$existing_images[] = array(
'image_id' => $input_value,
'url' => base_storager::image_path($input_value, 's'),
'full_url' => $image_info['url']
);
}
} catch (Exception $e) {
// 忽略无效的图片ID
}
}
}
// 通过 target_type 和 target_id 获取关联图片(如果现有图片为空)
if (empty($existing_images) && isset($params['target_type']) && isset($params['target_id'])) {
try {
$imageModel = app::get('image')->model('image');
$attachedImages = $imageModel->getAttachedImages($params['target_type'], $params['target_id']);
foreach ($attachedImages as $attachedImage) {
$existing_images[] = array(
'image_id' => $attachedImage['image_id'],
'url' => $attachedImage['s_url'] ?: $attachedImage['full_url'],
'full_url' => $attachedImage['full_url']
);
}
} catch (Exception $e) {
// 如果获取失败,继续使用空数组
}
}
// 默认尺寸
$display_width = $params['display_width'] ?: ($params['width'] ?: 50);
$display_height = $params['display_height'] ?: ($params['height'] ?: 50);
// 放大镜相关参数
$magnifier_class = $params['magnifier_class'] ?: 'img-magnifier';
// 样式参数
$border_style = $params['border_style'] ?: '2px dashed #ddd';
$border_radius = $params['border_radius'] ?: '4px';
$cursor_style = $params['cursor_style'] ?: 'pointer';
// 只读模式参数
$readonly = isset($params['readonly']) ? $params['readonly'] : false;
// 准备模板数据
$render = new base_render(app::get('desktop'));
$render->pagedata['domid'] = $domid;
$render->pagedata['input_name'] = $input_name;
$render->pagedata['input_value'] = $input_value;
$render->pagedata['existing_images'] = $existing_images;
$render->pagedata['max_images'] = $max_images;
$render->pagedata['display_width'] = $display_width;
$render->pagedata['display_height'] = $display_height;
$render->pagedata['magnifier_class'] = $magnifier_class;
$render->pagedata['border_style'] = $border_style;
$render->pagedata['border_radius'] = $border_radius;
$render->pagedata['cursor_style'] = $cursor_style;
$render->pagedata['transparent_gif'] = app::get('desktop')->res_url.'/transparent.gif';
$render->pagedata['size'] = isset($params['size']) ? $params['size'] : '';
$render->pagedata['target_type'] = $params['target_type'] ?: '';
$render->pagedata['target_id'] = $params['target_id'] ?: '';
$render->pagedata['readonly'] = $readonly;
// 使用统一的HTML模板(支持多图片)
return $render->fetch('input_image_magnifier.html');
} else {
// 单图片模式(原有逻辑)
$image_src = '';
$main_image = null;
// 第一优先级:直接传入的 image_src
if (isset($params['image_src']) && $params['image_src']) {
$image_src = $params['image_src'];
}
// 第二优先级:通过 image_id 用 dump 查询
elseif ($input_value) {
try {
$imageModel = app::get('image')->model('image');
$main_image = $imageModel->dump($input_value);
if ($main_image) {
// 根据需要的尺寸获取对应的URL
$size = isset($params['size']) ? $params['size'] : '';
if ($size && isset($main_image[strtolower($size) . '_url'])) {
$image_src = $main_image[strtolower($size) . '_url'];
} else {
$image_src = $main_image['url'];
}
// 生成完整路径
if ($main_image['storage'] !== 'network') {
$image_src = base_storager::image_path($input_value, $size);
}
}
} catch (Exception $e) {
// 如果查询失败,继续到下一优先级
}
}
// 第三优先级:通过 target_type 和 target_id 获取关联图片
elseif (isset($params['target_type']) && isset($params['target_id'])) {
try {
$imageModel = app::get('image')->model('image');
$attachedImages = $imageModel->getAttachedImages($params['target_type'], $params['target_id']);
if (!empty($attachedImages)) {
$main_image = $attachedImages[0]; // 获取第一张图片
$image_src = $main_image['full_url'];
$input_value = $main_image['image_id'];
}
} catch (Exception $e) {
// 如果获取失败,继续到默认值
}
}
// 如果以上都没有获取到,使用默认值
if (!$image_src) {
if ($input_value) {
$image_src = base_storager::image_path($input_value, 's');
} else {
$image_src = app::get('desktop')->res_url.'/transparent.gif';
}
}
// 默认尺寸
$display_width = $params['display_width'] ?: ($params['width'] ?: 50);
$display_height = $params['display_height'] ?: ($params['height'] ?: 50);
// 放大镜相关参数
$magnifier_src = $params['magnifier_src'] ?: $image_src;
$magnifier_class = $params['magnifier_class'] ?: 'img-magnifier';
// 样式参数
$border_style = $params['border_style'] ?: '2px dashed #ddd';
$border_radius = $params['border_radius'] ?: '4px';
$cursor_style = $params['cursor_style'] ?: 'pointer';
// 只读模式参数
$readonly = isset($params['readonly']) ? $params['readonly'] : false;
// 准备模板数据
$render = new base_render(app::get('desktop'));
$render->pagedata['domid'] = $domid;
$render->pagedata['input_name'] = $input_name;
$render->pagedata['input_value'] = $input_value;
$render->pagedata['image_src'] = $image_src;
$render->pagedata['display_width'] = $display_width;
$render->pagedata['display_height'] = $display_height;
$render->pagedata['magnifier_class'] = $magnifier_class;
$render->pagedata['magnifier_src'] = $magnifier_src;
$render->pagedata['border_style'] = $border_style;
$render->pagedata['border_radius'] = $border_radius;
$render->pagedata['cursor_style'] = $cursor_style;
$render->pagedata['transparent_gif'] = app::get('desktop')->res_url.'/transparent.gif';
$render->pagedata['size'] = isset($params['size']) ? $params['size'] : '';
$render->pagedata['target_type'] = $params['target_type'] ?: '';
$render->pagedata['target_id'] = $params['target_id'] ?: '';
$render->pagedata['readonly'] = $readonly;
// 使用单图片HTML模板
return $render->fetch('input_image_magnifier.html');
}
}
}