public function cache() { $sql = 'SELECT sort.id as catalog_sort_id,sort.catalog_sort, sort.catalog_sort_name,field.id,field.catalog_field,field.remark, field.catalog_default,field.selected,field.bak,field.batch,field.required, field.zh_name,style.formhtml AS style,style.type FROM ' . DB_PREFIX . 'field AS field LEFT JOIN ' . DB_PREFIX . 'style AS style ON field.form_style=style.id LEFT JOIN ' . DB_PREFIX . 'field_sort AS sort ON sort.id=field.catalog_sort_id WHERE 1 AND field.switch = 1'; $sql .= " ORDER BY sort.order_id DESC,field.order_id DESC"; $q = $this->db->query($sql); while ($data = $this->db->fetch_array($q)) { $data['catalog_field'] = catalog_prefix($data['catalog_field']); $default = $data['catalog_default'] = $data['catalog_default'] ? explode(',', $data['catalog_default']) : NULL; $data['selected'] = maybe_unserialize($data['selected']); if (is_string($data['selected']) && !empty($data['selected'])) { $data['selected'] = $this->content_change($data['type'], $data['selected']); } $datas[$data['catalog_sort']]['catalog_sort_id'] = $data['catalog_sort_id']; $datas[$data['catalog_sort']]['catalog_sort_name'] = $data['catalog_sort_name']; $datas[$data['catalog_sort']]['catalog_sort'] = $data['catalog_sort']; if ($data['type'] == 'text' || $data['type'] == 'textarea') { $data['style'] = str_replace(REPLACE_NAME, $data['catalog_field'], $data['style']); } elseif ($data['type'] == 'radio') { $style = str_replace(REPLACE_NAME, $data['catalog_field'], $data['style']); unset($data['style']); foreach ($default as $defaults) { $data['style'] .= str_replace(REPLACE_DATA, $defaults, $style); } } elseif ($data['type'] == 'checkbox') { $style = str_replace(REPLACE_NAME, $data['catalog_field'] . '[]', $data['style']); unset($data['style']); foreach ($default as $defaults) { $data['style'] .= str_replace(REPLACE_DATA, $defaults, $style); } } elseif ($data['type'] == 'option') { $style = $data['style']; unset($data['style']); foreach ($default as $defaults) { $data['style'] .= str_replace(REPLACE_DATA, $defaults, $style); } $data['style'] = '<select name=' . $data['catalog_field'] . '><option value>请选择' . $data['zh_name'] . '</option>' . $data['style'] . '</select>'; } elseif ($data['type'] == 'img') { if ($data['batch']) { $data['style'] = str_replace(REPLACE_NAME, $data['catalog_field'] . '[]', $data['style']); } else { $data['style'] = str_replace(REPLACE_NAME, $data['catalog_field'], $data['style']); } } else { continue; } $html = array('catalog_id' => $data['id'], 'zh_name' => $data['zh_name'], 'catalog_field' => $data['catalog_field'], 'remark' => $data['remark'], 'catalog_default' => $data['catalog_default'], 'selected' => $data['selected'], 'bak' => $data['bak'], 'batch' => $data['batch'], 'required' => $data['required'], 'type' => $data['type'], 'style' => $data['style']); $datas[$data['catalog_sort']]['html'][$data['catalog_field']] = $html; $datas[$data['catalog_sort']]['html'][$data['catalog_field']]['data'] = NULL; } $text = '<?php $cache=' . var_export($datas, true) . ';?>'; hg_file_write(CACHE_SORT, $text); }
function get_catalog_field($where) { $sql = "SELECT catalog_field FROM " . DB_PREFIX . "content WHERE 1 " . $where; $q = $this->db->query($sql); //当前内容id是否已存在与内容表,并取出编目标识 while ($data = $this->db->fetch_array($q)) { $data['catalog_field'] = catalog_prefix($data['catalog_field']); $arr_catalog_field[$data['catalog_field']] = $data['catalog_field']; //编目标识 } return $arr_catalog_field; }
public function update() { $app_uniqueid = $this->input['app_uniqueid'] ? trim($this->input['app_uniqueid']) : ''; $mod_uniqueid = $this->input['mod_uniqueid'] ? trim($this->input['mod_uniqueid']) : ''; $content_id = $this->input['content_id'] ? intval($this->input['content_id']) : ''; $error = $this->catalog->error($app_uniqueid, $mod_uniqueid, $content_id); if ($error) { $this->errorOutput($error); } $input = $this->input; //获取curl的post数组 $update_user = array('update_user_id' => intval($this->user['user_id']), 'update_user_name' => $this->user['user_name'], 'update_time' => TIMENOW); $app_field = $this->catalog->app_field($app_uniqueid); //获取当前应用已启用的编目标识 $where = $this->catalog->get_condition($app_uniqueid, $mod_uniqueid, $content_id); $sql = "SELECT id,catalog_field,value FROM " . DB_PREFIX . "content WHERE 1 " . $where; $q = $this->db->query($sql); //当前内容用到的编目标识,用于提取curl数组 while ($data = $this->db->fetch_array($q)) { $data['catalog_field'] = catalog_prefix($data['catalog_field']); $arr_catalog_field[] = $data['catalog_field']; //当前内容id已经使用的编目标识 $catalog_content[$data['catalog_field']] = array('id' => $data['id'], 'value' => $data['value']); $field_value[$data['catalog_field']] = $data['value'] ? $data['value'] : NULL; } $required = array(); $required = $this->required($input, $_FILES, $app_field, $field_value); if (!empty($required)) { $required_ret = array(); $required_ret['required'] = $required; $this->addItem($required_ret); $this->output(); } if ($input['catalogdel']) { $this->delete(TRUE); if (stripos($input['catalogdel'], ',') !== false) { $catalogdel = explode(',', $input['catalogdel']); } else { $catalogdel = array(trim($input['catalogdel'])); } $arr_catalog_field = array_diff($arr_catalog_field, $catalogdel); //清除掉已删除的编目标识 } if ($input['materialdel']) { if (!is_array($input['materialdel'])) { $materialdel = array(); $materialdel = explode(',', $input['materialdel']); $materialdel = array_filter($materialdel, "clean_array_null"); $materialdel = array_filter($materialdel, "clean_array_num"); if ($materialdel && is_array($materialdel)) { $input['materialdel'] = trim(implode(',', $materialdel)); $this->catalog->deleteMaterial_id($input['materialdel']); //删除无用素材.前端页面会记录用户操作无用的素材 } } } if (!empty($arr_catalog_field) && is_array($arr_catalog_field)) { $images = array(); foreach ($arr_catalog_field as $value) { $images[$value] = array(); if ($app_field[$value]['type'] == 'img') { $f_cid = $catalog_content[$value]['id']; //编目内容id $images_id = array(); if (isset($_FILES[$value]) && !empty($_FILES[$value])) { if ($app_field[$value]['batch']) { $_files = array(); foreach ($_FILES[$value] as $name => $f_value) { foreach ($f_value as $keys => $values) { $_files[$keys][$name] = $values; } } foreach ($_files as $_file) { $img = $this->upload_img($_file, $f_cid); if ($img == -1) { $this->errorOutput('图片服务器未安装'); } $images[$value][] = $img; } } else { $img = $this->upload_img($_FILES[$value], $f_cid); if ($img == -1) { $this->errorOutput('图片服务器未安装'); } $images[$value][] = $img; } foreach ($images[$value] as $val) { $images_id[$value][] = $val['id']; } if ($catalog_content[$value]['value'] && !$app_field[$value]['batch']) { $this->catalogcore->delete('materials', array('id' => explode(',', $catalog_content[$value]['value']))); //删除旧数据,单张图片上传模式 } /* $update_out[$value]=array( 'zh_name'=>$app_field[$value]['zh_name'], 'type'=>$app_field[$value]['type'], 'value'=>$images[$value]); //unset($images_id); * */ unset($_FILES[$value]); } if ($app_field[$value]['batch']) { if (stripos($catalog_content[$value]['value'], ',') !== false) { $catalog_content[$value]['value'] = explode(',', $catalog_content[$value]['value']); } elseif ($catalog_content[$value]['value']) { $catalog_content[$value]['value'] = array(intval($catalog_content[$value]['value'])); } if ($input['materialdel']) { if (stripos($input['materialdel'], ',') !== false) { $input['materialdel'] = explode(',', $input['materialdel']); } else { $input['materialdel'] = array(intval($input['materialdel'])); } if ($catalog_content[$value]['value']) { $catalog_content[$value]['value'] = array_diff($catalog_content[$value]['value'], $input['materialdel']); } } if ($images_id[$value]) { if ($catalog_content[$value]['value']) { $content_array['value'][$value] = implode(',', array_merge($catalog_content[$value]['value'], $images_id[$value])); } else { $content_array['value'][$value] = implode(',', $images_id[$value]); } } else { if ($catalog_content[$value]['value']) { $content_array['value'][$value] = implode(',', $catalog_content[$value]['value']); } else { //$content_array['value'][$value]=''; $this->input['catalogdel'] = $value; $this->delete(true, false); } } $get_material_id = $catalog_content[$value]['value'] ? implode(',', $catalog_content[$value]['value']) : ''; } elseif (!$app_field[$value]['batch']) { $is_update_Material = 1; if ($images_id[$value]) { $content_array['value'][$value] = implode(',', $images_id[$value]); $is_update_Material = 0; } elseif ($catalog_content[$value]['value']) { $content_array['value'][$value] = $catalog_content[$value]['value']; } $get_material_id = $is_update_Material ? $catalog_content[$value]['value'] : ''; //如果为新上传的,则不用查找素材.如果为旧数据,则需要重新查出 } $images[$value] = array_merge($images[$value], $this->catalog->get_Material($get_material_id)); //取旧图片数据. } elseif ($val['type'] == 'video') { } else { if (is_array($input[$value])) { $tmp = implode(',', $input[$value]); $content_array['value'][$value] = $tmp; unset($tmp); } else { $content_array['value'][$value] = $input[$value]; } unset($input[$value]); } } $is_create_flag = FALSE; if (is_array($app_field)) { foreach ($app_field as $key => $value) { if (isset($_FILES[$key]) && !empty($_FILES[$key])) { $is_create_flag = TRUE; } elseif (isset($input[$key]) && !empty($input[$key])) { $is_create_flag = TRUE; } } } } else { if (is_array($app_field)) { foreach ($app_field as $key => $value) { if (!empty($_FILES[$key])) { $is_create_flag = TRUE; } elseif (isset($input[$key])) { $is_create_flag = TRUE; } } } } if ($is_create_flag) { $return_create = $this->create($input, $_FILES, TRUE); } $update_out = array(); if (!empty($content_array)) { $catalog_field_string = "'" . trim(str_ireplace(CATALOG_PREFIX, '', implode("','", array_keys($content_array['value'])))) . "'"; //去前缀 $sql = "UPDATE " . DB_PREFIX . "content SET "; $count_content = count($content_array); $i = 0; //用于判断是否为最后一个字段 foreach ($content_array as $key => $value) { $i++; $sql .= "{$key} = CASE catalog_field "; if (!empty($value) && is_array($value)) { foreach ($value as $catalog_field => $content_value) { $catalog_field_replace = trim(str_ireplace(CATALOG_PREFIX, '', $catalog_field)); //去掉前缀 $sql .= sprintf("WHEN %s THEN %s ", "'" . $catalog_field_replace . "'", "'" . $content_value . "'"); // 拼接SQL语句 if ($app_field[$catalog_field]['type'] == 'img') { if ($content_value) { $content_value = $images[$catalog_field]; } else { $content_value = array(); } } elseif ($app_field[$catalog_field]['type'] == 'checkbox' && $content_value) { $content_value = explode(',', $content_value); } $update_out[$catalog_field] = array('zh_name' => $app_field[$catalog_field]['zh_name'], 'bak' => $app_field[$catalog_field]['bak'], 'type' => $app_field[$catalog_field]['type'], 'value' => $content_value); } if (!($i == $count_content)) { $sql .= "END,"; } } } $sql .= "END WHERE 1 " . $where . " AND catalog_field IN ({$catalog_field_string})"; $this->db->query($sql); $fields = ''; foreach ($update_user as $k => $v) { if (is_string($v)) { $fields .= $k . "='" . $v . "',"; } elseif (is_int($v) || is_float($v)) { $fields .= $k . '=' . $v . ','; } } $fields = rtrim($fields, ','); $sql = 'UPDATE ' . DB_PREFIX . 'content SET ' . $fields . ' WHERE 1 ' . $where . ' AND catalog_field IN (' . $catalog_field_string . ')'; $this->db->query($sql); } if ($return_create) { foreach ($return_create as $key => $val) { $update_out[$key] = $val; } } $this->addItem_withkey('result', $update_out); $this->addItem_withkey('catalog_prefix', CATALOG_PREFIX); $this->output(); }
/** * 获取某个应用某个模块某个内容 * @param content_id * @param app_uniqueid * @param mod_uniqueid */ public function detail() { $rows = $this->rows; if (empty($this->input['content_id']) && $this->input['yes']) { $catalogs = FALSE; } else { $error = $this->catalog->error(); if ($error) { $this->errorOutput($error); } $where = $this->catalog->get_condition(); $sql = "SELECT sort.catalog_sort,field.catalog_field,content.id,content.value FROM " . DB_PREFIX . "field AS field LEFT JOIN catalog_content AS content ON field.catalog_field=content.catalog_field LEFT JOIN " . DB_PREFIX . "field_sort AS sort ON sort.id=field.catalog_sort_id WHERE 1 " . $where; $q = $this->db->query($sql); while ($data = $this->db->fetch_array($q)) { $data['catalog_field'] = catalog_prefix($data['catalog_field']); $datas[$data['catalog_field']] = array($data['catalog_field'] => $data['value'], 'data_id' => $data['id'], 'catalog_sort' => $data['catalog_sort']); $field[$data['catalog_field']] = $data['catalog_field']; //编目标识 } if (!empty($datas) && is_array($datas)) { foreach ($rows as $sortk => $sortv) { if (!empty($sortv['html']) && is_array($sortv['html'])) { foreach ($sortv['html'] as $sortkk => $sortvv) { if ($sortkk != $field[$sortkk]) { unset($rows[$sortk]['html'][$sortkk]); //unset掉不存在数据. unset($field[$sortkk]); //unset掉无用变量. } } } if (empty($rows[$sortk]['html']) && is_array($rows[$sortk]['html'])) { unset($rows[$sortk]); //unset掉空分类 } } foreach ($datas as $datas_key => $datas_value) { if (stripos($rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'], 'radio') !== false) { $rows[$datas_value['catalog_sort']]['html'][$datas_key]['data'] = array('data_id' => $datas_value['data_id'], 'value' => $datas_value[$datas_key]); $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'] = str_replace('value="' . $datas_value[$datas_key] . '"', 'value="' . $datas_value[$datas_key] . '" checked="checked"', $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style']); $catalogs[$datas_value['catalog_sort']] = $rows[$datas_value['catalog_sort']]; } elseif (stripos($rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'], 'option') !== false) { $rows[$datas_value['catalog_sort']]['html'][$datas_key]['data'] = array('data_id' => $datas_value['data_id'], 'value' => $datas_value[$datas_key]); $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'] = str_replace('value="' . $datas_value[$datas_key] . '"', 'value="' . $datas_value[$datas_key] . '" selected="selected"', $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style']); $catalogs[$datas_value['catalog_sort']] = $rows[$datas_value['catalog_sort']]; } elseif (stripos($rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'], 'checkbox') !== false) { $checkbox_value_array = explode(',', $datas_value[$datas_key]); $rows[$datas_value['catalog_sort']]['html'][$datas_key]['data'] = array('data_id' => $datas_value['data_id'], 'value' => $datas_value[$datas_key]); if (isset($datas_value[$datas_key]) && !empty($datas_value[$datas_key])) { foreach ($checkbox_value_array as $checkbox_value) { $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'] = str_replace('value="' . $checkbox_value . '"', 'value="' . $checkbox_value . '" checked="checked"', $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style']); } } $catalogs[$datas_value['catalog_sort']] = $rows[$datas_value['catalog_sort']]; } elseif (stripos($rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'], 'file') !== false) { $datas_value[$datas_key] = unserialize($datas_value[$datas_key]); $rows[$datas_value['catalog_sort']]['html'][$datas_key]['data'] = array('data_id' => $datas_value['data_id'], 'value' => $datas_value[$datas_key]); $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'] = str_replace(REPLACE_DATA, $datas_value[$datas_key], $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style']); $catalogs[$datas_value['catalog_sort']] = $rows[$datas_value['catalog_sort']]; } else { $rows[$datas_value['catalog_sort']]['html'][$datas_key]['data'] = array('data_id' => $datas_value['data_id'], 'value' => $datas_value[$datas_key]); $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style'] = str_replace(REPLACE_DATA, $datas_value[$datas_key], $rows[$datas_value['catalog_sort']]['html'][$datas_key]['style']); $catalogs[$datas_value['catalog_sort']] = $rows[$datas_value['catalog_sort']]; } } foreach ($catalogs as $catalogs_key => $catalogs_value) { if (!empty($catalogs[$catalogs_key]['html']) && is_array($catalogs[$catalogs_key]['html'])) { foreach ($catalogs[$catalogs_key]['html'] as $catalogs_key_key => $catalogs_value_value) { $catalogs[$catalogs_key]['html'][$catalogs_key_key]['style'] = str_replace(REPLACE_DATA, '', $catalogs[$catalogs_key]['html'][$catalogs_key_key]['style']); } } } } else { //此内容id不存在则执行处理 $catalogs = FALSE; } } $this->addItem($catalogs); $this->output(); }