function action_export($ident, &$controller) { $addons =& $controller->system->loadModel('system/addons'); $exporter = $addons->load($ident, 'io'); $exporter->charset =& $controller->system->loadModel('utility/charset'); $object =& $controller->model; if (!class_exists('shopObject')) { require 'shopObject.php'; } $allCols = $controller->model->getColumns(); $step = -1; $offset = 0; $cols = $controller->system->get_op_conf('view.' . $controller->object); if (!$cols) { $cols = $controller->model->defaultCols; } elseif ($cols = explode(',', $cols)) { $cols = array_flip($cols); unset($cols['_tag_']); $cols = implode(',', array_flip($cols)); } $cols = str_replace('print_status,', '', $cols); $type_modifier = array(); $key_modifier = array(); $object_modifier = array(); foreach (explode(',', $cols) as $col) { if ($col == '_cmd' && $_GET['act'] == 'recycleIndex') { continue; } if (!isset($disabledCols[$col])) { if (isset($allCols[$col]) && !$allCols[$col]['html']) { $allCols[$col]['used'] = true; $colArray[$col] =& $allCols[$col]; if (isset($allCols[$col]['sql'])) { $sql[] = $allCols[$col]['sql'] . ' as ' . $col; } elseif ($col == '_tag_') { $sql[] = $controller->idColumn . ' as _tag_'; } else { $sql[] = $col; } if (method_exists($object, 'modifier_' . $col)) { $key_modifier[$col] = array(); } elseif (substr($colArray[$col]['type'], 0, 7) == 'object:') { $object_modifier[$colArray[$col]['type']] = array(); } elseif (function_exists('type_modifier_' . $colArray[$col]['type']) && $colArray[$col]['type'] != 'money') { $type_modifier[$colArray[$col]['type']] = array(); } } } } $count = $controller->model->count($_POST); if ($count == $controller->model->count()) { $step = -1; } $list =& $controller->model->export($controller->model->getList(implode(',', $sql), $_POST, $offset, $step)); $allCols = $controller->model->getColumns(); $count = count($list); if (!function_exists('object_cols_type')) { require CORE_INCLUDE_DIR . '/core/object.cols.type.php'; } object_cols_type($list, $colArray, $key_modifier, $object_modifier, $type_modifier, $object, $ident); $headCols = array(); foreach ($list[0] as $k => $v) { if ($k == '_tag_') { $headCols[] = '标签(' . $k . ')'; } else { $headCols[] = $allCols[$k]['label'] . '(' . $k . ')'; } } if (method_exists($exporter, 'export_begin')) { $exporter->export_begin($headCols, substr(get_class($controller), 4), $count); } $exporter->export_rows($list); if (!$step) { while ($count > ($offset += $step)) { $list =& $controller->model->export($controller->model->getList(implode(',', $sql), $_POST, $offset, $step)); object_cols_type($list, $colArray, $key_modifier, $object_modifier, $type_modifier, $object, $ident); $exporter->export_rows($list); } } if (method_exists($exporter, 'export_finish')) { $exporter->export_finish(); } }
function action_finder_lister(&$controller) { $finder =& $controller->_vars['_finder']; $object =& $controller->model; if ($_GET['act'] != 'recycleIndex' && ($views = $controller->_views())) { $finder['views'] = array_keys($views); if (!$_GET['view']) { $_GET['view'] = 0; } $finder['params'] = array_merge((array) $finder['params'], (array) $views[$finder['views'][$_GET['view'] + 0]]); } if ($_GET['p'] && get_class($controller) === 'ctl_articles') { $finder['params'] = array('node_id' => $_GET['p'][0]); } if ($finder['current_view'] = $_POST['lister']) { $controller->system->set_op_conf('lister.' . $controller->object, $finder['current_view']); } else { $finder['current_view'] = $controller->system->get_op_conf('lister.' . $controller->object); } if (!$finder['current_view']) { $finder['current_view'] = $controller->default_lister; } $cols = $finder['listViews'][$finder['current_view']]['cols']; if (!$cols) { $cols = $controller->system->get_op_conf('view.' . $controller->object); } if (!$cols) { $cols = $controller->finder_default_cols ? $controller->finder_default_cols : $object->defaultCols; } if (isset($_POST['_finder']['orderBy'])) { $finder['order'] = array($_POST['_finder']['orderBy'], $_POST['_finder']['orderType']); } else { $finder['order'] = $object->defaultOrder; } if (isset($_POST['plimit']) && $_POST['plimit']) { $controller->system->set_op_conf('lister.pagelimit', $_POST['plimit']); $finder['plimit'] = $_POST['plimit']; } else { $finder['plimit'] = $controller->system->get_op_conf('lister.pagelimit'); if (!$finder['plimit']) { $finder['plimit'] = 20; } } $finder['plimit_in_sel'] = array(100, 50, 20, 10); $finder['count'] = $object->count($finder['params']); $totalPages = ceil($finder['count'] / $finder['plimit']); $page = $_GET['page'] ? $_GET['page'] : 1; if ($page < 0 || $page > 1 && $page > $totalPages) { $page = 1; } $allCols =& $object->getColumns($finder['params']); if ($object->hasTag) { $allCols = array_merge(array('_tag_' => array('label' => __('标签'), 'width' => 150, 'noOrder' => true)), $allCols); } $modifiers = array(); $col_width_set = $object->system->get_op_conf('colwith.' . $_GET['ctl']); $type_modifier = array(); $key_modifier = array(); $object_modifier = array(); foreach (explode(',', $cols) as $col) { if ($col == '_cmd' && $_GET['act'] == 'recycleIndex') { continue; } if (isset($allCols[$col])) { $colArray[$col] =& $allCols[$col]; if ($allCols[$col]['escape_html']) { $escape_html[$col] = array(); } if (method_exists($object, 'modifier_' . $col)) { $key_modifier[$col] = array(); } elseif (substr($colArray[$col]['type'], 0, 7) == 'object:') { $object_modifier[$colArray[$col]['type']] = array(); } elseif (function_exists('type_modifier_' . $colArray[$col]['type'])) { $type_modifier[$colArray[$col]['type']] = array(); } if (isset($col_width_set[$col])) { $colArray[$col]['width'] = $col_width_set[$col]; } if ($allCols[$col]['html']) { $sql[] = '1 as ' . $col; $allCols[$col]['readonly'] = 1; } elseif (isset($allCols[$col]['sql'])) { $sql[] = $allCols[$col]['sql'] . ' as ' . $col; } elseif ($col == '_tag_') { $sql[] = $object->idColumn . ' as _tag_'; } else { $sql[] = $col; } } } if (!isset($colArray[$object->idColumn])) { array_unshift($sql, $object->idColumn); } if ($finder['params'] === -1) { $list = array(); } else { set_error_handler('object_finder_errhandler', E_USER_WARNING); $GLOBALS['last_error'] = null; $list = $object->getList(implode(',', $sql), $finder['params'], ($page - 1) * $finder['plimit'], $finder['plimit'], $finder['order']); restore_error_handler(); if ($GLOBALS['last_error']) { $controller->_vars['sql_error'] = $GLOBALS['last_error']; $controller->_vars['items'] = false; } elseif ($list === false) { $controller->_vars['items'] = false; } elseif ($list) { if (!function_exists('object_cols_type')) { require CORE_INCLUDE_DIR . '/core/object.cols.type.php'; } object_cols_type($list, $colArray, $key_modifier, $object_modifier, $type_modifier, $object, 'col', $escape_html); } $controller->_vars['items'] = array('list' => &$list, 'cols' => &$colArray); $finder['detail_url'] = method_exists($controller, '_detail'); $finder['pager'] = array('current' => $page, 'total' => ceil($finder['count'] / $finder['plimit']), 'link' => 'javascript:' . $finder['var'] . '.page(_PPP_)', 'token' => '_PPP_'); } }