Ответить
1
Мод материалы пользователя
Отправлено: 15 Мар 2011#1
Мод предназначен для вывода списка материалов, размещенных конкретным пользователем в каталоге файлов.
Для установки мода необходимо добавить в файл "\modules\loads\index.php" в конец файла (но перед "}?>" ) следующую функцию
Путь к списку материалов:
/loads/user_loads - выведет материалы авторизировавшегося пользователя;
/loads/user_loads/1 - выведет материалы пользователя с ID=1.
Данный мод можно доработать под любой из модулей, работающий с материалами (news, stat, foto).
Для установки мода необходимо добавить в файл "\modules\loads\index.php" в конец файла (но перед "}?>" ) следующую функцию
Code:
/**
* User loads (c) Wasja
*/
function user_loads($id = null) {
//turn access
$this->ACL->turn(array('loads', 'view_list'));
$id = intval($id);
if (empty($id) || $id < 1) $id = intval($_SESSION['user']['id']);
if (empty($id) || $id < 1) redirect('/loads/');
$user = $this->DB->select('users', DB_ALL, array(
'fields' => array('`name`'),
'cond' => array("`id` = '" . $id . "'")
));
if (count($user) < 1) return showInfoMessage( 'Пользователь с этим ID не найден!', '/loads');
//формируем блок со списком разделов
if ($this->cached && $this->Cache->check('category_' . $this->cacheKey)) {
$this->categories = $this->Cache->read('category_' . $this->cacheKey);
} else {
$sql_cat = $this->DB->select('loads_sections', DB_ALL, array('cond' => array('class' => 'section')));
$info = '';
//выводим поочередно все разделы, каждый с новой строки(формируем список)
foreach ($sql_cat as $result) {
$this->categories .= '<li>' . get_link(h($result['title']), '/loads/section/' . $result['id']) . '</li>';
}
if ($this->cached)
$this->Cache->write($this->categories, 'category_' . $this->cacheKey, array('module_load', 'category_block'));
}
if ($this->cached && $this->Cache->check($this->cacheKey)) {
$html = $this->Cache->read($this->cacheKey);
} else {
$this->page_title = 'Материалы пользователя "' . $user[0]['name'] . '" - ' . h(Config::read('title', 'loads')) . ' - ' . h(Config::read('site_title'));
$conditions = array();
$conditions['`a`.`author_id`'] = $id;
if (!$this->ACL->turn(array('other', 'can_see_hidden'), false)) $conditions['`a`.`available`'] = '1';
//Узнаем кол-во материалов в БД (!we need to know whether to show hidden )
$total = $this->DB->select('loads', DB_COUNT, array('alias' => 'a', 'cond' => $conditions));
$cntPages = ceil( $total / Config::read('per_page', 'loads') );
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = 1;
}
if ( $page > $cntPages ) $page = $cntPages;
if ($page > 1) {
$this->page_title .= ' (' . $page . ')';
}
if ( $cntPages > 1 ) {
$pages = pagination( $page, $cntPages, '/loads/user_loads/' . $id);
} else {
$pages = ' ';
}
//navigation panel
$navi = array();
$navi[''] = ($this->ACL->turn(array('loads', 'add_materials'), false)) ?
get_link('Добавить материал', '/loads/add_form/') : '';
$navi['<a href="/forum/">Список форумов</a> » <a href="/forum/view_forum/17">Developers team</a>'] = get_link('Главная', '/') . ' » ' . get_link(h($this->module_title), '/loads/') . ' » ' . 'Материалы пользователя';
$navi[''] = $pages;
$navi[''] = 'Всего материалов: ' . $total;
$this->_globalize($navi);
if ($total == 0) {
$html = 'Материалов пока нет!';
return $this->_view($html);
}
$html = '';
// get data
$sql = $this->DB->select('loads', DB_ALL, array(
'joins' => array(
array(
'table' => 'loads_sections',
'type' => 'LEFT',
'alias' => 'b',
'cond' => 'a.`category_id` = b.`id`',
),
array(
'table' => 'loads_sections',
'type' => 'LEFT',
'alias' => 'c',
'cond' => 'b.`section_id` = c.`id`',
),
array(
'table' => 'users',
'type' => 'LEFT',
'alias' => 'd',
'cond' => 'd.`id` = a.`author_id`',
),
),
'fields' => array('a.*', 'b.`title` as category_name', 'b.`section_id` as section_id', 'c.`title` as section_name', 'd.`name` AS author'),
'alias' => 'a',
'cond' => $conditions,
'order' => 'a.`date` DESC',
'page' => $page,
'limit' => Config::read('per_page', 'loads'),
));
// Additional fields
if (is_object($this->AddFields) && count($sql) > 0) {
$sql = $this->AddFields->mergeRecords($sql);
}
//ITERATION RECORDS
foreach ($sql as $result) {
$markets = array();
$result = $this->Parser->quoteTags($result);
$htmlloads = $this->Parser->getAndParse('loads/tablemat.html');
$markets['{MODER_PANEL}'] = $this->_getAdminBar($result);
$markets['{ENTRY_URL}'] = $entry_url = get_url('/loads/view/' . $result['id']);
$announce = $this->Parser->unquoteTags($result['main']);
$announce = $this->Textarier->getAnnounce($announce, $entry_url, 0, Config::read('announce_lenght', 'loads'));
$markets['{ANNOUNCE}'] = $this->Parser->quoteTags($announce);
foreach ($result as $key=>$value) {
$markets['{'.strtoupper($key).'}'] = h($value);
}
$markets['{LOADS}'] = $result['downloads'];
$markets['{PROFILE_URL}'] = getProfileUrl($result['author_id']);
$markets['{CATEGORY_URL}'] = get_url('/loads/category/' . $result['category_id']);
$html .= $this->_replaceMarkets($markets, $htmlloads);
//prepear cache tags
$this->setCacheTag(array(
'user_id_' . $result['author_id'],
'record_id_' . $result['id'],
));
}
if ($this->cached)
$this->Cache->write($html, $this->cacheKey, $this->cacheTags);
}
return $this->_view($html);
}
* User loads (c) Wasja
*/
function user_loads($id = null) {
//turn access
$this->ACL->turn(array('loads', 'view_list'));
$id = intval($id);
if (empty($id) || $id < 1) $id = intval($_SESSION['user']['id']);
if (empty($id) || $id < 1) redirect('/loads/');
$user = $this->DB->select('users', DB_ALL, array(
'fields' => array('`name`'),
'cond' => array("`id` = '" . $id . "'")
));
if (count($user) < 1) return showInfoMessage( 'Пользователь с этим ID не найден!', '/loads');
//формируем блок со списком разделов
if ($this->cached && $this->Cache->check('category_' . $this->cacheKey)) {
$this->categories = $this->Cache->read('category_' . $this->cacheKey);
} else {
$sql_cat = $this->DB->select('loads_sections', DB_ALL, array('cond' => array('class' => 'section')));
$info = '';
//выводим поочередно все разделы, каждый с новой строки(формируем список)
foreach ($sql_cat as $result) {
$this->categories .= '<li>' . get_link(h($result['title']), '/loads/section/' . $result['id']) . '</li>';
}
if ($this->cached)
$this->Cache->write($this->categories, 'category_' . $this->cacheKey, array('module_load', 'category_block'));
}
if ($this->cached && $this->Cache->check($this->cacheKey)) {
$html = $this->Cache->read($this->cacheKey);
} else {
$this->page_title = 'Материалы пользователя "' . $user[0]['name'] . '" - ' . h(Config::read('title', 'loads')) . ' - ' . h(Config::read('site_title'));
$conditions = array();
$conditions['`a`.`author_id`'] = $id;
if (!$this->ACL->turn(array('other', 'can_see_hidden'), false)) $conditions['`a`.`available`'] = '1';
//Узнаем кол-во материалов в БД (!we need to know whether to show hidden )
$total = $this->DB->select('loads', DB_COUNT, array('alias' => 'a', 'cond' => $conditions));
$cntPages = ceil( $total / Config::read('per_page', 'loads') );
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = 1;
}
if ( $page > $cntPages ) $page = $cntPages;
if ($page > 1) {
$this->page_title .= ' (' . $page . ')';
}
if ( $cntPages > 1 ) {
$pages = pagination( $page, $cntPages, '/loads/user_loads/' . $id);
} else {
$pages = ' ';
}
//navigation panel
$navi = array();
$navi[''] = ($this->ACL->turn(array('loads', 'add_materials'), false)) ?
get_link('Добавить материал', '/loads/add_form/') : '';
$navi['<a href="/forum/">Список форумов</a> » <a href="/forum/view_forum/17">Developers team</a>'] = get_link('Главная', '/') . ' » ' . get_link(h($this->module_title), '/loads/') . ' » ' . 'Материалы пользователя';
$navi[''] = $pages;
$navi[''] = 'Всего материалов: ' . $total;
$this->_globalize($navi);
if ($total == 0) {
$html = 'Материалов пока нет!';
return $this->_view($html);
}
$html = '';
// get data
$sql = $this->DB->select('loads', DB_ALL, array(
'joins' => array(
array(
'table' => 'loads_sections',
'type' => 'LEFT',
'alias' => 'b',
'cond' => 'a.`category_id` = b.`id`',
),
array(
'table' => 'loads_sections',
'type' => 'LEFT',
'alias' => 'c',
'cond' => 'b.`section_id` = c.`id`',
),
array(
'table' => 'users',
'type' => 'LEFT',
'alias' => 'd',
'cond' => 'd.`id` = a.`author_id`',
),
),
'fields' => array('a.*', 'b.`title` as category_name', 'b.`section_id` as section_id', 'c.`title` as section_name', 'd.`name` AS author'),
'alias' => 'a',
'cond' => $conditions,
'order' => 'a.`date` DESC',
'page' => $page,
'limit' => Config::read('per_page', 'loads'),
));
// Additional fields
if (is_object($this->AddFields) && count($sql) > 0) {
$sql = $this->AddFields->mergeRecords($sql);
}
//ITERATION RECORDS
foreach ($sql as $result) {
$markets = array();
$result = $this->Parser->quoteTags($result);
$htmlloads = $this->Parser->getAndParse('loads/tablemat.html');
$markets['{MODER_PANEL}'] = $this->_getAdminBar($result);
$markets['{ENTRY_URL}'] = $entry_url = get_url('/loads/view/' . $result['id']);
$announce = $this->Parser->unquoteTags($result['main']);
$announce = $this->Textarier->getAnnounce($announce, $entry_url, 0, Config::read('announce_lenght', 'loads'));
$markets['{ANNOUNCE}'] = $this->Parser->quoteTags($announce);
foreach ($result as $key=>$value) {
$markets['{'.strtoupper($key).'}'] = h($value);
}
$markets['{LOADS}'] = $result['downloads'];
$markets['{PROFILE_URL}'] = getProfileUrl($result['author_id']);
$markets['{CATEGORY_URL}'] = get_url('/loads/category/' . $result['category_id']);
$html .= $this->_replaceMarkets($markets, $htmlloads);
//prepear cache tags
$this->setCacheTag(array(
'user_id_' . $result['author_id'],
'record_id_' . $result['id'],
));
}
if ($this->cached)
$this->Cache->write($html, $this->cacheKey, $this->cacheTags);
}
return $this->_view($html);
}
Путь к списку материалов:
/loads/user_loads - выведет материалы авторизировавшегося пользователя;
/loads/user_loads/1 - выведет материалы пользователя с ID=1.
Данный мод можно доработать под любой из модулей, работающий с материалами (news, stat, foto).
Отправлено: 15 Мар 2011#2
Wasja, как всегда рулит))))
Я горжусь тем, что создал бесплатную CMS - AtomX . И люблю нашу команду)
1
Зарегистрируйтесь или авторизуйтесь что бы писать
Сейчас online: 147. Зарегистрированных: 0. Гостей: 147.