Персонализация блогов

Нужно разрешить пользователям редактировать заголовки личных блогов (и другие характеристики).

Изменения.
Поскольку редактирование блога уже есть для типа блогов 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 комментария

avatar
Undefined index: user_login in /classes/modules/blog/entity/Blog.entity.class.php on line 64


а что в 64 строке то?
  • Vilz
  • 0
avatar
как у всех.
public function getUserLogin() {
        return $this->_aData['user_login'];
    }

Я пока не могу понять, что запускается после экшена ActionBlog.class.php и требует логин.
avatar
ошибка была очень глупая — не обратила внимание, что после редактирования происходит переход на блог, а адрес неверный.
avatar
подскажите где ошибка
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.