Персонализация блогов
Нужно разрешить пользователям редактировать заголовки личных блогов (и другие характеристики).
Изменения.
Поскольку редактирование блога уже есть для типа блогов open, пробую разрешить его для personal.
ActionBlog.class.php
protected function EventEditBlog()
убираю этот фрагмент, чтобы персональный блог не выдавал ошибки
заменяю
т.к. персональному блогу не надо будет менять тип
добавляю тип блога personal, потому как его нет в списке
На этом этапе возникает ошибка, из за того что у персонального блога нет свойства user_login, и переадресация после редактирования происходит по неправильному адресу, поэтому после слов
изменяем код, отвечающий за переадресацию
теперь блог стал доступен в форме редактирования по адресу сайт/blog/edit/id блога/
Добавляю в профиль пользователя ссылку на его блог и ссылку на редактирования для владельца
1.получить данные блога.
ActionProfile.class.php
2. темплэейты
в языковой файл добавим
в actions/ActionProfile/Whois.tpl
3. В темплейт редактирования блога ActionBlog/add.tpl выбор типа, начинающийся со строки
{$aLang.blog_create_type}:
ограничиваю условием не-персонального блога
Изменения.
Поскольку редактирование блога уже есть для типа блогов open, пробую разрешить его для personal.
ActionBlog.class.php
protected function EventEditBlog()
убираю этот фрагмент, чтобы персональный блог не выдавал ошибки
/**
* Проверяем тип блога
*/
if ($oBlog->getType()=='personal') {
return parent::EventNotFound();
}
заменяю
$oBlog->setType(getRequest('blog_type'));
наif ($oBlog->getType()!='personal') {
$oBlog->setType(getRequest('blog_type'));
}
т.к. персональному блогу не надо будет менять тип
добавляю тип блога personal, потому как его нет в списке
/**
* Проверяем доступные типы блога для создания, пока доступен только один тип - open
*/
if (!in_array(getRequest('blog_type'),array('open','personal'))) {
$this->Message_AddError($this->Lang_Get('blog_create_type_error'),$this->Lang_Get('error'));
$bOk=false;
}
На этом этапе возникает ошибка, из за того что у персонального блога нет свойства user_login, и переадресация после редактирования происходит по неправильному адресу, поэтому после слов
/**
* Обновляем блог
*/
изменяем код, отвечающий за переадресацию
if ($this->Blog_UpdateBlog($oBlog)) {
if ($this->getType()=='personal')
$blgurl=DIR_WEB_ROOT.'/'.ROUTE_PAGE_MY.'/'.$this->getUserLogin().'/'; else $blgurl=$oBlog->getUrlFull();
func_header_location($blgurl);
} else {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return Router::Action('error');
}
теперь блог стал доступен в форме редактирования по адресу сайт/blog/edit/id блога/
Добавляю в профиль пользователя ссылку на его блог и ссылку на редактирования для владельца
1.получить данные блога.
ActionProfile.class.php
/* получаем персональный блог юзера */
$aUserBlog=$this->Blog_GetPersonalBlogByUserId($this->oUserProfile->getId());
/*добавляем переменную шаблона*/
$this->Viewer_Assign('aUserBlog',$aUserBlog);
2. темплэейты
в языковой файл добавим
'profile_blog' => 'Личный блог',
в actions/ActionProfile/Whois.tpl
{if $aUserBlog}
<tr>
<td class="var">{$aLang.profile_blog}:</td>
<td ><a href="{$DIR_WEB_ROOT}/my/{$oUserProfile->getLogin()}/">{$aUserBlog->getTitle()|escape:'html'}</a>
{if $oUserCurrent && $oUserProfile->getId()==$oUserCurrent->getId()}
<div class="action"><li class="edit"><a title="Редактировать" href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_BLOG}/edit/{$aUserBlog->getId()}/">Редактировать</a></li></div>{/if}<br />
</td>
</tr>
{/if}
3. В темплейт редактирования блога ActionBlog/add.tpl выбор типа, начинающийся со строки
{$aLang.blog_create_type}:
ограничиваю условием не-персонального блога
{if $oBlogEdit->getType()!='personal'}
<select name="blog_type" id="blog_type" onChange="">
<option value="open">{$aLang.blog_create_type_open}</option>
</select><br />
<span class="form_note">{$aLang.blog_create_type_notice}</span></p>
{else}<input type="hidden" name="blog_type" value="open">
{/if}
4 комментария
а что в 64 строке то?
Я пока не могу понять, что запускается после экшена ActionBlog.class.php и требует логин.