В файле /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_title asc
очистил кеш и почему-то только у администратора сортируется ) у обычных пользователей нет
И так, у меня установлен плагин 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. Для админа сортировка не работает. Я не стал париться. Но решение есть тут
что бы срабатывало и для админов, надо подправить файл /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
";
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
заметил, что сортировка идет на каждой странице, т.е. если я переключаюсь на 2-ю страницу блогов, там начинается сортировка заново, а не идет продолжение по алфавиту. после всех изменений, идет так:
1 страница блогов: от А Б В Г Д и тд конец алфавита
2 страница блогов: от А Б В Г Д и тд конец алфавита
3 страница блогов: от А Б В Г Д и тд конец алфавита а нужно так:
1 страница блогов: А Б В Г Д
2 страница блогов: Е Ё Ж З И
3 страница блогов: К Л М Н О
4 страница блогов: остальное
так в таблице блогов в базе данных есть поле с количеством людей состоящих в блоге — blog_count_user, по нему и сортируйте (это команда order в выборке)
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;
}
27 комментариев
Ищем в ней строку:
Заменяем на
Чистим кеш и радуемся.
Смотри, заходишь в /classes/actions/ActionTopic.class.php
видишь там событие EventAdd
в нем видишь вызов
— значит нам нужен /classes/modules/blof/Blog.class.php
в нем видим 3 вызова
лезем в эти функции и ищем обращения к мапперу
идем в маппер и во всех этих функциях прописываем в $sql в конец
ORDER by b.blog_title asc
очистил кеш и почему-то только у администратора сортируется ) у обычных пользователей нет
сделал:
1. $data=$this->oMapperBlog->GetBlogs(); — для админа
2. $data=$this->oMapperBlog->GetBlogsByOwnerId($sUserId);
А здесь что и на что менять/добавлять? Там же вроде другая таблица…
3. $data = $this->oMapperBlog->GetBlogUsers($aFilter);
пока что работает только у админа.
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
И так, у меня установлен плагин Blogs Autoconnect Plugin, и чтоб его заставить выводить список блогов по алфавиту, надо отредактировать Autoconnect.mapper.class.php
Топаем в /plugins/autoconnect/classes/modules/autoconnect/mapper/Autoconnect.mapper.class.php 37строка
Находим код
И в конце добавляем ORDER by b.blog_title asc
Всё. Сортировка по алфавиту готова.
PS. Для админа сортировка не работает. Я не стал париться. Но решение есть тут
меняем на
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
после всех изменений, идет так:
1 страница блогов: от А Б В Г Д и тд конец алфавита
2 страница блогов: от А Б В Г Д и тд конец алфавита
3 страница блогов: от А Б В Г Д и тд конец алфавита
а нужно так:
1 страница блогов: А Б В Г Д
2 страница блогов: Е Ё Ж З И
3 страница блогов: К Л М Н О
4 страница блогов: остальное
Ничего не дает(