Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1

Мод материалы пользователя

Wasja

  • Истенный Атомовод
  • Юзер
  • 397
  • Репутация:19 
  • Предупреждения: 0 
  • Регистрация:
    11 Ноя 2010
#1
Мод предназначен для вывода списка материалов, размещенных конкретным пользователем в каталоге файлов.
Для установки мода необходимо добавить в файл "\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);
    }

Путь к списку материалов:
/loads/user_loads - выведет материалы авторизировавшегося пользователя;
/loads/user_loads/1 - выведет материалы пользователя с ID=1.

Данный мод можно доработать под любой из модулей, работающий с материалами (news, stat, foto).

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#2
Wasja, как всегда рулит))))

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)
1
Сейчас online: 147. Зарегистрированных: 0. Гостей: 147.