/** * 模块扩展内容页 */ protected function _extend($id = NULL, $return = FALSE) { // 缓存查询结果 $name = (SITE_MOBILE === TRUE ? 'm' : '') . 'extend' . $this->dir . SITE_ID . $id; $data = $this->get_cache_data($name); if (!$data) { $mod = $this->get_cache('module-' . SITE_ID . '-' . $this->dir); if (!$mod) { if ($return) { return NULL; } $this->msg(lang('m-148')); } $this->load->model('content_model'); $data = $this->content_model->get_extend($id); if (!$data) { if ($return) { return NULL; } $this->goto_404_page(dr_lang('mod-45', $id)); } $content = $this->get_cache_data('show' . $this->dir . SITE_ID . $data['cid']); if (!$content) { $content = $this->get_cache_data('extend-show' . $this->dir . SITE_ID . $data['cid']); } if (!$content) { $content = $this->content_model->get($data['cid']); $this->set_cache_data('extend-show' . $this->dir . SITE_ID . $data['cid'], $content, $mod['setting']['show_cache']); } if (!$content) { if ($return) { return NULL; } $this->goto_404_page(dr_lang('mod-30', $data['cid'])); } $data = $data + $content; $data['curl'] = $content['url']; // 检测转向字段 $redirect = 0; foreach ($mod['extend'] as $t) { if ($t['fieldtype'] == 'Redirect' && $data[$t['fieldname']]) { if (MODULE_HTML) { $redirect = 1; $data['goto_url'] = $data[$t['fieldname']]; break; } else { redirect($data[$t['fieldname']], 'location', 301); exit; } } } $cat = $mod['category'][$data['catid']]; // 上一篇 $data['prev_page'] = $this->link->where('cid', (int) $data['cid'])->where('id<', $id)->order_by('displayorder desc,id desc')->limit(1)->get($this->content_model->prefix . '_extend')->row_array(); // 下一篇 $data['next_page'] = $this->link->where('cid', (int) $data['cid'])->where('id>', $id)->order_by('displayorder desc,id asc')->limit(1)->get($this->content_model->prefix . '_extend')->row_array(); // 缓存数据 if ($data['uid'] != $this->uid) { $data = $this->set_cache_data($name, $data, $mod['setting']['show_cache']); } } else { $mod = $this->get_cache('module-' . SITE_ID . '-' . $this->dir); $cat = $mod['category'][$data['catid']]; } // 拒绝访问判断 if ($cat['permission'][$this->markrule]['show']) { $this->msg(lang('m-338')); } // 格式化输出自定义字段 $fields = $mod['field']; $fields = $cat['field'] ? array_merge($fields, $cat['field']) : $fields; $fields = $fields + $mod['extend']; $fields['inputtime'] = array('fieldtype' => 'Date'); $data = $this->field_format_value($fields, $data, 1); // 栏目下级或者同级栏目 list($parent, $related) = $this->_related_cat($mod, $data['catid']); $this->template->assign($data); $this->template->assign(dr_extend_seo($mod, $data)); $this->template->assign(array('cat' => $cat, 'params' => array('catid' => $data['catid']), 'parent' => $parent, 'related' => $related, 'urlrule' => $this->mobile ? dr_mobile_extend_url($this->dir, $id, '{page}') : dr_extend_url($mod, $data, '{page}'))); $tpl = $cat['setting']['template']['extend']; $tpl = $tpl ? $tpl : 'extend.html'; if (!$return) { $this->template->display($tpl); } // 存在转向字段时处理方式 return array($data, $redirect ? 'go' : $tpl); }
public function edit_extend($_data, $data) { // 参数判断 if (!$data || !$_data) { return FALSE; } // 修改之前挂钩点 $data['edit'] = $_data; $this->hooks->call_hook('extend_edit_before', $data); unset($data['edit']); // 被退回处理 if (isset($data[1]['back']) && $this->admin) { $backinfo = array('uid' => $this->uid, 'author' => $this->admin['username'], 'rolename' => $this->admin['role']['name'], 'optiontime' => SYS_TIME, 'backcontent' => $data[1]['back']); unset($data[1]['back']); } // 格式化字段值 $data = $this->get_content_extend_data($data, $_data); // 生成url地址 $data[1]['url'] = dr_extend_url($this->ci->get_cache('MODULE-' . SITE_ID . '-' . $this->mdir), array_merge($_data, $data[1])); // 更新索引表 $this->link->where('id', $_data['id'])->update($this->prefix . '_extend_index', array('uid' => $data[1]['uid'], 'catid' => $data[1]['catid'], 'status' => $data[1]['status'])); if ($data[1]['status'] == 9) { // 提交为审核通过状态 $data[1]['id'] = $data[0]['id'] = $_data['id']; $data[0]['uid'] = $data[1]['uid']; $data[0]['cid'] = $data[1]['cid']; $data[0]['catid'] = $data[1]['catid']; // 副表以5w左右数据量无限分表 $data[1]['tableid'] = $_data['tableid'] ? $_data['tableid'] : floor($_data['id'] / 50000); if (!$this->link->query("SHOW TABLES LIKE '" . $this->prefix . '_extend_data_' . $data[1]['tableid'] . "'")->row_array()) { // 附表不存在时创建附表 $sql = $this->link->query("SHOW CREATE TABLE `{$this->prefix}_extend_data_0`")->row_array(); $this->link->query(str_replace(array($sql['Table'], 'CREATE TABLE '), array($this->prefix . '_extend_data_' . $data[1]['tableid'], 'CREATE TABLE IF NOT EXISTS '), $sql['Create Table'])); } // 主表更新 if ($this->link->where('id', $_data['id'])->count_all_results($this->prefix . '_extend')) { $this->link->where('id', $_data['id'])->update($this->prefix . '_extend', $data[1]); } else { $this->link->replace($this->prefix . '_extend', $data[1]); } // 副表 $this->link->replace($this->prefix . '_extend_data_' . $data[1]['tableid'], $data[0]); // 审核表 if ($_data['status'] < 9) { $this->link->where('id', $_data['id'])->delete($this->prefix . '_extend_verify'); } // 更新内容表时间 $this->link->where('id', $data[1]['cid'])->update($this->prefix, array('updatetime' => SYS_TIME)); } else { // 检查合并审核数据 $content = $data[0] ? array_merge($data[0], $data[1]) : $data[1]; if (!$content) { return FALSE; } $content['title'] = $this->content['title']; // 更新主表 $this->link->where('id', (int) $_data['id'])->update($this->prefix . '_extend', array('status' => $data[1]['status'])); // 更新审核表 $this->link->replace($this->prefix . '_extend_verify', array('id' => $_data['id'], 'uid' => $data[1]['uid'], 'cid' => $data[1]['cid'], 'catid' => $data[1]['catid'], 'author' => $data[1]['author'], 'status' => $data[1]['status'], 'content' => dr_array2string($content), 'backuid' => (int) $this->uid, 'backinfo' => $this->admin ? dr_array2string($backinfo) : '', 'inputtime' => SYS_TIME)); } $this->ci->clear_cache((SITE_MOBILE === TRUE ? 'm' : '') . 'extend' . $this->mdir . SITE_ID . $id); // 修改之后挂钩点 $data['edit'] = $_data; $this->hooks->call_hook('extend_edit_after', $data); // 修改之后执行的方法 $this->_edit_extend($data); return $_data['id']; }
/** * 更新URL */ public function url() { $cfile = SITE_ID . APP_DIR . $this->uid . $this->input->ip_address() . '_content_url'; if (IS_POST) { $catid = $this->input->post('catid'); $query = $this->link; if (count($catid) > 1 || $catid[0]) { $query->where_in('catid', $catid); if (count($this->get_cache('module-' . SITE_ID . '-' . APP_DIR, 'category')) == count($catid)) { $catid = 0; } } else { $catid = 0; } // 统计数量 $total = $query->count_all_results($this->content_model->prefix . '_index'); $this->cache->file->save($cfile, array('catid' => $catid, 'total' => $total), 10000); if ($total) { $this->system_log('站点【#' . SITE_ID . '】模块【' . APP_DIR . '】更新URL地址#' . $total); // 记录日志 $this->mini_msg(dr_lang('132', $total), dr_url(APP_DIR . '/home/url', array('todo' => 1)), 2); } else { $this->mini_msg(lang('133')); } } // 处理url if ($this->input->get('todo')) { $page = max(1, (int) $this->input->get('page')); $psize = 100; // 每页处理的数量 $cache = $this->cache->file->get($cfile); if ($cache) { $total = $cache['total']; $catid = $cache['catid']; } else { $catid = 0; $total = $this->link->count_all_results($this->content_model->prefix); } $tpage = ceil($total / $psize); // 总页数 if ($page > $tpage) { // 更新完成删除缓存 $this->cache->file->delete($cfile); $this->mini_msg(lang('360'), NULL, 1); } $module = $this->get_cache('module-' . SITE_ID . '-' . APP_DIR); $table = $this->content_model->prefix; if ($catid) { $this->link->where_in('catid', $catid); } $data = $this->link->limit($psize, $psize * ($page - 1))->order_by('id DESC')->get($table)->result_array(); foreach ($data as $t) { $url = dr_show_url($module, $t); $this->link->update($table, array('url' => $url), 'id=' . $t['id']); if ($module['extend']) { $extend = $this->link->where('cid', (int) $t['id'])->order_by('id DESC')->get($table . '_extend')->result_array(); if ($extend) { foreach ($extend as $e) { $this->link->where('id=', (int) $e['id'])->update($table . '_extend', array('url' => dr_extend_url($module, $e))); } } } } $this->mini_msg(dr_lang('135', "{$tpage}/{$page}"), dr_url(APP_DIR . '/home/url', array('todo' => 1, 'page' => $page + 1)), 2, 0); } else { $this->template->assign(array('menu' => $this->get_menu($this->_get_content_menu()), 'select' => $this->select_category($this->get_cache('module-' . SITE_ID . '-' . APP_DIR, 'category'), 0, 'id="dr_synid" name=\'catid[]\' multiple style="width:200px;height:250px;"', ''))); $this->template->display('content_url.html'); } }
/** * 更新URL */ public function url() { $cfile = SITE_ID . APP_DIR . $this->uid . $this->input->ip_address() . '_content_url'; if (IS_POST) { $catid = $this->input->post('catid'); $query = $this->link; if (count($catid) > 1 || $catid[0]) { $query->where_in('catid', $catid); } $data = $query->select('id')->get($this->content_model->prefix . '_index')->result_array(); if ($data) { $id = array(); foreach ($data as $t) { $id[] = $t['id']; } $this->cache->file->save($cfile, $id, 7200); // 缓存搜索结果->id $this->mini_msg(dr_lang('132', count($id)), dr_url(APP_DIR . '/home/url', array('todo' => 1)), 2); } else { $this->mini_msg(lang('133')); } } if ($this->input->get('todo')) { $id = $this->cache->file->get($cfile); // 取缓存搜索结果->id if (!$id) { $this->mini_msg(lang('134')); } $page = max(1, (int) $this->input->get('page')); $psize = 50; $total = count($id); $tpage = ceil($total / $psize); // 总页数 if ($page > $tpage) { // 更新完成删除缓存 $this->cache->file->delete($cfile); $this->mini_msg(lang('360'), NULL, 1); } $module = $this->get_cache('module-' . SITE_ID . '-' . APP_DIR); $table = $this->content_model->prefix; $data = $this->link->where_in('id', $id)->limit($psize, $psize * ($page - 1))->order_by('id DESC')->get($table)->result_array(); foreach ($data as $t) { $url = dr_show_url($module, $t); $this->link->update($table, array('url' => $url), 'id=' . $t['id']); if ($module['extend']) { $extend = $this->link->where('cid', $t['id'])->order_by('id DESC')->get($table . '_extend')->result_array(); if ($extend) { foreach ($extend as $e) { $url = dr_extend_url($module, $e); $this->link->update($table . '_extend', array('url' => $url), 'id=' . (int) $e['id']); } } } } $this->mini_msg(dr_lang('135', "{$tpage}/{$page}"), dr_url(APP_DIR . '/home/url', array('todo' => 1, 'page' => $page + 1)), 2, 0); } else { $this->template->assign(array('menu' => $this->get_menu(array(lang('136') => APP_DIR . '/admin/home/url', lang('001') => 'admin/module/cache')), 'select' => $this->select_category($this->get_cache('module-' . SITE_ID . '-' . APP_DIR, 'category'), 0, 'id="dr_synid" name=\'catid[]\' multiple style="width:200px;height:250px;"', ''))); $this->template->display('content_url.html'); } }