Сортировка блогов

Привет ребят, помогите пожалуйста, чтоб при создании топика, блоги сортировались по алфавиту, а так же на страничке сайт.ру/blogs/

27 комментариев

avatar
присоединяюсь
avatar
В файле /classes/modules/blog/mapper/Blog.mapper.class.php ищем функцию:
public function GetBlogsRating(&$iCount,$iCurrPage,$iPerPage) {		
		$sql = "SELECT 
					b.blog_id													
				FROM 
					".Config::Get('db.table.blog')." as b 									 
				WHERE 									
					b.blog_type<>'personal'									
				ORDER by b.blog_rating desc
				LIMIT ?d, ?d 	";		
		$aReturn=array();
		if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
			foreach ($aRows as $aRow) {
				$aReturn[]=$aRow['blog_id'];
			}
		}
		return $aReturn;
	}

Ищем в ней строку:
ORDER by b.blog_rating desc


Заменяем на

ORDER by b.blog_title asc


Чистим кеш и радуемся.
avatar
Спасибо, сортировалась страничка /blogs/, но при создании топика и выбор блога, там всё осталось так же )
avatar
Это только пример. Вывод при создании топика сам додумаешь.
avatar
Спасибо
avatar
а как можно реализовать выбор из двух сортировок?
avatar
И всё таки? Как при создании топика сортировку сделать?
avatar
Давай я тебя научу.
Смотри, заходишь в /classes/actions/ActionTopic.class.php
видишь там событие EventAdd
в нем видишь вызов
$this->Viewer_Assign('aBlogsAllow',$this->Blog_GetBlogsAllowByUser($this->oUserCurrent));

— значит нам нужен /classes/modules/blof/Blog.class.php
в нем видим 3 вызова
if ($oUser->isAdministrator()) {
			return $this->GetBlogs();
		} else {						
			$aAllowBlogsUser=$this->GetBlogsByOwnerId($oUser->getId());
			$aBlogUsers=$this->GetBlogUsersByUserId($oUser->getId());			

лезем в эти функции и ищем обращения к мапперу
1. $data=$this->oMapperBlog->GetBlogs();
2. $data=$this->oMapperBlog->GetBlogsByOwnerId($sUserId);
3. $data = $this->oMapperBlog->GetBlogUsers($aFilter);

идем в маппер и во всех этих функциях прописываем в $sql в конец
ORDER by b.blog_title asc
avatar
Честно, сделал всё как ты сказал, во всех функциях поставил
ORDER by b.blog_title asc
очистил кеш и почему-то только у администратора сортируется ) у обычных пользователей нет
avatar
какие плагины стоят?
avatar
ну, короче, если autoconnect стоит, то в нем в маппере надо тоже исправить
avatar
Ща попробую
avatar
автоконнекта не стоит.
сделал:
1. $data=$this->oMapperBlog->GetBlogs(); — для админа
2. $data=$this->oMapperBlog->GetBlogsByOwnerId($sUserId);

А здесь что и на что менять/добавлять? Там же вроде другая таблица…
3. $data = $this->oMapperBlog->GetBlogUsers($aFilter);

пока что работает только у админа.
avatar
уу)

aceAdminPanel, v.1.4-dev.117

aceBlockManager, v.1.0.108

aceMySearch, v.1.4.106

Blogs Autoconnect Plugin, v.1.0.0

Auto fields, v.1.0.0

Change Date, v.0.0.1

Extended registration, v.1.0.0

Обратная связь, v.1.1.0

Groups, v.1.0

Image Preview, v.0.3

Mailing, v.0.1

NiceURL, v.2.1

Note, v.1.0

Static page, v.1.2.1

QIP Smiles, v.0.0.4

Блок опросов, v.1.0.0

Livestreet Sbookmarks Plugin, v.01.0

SEO, v.0.1

Sitemap, v.0.2

Контакты и социальные сервисы, v.1.0

All tags, v.1.0

Запрет редактирования комментированного топика, v.1.0.0

ВКонтакте Видео, v.1.0
avatar
спасибо за краткий курс! )) Всё работает. Плюсануть не могу к сожалению, по причине странной политики на сайте и минусования
avatar
Отлично всё работает, спасибо xyz =)

И так, у меня установлен плагин Blogs Autoconnect Plugin, и чтоб его заставить выводить список блогов по алфавиту, надо отредактировать Autoconnect.mapper.class.php

Топаем в /plugins/autoconnect/classes/modules/autoconnect/mapper/Autoconnect.mapper.class.php 37строка

Находим код

		$sql = "SELECT
					b.blog_id
					FROM
						".Config::Get('db.table.blog')." as b
					WHERE
						(b.user_owner_id = ? AND b.blog_type <> 'personal')
						OR
							(b.blog_type = 'open' 
							AND 
							b.user_owner_id <> ?
							AND 
							b.blog_limit_rating_topic <= ?
							)
						OR
							(b.blog_type = 'close' 
							AND 
							b.blog_id IN (SELECT bu.blog_id FROM ".Config::Get('db.table.blog_user')." AS bu WHERE bu.user_id = ? AND bu.user_role IN (?a))
							AND 
							b.blog_limit_rating_topic <= ?
							)
					";


И в конце добавляем ORDER by b.blog_title asc

		$sql = "SELECT
					b.blog_id
					FROM
						".Config::Get('db.table.blog')." as b
					WHERE
						(b.user_owner_id = ? AND b.blog_type <> 'personal')
						OR
							(b.blog_type = 'open' 
							AND 
							b.user_owner_id <> ?
							AND 
							b.blog_limit_rating_topic <= ?
							)
						OR
							(b.blog_type = 'close' 
							AND 
							b.blog_id IN (SELECT bu.blog_id FROM ".Config::Get('db.table.blog_user')." AS bu WHERE bu.user_id = ? AND bu.user_role IN (?a))
							AND 
							b.blog_limit_rating_topic <= ?
							)
							ORDER by b.blog_title asc
					";


Всё. Сортировка по алфавиту готова.
PS. Для админа сортировка не работает. Я не стал париться. Но решение есть тут
  • Loci
  • 0
avatar
что бы срабатывало и для админов, надо подправить файл /classes/modules/blog/mapper/Blog.mapper.class.php
public function GetBlogs() {
		$sql = "SELECT 
			b.blog_id			 
			FROM 
				".Config::Get('db.table.blog')." as b				
			WHERE 				
				b.blog_type<>'personal'		
						
				";


меняем на
public function GetBlogs() {
		$sql = "SELECT 
			b.blog_id			 
			FROM 
				".Config::Get('db.table.blog')." as b				
			WHERE 				
				b.blog_type<>'personal'		
			ORDER by b.blog_title asc				
				";
avatar
помогло данное решение! спасибо!
avatar
а как сделать сортировку по кол-ву записей в блогах?
avatar
На примере функции GetBlogs():

SELECT b.blog_id, COUNT(t.topic_id) as count
FROM ".Config::Get('db.table.blog')." as b
LEFT JOIN ".Config::Get('db.table.topic')." t ON (t.blog_id = b.blog_id)
WHERE b.blog_type<>'personal'
GROUP BY b.blog_id
ORDER BY count ASC
avatar
заметил, что сортировка идет на каждой странице, т.е. если я переключаюсь на 2-ю страницу блогов, там начинается сортировка заново, а не идет продолжение по алфавиту.
после всех изменений, идет так:
1 страница блогов: от А Б В Г Д и тд конец алфавита
2 страница блогов: от А Б В Г Д и тд конец алфавита
3 страница блогов: от А Б В Г Д и тд конец алфавита
а нужно так:
1 страница блогов: А Б В Г Д
2 страница блогов: Е Ё Ж З И
3 страница блогов: К Л М Н О
4 страница блогов: остальное
avatar
наверняка вы случайно стерли строчку
LIMIT ?d, ?d 
avatar
спс, не стер, просто не дописал выше))
avatar
Кто-нибудь подскажите, как сделать чтобы сортировка была по кол-ву людей состоящих в блоге?
avatar
так в таблице блогов в базе данных есть поле с количеством людей состоящих в блоге — blog_count_user, по нему и сортируйте (это команда order в выборке)
avatar
public function GetBlogsRating(&$iCount,$iCurrPage,$iPerPage) {
        $sql = "SELECT
                    b.blog_id
                FROM
                    ".Config::Get('db.table.blog')." as b
                WHERE
                    b.blog_type<>'personal'
                ORDER by b.blog_count_user desc
                LIMIT ?d, ?d    ";
        $aReturn=array();
        if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
            foreach ($aRows as $aRow) {
                $aReturn[]=$aRow['blog_id'];
            }
        }
        return $aReturn;
    }

Ничего не дает(
avatar
А задать определенный порядок блогов (категорий) можно? Т.е. указывать вручную расположение блога в списке — на первом месте или под номером 10?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.