Как уже говорил сама идея сперта у netuser, реализовал своими руками. netuser предлагал создать дополнительное поле в базе данных. я же не любитель так нагружать базу и воспользовался уже имеющимся полем в таблице prefix_blog, которое называется blog_type.
Сразу скажу, просто так воспользоваться этим столбцом низя. Поэтому мне пришлось все же внести изменения в базу. в данном поле есть ограничение по вводимым данным, поэтому мне пришлось добавить туда названия новых категорий.
после чего я открыл
templates/skin/new/actions/ActionBlog/add.tpl
и внес следующие изменения:
из привиденного кода видно что добавил двестрочки с указанием новых полей, это для того чтобы при создании нового блого можно было сразу указать к какой категории его отнести.
Далее изменения коснулись
classes/modules/blog/mapper/blog.maper.class.php
в который было добавленно необходимое количество функций-запросов к базе на выборку данных:
/****Коллективные блоги****/
public function GetKollektivBlogsRating(&$iCount,$iCurrPage,$iPerPage) {
$iCurrentUserId=-1;
if (is_object($this->oUserCurrent)) {
$iCurrentUserId=$this->oUserCurrent->getId();
}
$sql = "SELECT
b.*,
u.user_profile_avatar as user_profile_avatar,
u.user_profile_avatar_type as user_profile_avatar_type,
u.user_login as user_login,
IF(bu.blog_id IS NULL,0,1) as current_user_is_join
FROM
".DB_TABLE_BLOG." as b
LEFT JOIN (
SELECT
blog_id
FROM ".DB_TABLE_BLOG_USER."
WHERE user_id = ?d
) AS bu ON b.blog_id = bu.blog_id,
".DB_TABLE_USER." as u
WHERE
b.blog_type = 'kollektiv'
AND
b.user_owner_id = u.user_id
ORDER by b.blog_rating desc
LIMIT ?d, ?d
;
";
$aReturn=array();
if ($aRows=$this->oDb->selectPage($iCount,$sql,$iCurrentUserId,($iCurrPage-1)*$iPerPage, $iPerPage)) {
foreach ($aRows as $aRow) {
$aReturn[]=new BlogEntity_Blog($aRow);
}
}
return $aReturn;
}
все изменения в этих функциях это название функции и условие отбора.
кстати. вот уж не знаю то ли в исходном коде движка так было, то ли в тех дополнениях что я ставил на движок, но обнаружил что некоторые SQL запросы не совсем корректно написаны. Самое удивительное что они правильно работали, да и ошибкой собственно это не назовешь, не везде просто были пробелы между «выражением» и знаками условия. И в одном месте вместо != (не равно) стояло <> (больше или меньше), что в принципе приводит к одному результату в нашем случае. ну да не важно… это мелочь которая может сказываться только при очень большом числе однотипных запросов.
соответственно создав необходимое количество таких функций я перешел к следующему файлу:
classes/modules/blog/blog.class.php
в нем действия примерно те же.
добавляем необходимое количество однотипных функций.
public function GetKollektivBlogsRating($iCurrPage,$iPerPage) {
$s1=-1;
if ($this->oUserCurrent) {
$s1=$this->oUserCurrent->getId();
}
if (false === ($data = $this->Cache_Get("blog_rating_{$iCurrPage}_{$iPerPage}_$s1"))) {
$data = array('collection'=>$this->oMapperBlog->GetKollektivBlogsRating($iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, "blog_rating_{$iCurrPage}_{$iPerPage}_$s1", array("blog_update","blog_new"), 60*15);
}
return $data;
}
здесь так же изменения минимальны. практически копи-паст, только меняем название функции и название той функции к которой обращается сия функция.
Далее открываем файл
classes/actions/ActionBlog.php там я не стал менять имеющийся эвент, а просто по аналогии создал свой, знаю что не правильно это, но оставил я старый из соображений того что если мне придется отказаться от этой затеи будет просто удалить этот, а не вносить заново изменения.
Дальше все просто…
в файле templates/skin/new/blog_list.tpl
изменения и все… вроде как кажется готово…
но вот оказалось что нет…
я сейчас уже не вспомню какие файлы я менял, но эти все файлы были mapper или classes, вообщем пришлось расширить некоторые запросы, связанные с b.blog_type, чтобы не утомлять себе перебором всех файлов я просто воспользовался поиском по файлом и их оказалось около 5 шт всего.
там пришлось где встречалось условие связанное с b.blog_type и значением open добавить еще и новые значения.
иначе возникает интересный глюк на сайте. Создать блог ты можешь, создать тут же в блоге топик, тоже можешь и тут же его прокомментировать, но вот посмотреть его среди списка топиков не можешь, его не видно.
вот в принципе и все.
Осталось разобраться как исправить персональные блоги, поскольку фактически вывод персональных это не блог, а список всех топиков пользователя и тех в том числе которые им были написаны в коллективных блогах.
Ах да… и еще нужно внести поправки в разбиение на страницы не правильно переадресовывает. Я даже знаю почему, но вот руки не доходят пока что.
3 комментария
Жесть.
и воспользовался уже имеющимся полем в таблице prefix_blog, которое называется blog_type
Очень зря, еще давным давно, когда я писал это для 0,2 livestreet.ru/blog/sollutions/444.html обсудили, что это не очень разумно делать, даже если не смотреть на раздвоение логики (это блог_тайп это функциональное разделение, а не логическое), то это просто глупо делать по причине описанной вами же:
добавляем необходимое количество однотипных функций.
А еще кучу enum типов в базе, ага. И кучу правок в логике фильтраторов топиков, иначе все будет тупить.
именно поэтому и делил по этому полю… потому что функционально…
в моем проекте есть четыре разных функциональных раздела.
вот их и отделил. в будущем планируется 5 функциональный раздел, но под него уже в базе все есть, останется внести необходимые условия.
так же как в проекте предусмотрено два каталога и мне пришлось попотеть чтобы поставить два ЛС-Каталога на один движок.
3 комментария
Очень зря, еще давным давно, когда я писал это для 0,2
А еще кучу enum типов в базе, ага. И кучу правок в логике фильтраторов топиков, иначе все будет тупить.
в моем проекте есть четыре разных функциональных раздела.
вот их и отделил. в будущем планируется 5 функциональный раздел, но под него уже в базе все есть, останется внести необходимые условия.
так же как в проекте предусмотрено два каталога и мне пришлось попотеть чтобы поставить два ЛС-Каталога на один движок.