Автоматическое подключение блога. Хак.
upd 15/05/10: для тех у кого были проблемы со счетчиком количества подписчиков — архив хака обновлен с инструкциями и функцией для устранения недочета.
Для версии 0.4 выпущен плагин. (тема)
По просьбам выкладываю хак автоматического присоеднинения к блогу, в который юзер опубликовал свой топик.
В данном хаке в списке доступных для публикации блогов юзеру выводятся все блоги, в которые он может писать по рейтингу(а также те блоги, создателем которых он является).
Для тех, у кого нету изменений в движке хак выложен архивом в разделе бесплатных модулей =>Здесь. Для тех у кого есть изменения,или кому невтерпежь ждать модерации,(пройдена) вся информация под катом.
Инфо для правящих измененный код.
Экшены
Идем в classes/actions (Редактировать будем на примере ActionTopic.class.php — в ActionLink.class.php ActionQuestion.class.php сделать по аналогии)
Находим в функциях EventEdit и EventAdd
Заменяем в обеих функциях на:
После каждой ищем
заменяем на
В функицях SubmitAdd и SubmitEdit ищем
Заменяем на
Все описанные операции (начиная от заголовка «Экшены») необходимо проделать и для ActionLink.class.php ActionQuestion.class.php
Мапперы
Идем в classes/modules/blog
Открываем Blog.class.php и в конец (до закрывающей скобки } ) добавляем
Открываем classes/modules/blog/mapper/Blog.mapper.class.php и также в конец вставляем
С самим движком все, переходим к шаблону — тут чуть-чуть.
Темплейты:
Редактируем файлы templates/skin/new/actions/ActionTopic/add.tpl (а также файлы add.tpl других экшенов — ActionLink и ActionQuestion)
Находим во всех трех файлах
Заменяем $aBlogsUser на $aBlogsUserCanWrite
Вот и все. Делал как и говорил, для заказчика. Кто хочет — пример можно посмотреть на yurobzor.ru
Для версии 0.4 выпущен плагин. (тема)
По просьбам выкладываю хак автоматического присоеднинения к блогу, в который юзер опубликовал свой топик.
В данном хаке в списке доступных для публикации блогов юзеру выводятся все блоги, в которые он может писать по рейтингу(а также те блоги, создателем которых он является).
Для тех, у кого нету изменений в движке хак выложен архивом в разделе бесплатных модулей =>Здесь. Для тех у кого есть изменения,
Инфо для правящих измененный код.
Экшены
Идем в classes/actions (Редактировать будем на примере ActionTopic.class.php — в ActionLink.class.php ActionQuestion.class.php сделать по аналогии)
Находим в функциях EventEdit и EventAdd
/** * Получаем данные для отображения формы * Если админ то делаем доступными все блоги */ $aAllowBlogsUser=array(); $aBlogsOwner=array(); if ($this->oUserCurrent->isAdministrator()) { $aBlogsOwner=$this->Blog_GetBlogs(); } else { $aBlogsOwner=$this->Blog_GetBlogsByOwnerId($this->oUserCurrent->getId()); $aBlogsUser=$this->Blog_GetRelationBlogUsersByUserId($this->oUserCurrent->getId()); foreach ($aBlogsUser as $oBlogUser) { $oBlog=$this->Blog_GetBlogById($oBlogUser->getBlogId()); // делаем через "or" чтоб дать возможность юзеру отредактировать свой топик в блоге в котором он уже не может постить, т.е. для тех топиков что были запощены раньше и был доступ в блог if ($this->ACL_CanAddTopic($this->oUserCurrent,$oBlog) or $oTopic->getBlogId()==$oBlog->getId()) { $aAllowBlogsUser[]=$oBlogUser; } } }
Заменяем в обеих функциях на:
/** * Получаем данные для отображения формы * Если админ то делаем доступными все блоги */ $aAllowBlogsUser=array(); $aBlogsOwner=array(); if ($this->oUserCurrent->isAdministrator()) { $aBlogsOwner=$this->Blog_GetBlogs(); } else { $aBlogsOwner=$this->Blog_GetBlogsByOwnerId($this->oUserCurrent->getId()); $aBlogsUserCanWrite=$this->Blog_GetBlogsUserCanWrite($this->oUserCurrent->getId(),$this->oUserCurrent->getRating()); foreach ($aBlogsUserCanWrite as $oBlogUser) { $oBlog=$this->Blog_GetBlogById($oBlogUser->getBlogId()); // делаем через "or" чтоб дать возможность юзеру отредактировать свой топик в блоге в котором он уже не может постить, т.е. для тех топиков что были запощены раньше и был доступ в блог if ($this->ACL_CanAddTopic($this->oUserCurrent,$oBlog) or $oTopic->getBlogId()==$oBlog->getId()) { $aAllowBlogsUser[]=$oBlogUser; } } }
После каждой ищем
/** * Загружаем переменные в шаблон */ $this->Viewer_Assign('aBlogsUser',$aAllowBlogsUser);
заменяем на
/** * Загружаем переменные в шаблон */ $this->Viewer_Assign('aBlogsUserCanWrite',$aAllowBlogsUser);
В функицях SubmitAdd и SubmitEdit ищем
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId()) { $this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_nojoin'),$this->Lang_Get('error')); return false; }
Заменяем на
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId()) { $oBlogUserNew=new BlogEntity_BlogUser(); $oBlogUserNew->setBlogId($oBlog->getId()); $oBlogUserNew->setUserId($this->oUserCurrent->getId()); $this->oEngine->Blog_AddRelationBlogUser($oBlogUserNew); /** * Увеличиваем число читателей блога */ $oBlog->setCountUser($oBlog->getCountUser()+1); $this->Blog_UpdateBlog($oBlog); }
Все описанные операции (начиная от заголовка «Экшены») необходимо проделать и для ActionLink.class.php ActionQuestion.class.php
Мапперы
Идем в classes/modules/blog
Открываем Blog.class.php и в конец (до закрывающей скобки } ) добавляем
/** * Получает список блогов в которые может писать юзер * * @param unknown_type $sUserId * @return unknown */ public function GetBlogsUserCanWrite($sUserId,$sUserRating) { return $this->oMapperBlog->GetBlogsUserCanWrite($sUserId,$sUserRating); }
Открываем classes/modules/blog/mapper/Blog.mapper.class.php и также в конец вставляем
public function GetBlogsUserCanWrite($sUserId,$sUserRating) { $sql = "SELECT b.* FROM ".DB_TABLE_BLOG." as b WHERE b.blog_type<>'personal' AND b.user_owner_id<> ? AND b.blog_limit_rating_topic <= ? "; $aBlogs=array(); if ($aRows=$this->oDb->select($sql,$sUserId,$sUserRating)) { foreach ($aRows as $aUser) { $aBlogs[]=new BlogEntity_BlogUser($aUser); } } return $aBlogs; }
С самим движком все, переходим к шаблону — тут чуть-чуть.
Темплейты:
Редактируем файлы templates/skin/new/actions/ActionTopic/add.tpl (а также файлы add.tpl других экшенов — ActionLink и ActionQuestion)
Находим во всех трех файлах
{foreach from=$aBlogsUser item=oBlogUser} <option value="{$oBlogUser->getBlogId()}" {if $_aRequest.blog_id==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option> {/foreach}
Заменяем $aBlogsUser на $aBlogsUserCanWrite
Вот и все. Делал как и говорил, для заказчика. Кто хочет — пример можно посмотреть на yurobzor.ru
Интересный ресурс по поисковой оптимизации. На нем вы найдете много полезной информации по SEO и продвижению.
46 комментариев
Надеюсь, что этот хак поможет, чтобы на многих проектах юзеры не тыкались, не понимая ничего. Очень не понятна система, что чтобы написать в блог, надо сначала в другом абсолютно разделе его найти, и подключиться через малюсенькую кнопочку. И только потом писать в него.
этого реально не хватало!
делал всё по инструкции, в итоге даже если присоединиться к коллективному — всё-равно нельзя в него написать (виден только «мой перс блог»
без этого хака всё в порядке :(
PS может еще банально ограничение блога на рейтинг для написания топика меньше чем ваш?
в экшенах точно всё правильно сделал
в мапперах в конце две скобочки "}" — между ними надо писать?
в темплэйтах т.е. один $aBlogsUser на $aBlogsUserCanWrite заменить? $оBlogsUser не трогаем?
от шаблонов не зависит — на new тоже самое
у админов всё ок, не видят коллективные блоги (даже когда добавят) обычные юзеры
«Рейтинг на доступ к коллективным блогам» — 0
«Порог рейтинга, при котором пользователь может создать коллективный блог» — 0
на
После всех тех мест, где изменяли функции с комментарием /*Получаем данные для отображения формы
Поправил в самой теме.
у меня заработало)
Хак уже скачало больше трех сотен пользователей, предположу, что это ваша ошибка.
Возможно, также с каким-то дополнением конфликтует. Обращайтесь в личку, если что.
PS Для 0.4 хак тоже будет переделан.
PPS кому? :)
Юзеры могут опрос в любой блог написать, а вот топик создать не могут, не появились в выпадающем списке при создании топиков коллективные блоги…
Ума не приложу почему, устанавливал заменой всех файлов.
Я смотрю, сегодня обновился хак в каталоге, я как раз скачал после обновления этого, может что сломалось в данной версии хака?
Большое спасибо за хак! Странно, что изначально не предусмотрено это в движке.
«количество читателей»
Чтобы эдакое сделать, чтоб на
спасибо!
Скоро будет патчик?
В ActionTopic.class.php, ActionLink.class.php, ActionQuestion.class.php, там где мы добавляем
на самом деле нужно добавить еще две строчки, которые обновят счетчик
Неправильные счетчики правятся простеньким SQL-запросом.