Узнать, есть ли топик в подключенных блогах (решено)

Задача: в шаблоне сделать проверку, находится ли топик в подключенном блоге. Грубо говоря попадает ли топик в интерес читателя или нет. ЛС 0.3.1

в маппере Topic.mapper.class функции GetTopics дописуем
IF(bu.is_moderator IS NULL,0,1) as user_is_blog_reader

в Topic.entity.class пихаем
public function getUserIsBlogReader() {
        return $this->_aData['user_is_blog_reader'];
    }

в шаблоне узнаем
$oTopic->getUserIsBlogReader()

и все
/>/>/>/>/>/>

15 комментариев

avatar
не нужно создавать дополнительную сущность
avatar
пихнул Entity в Topic.entity.class помогло) спасибо.
если еще б хоть раз
{if $oTopic->getTopicIsConnected()==1}
да
{else}
нет
{/if}
выдало да, я был бы счастлив
avatar
нужно переделать GetTopicIsJoinForCurUser(), а так же переписать getTopicIsConnected() чтобы получать результат от GetTopicIsJoinForCurUser() :)
avatar
в Topic.Mapper.class изменил
return new TopicEntity_TopicConnected($aRow);

на
return new TopicEntity_Topic($aRow);

а как сделать чтоб
public function getTopicIsConnected() {
        return $this->_aData['isJoinBlogTopic'];
    } 

получал результат именно из GetTopicIsJoinForCurUser???
avatar
это ничего не даст :)
нужно переделать ;)
функция меппера пусть возвращает не сущность, а 0 или 1.
в функции сущность делать вызов GetTopicIsJoinForCurUser() и помещать возвращаемое значение в _aData['isJoinBlogTopic']
avatar
и вообще можно сделать проще :)
смотрим сущность юзера — там есть getBlog(), которая содержит сущность блога в котором опубликован топик ;)
т.е. в шаблоне нужно получить сущность блога
{assign var="oBlog" value=$oTopic->getBlog()}
— что обычно уже сделано, а потом уже узнать подключил ли пользователь этот блог:
{if $oBlog()->getUserIsJoin()}...{else}...{/if}

и всё ;)
avatar
а $oTopic->getBlog() не работает
нету getBlog()
пишет Не найден класс модуля… в Topic.Entity его действительно нет( Сделал поиск по всем файлах шаблона, нигде $oTopic->getBlog() не найдено
А что есть? есть $oTopic->getBlogId()
а в класе блога Blog.class есть GetBlogById($sBlogId), вот только он не доступен из шаблона((
не знаю как получить сущность блога(
Да,
{if $oBlog()->getUserIsJoin()}...{else}...{/if}
надеюсь $oBlog() ето опечатка, ибо даже смарти его не пропускает, а-ля «такая конструкцыя не разрешена в if» должно быть
{if $oBlog->getUserIsJoin()}...{else}...{/if}

Почему я начал делать проверку через маппер? по тому что даже нахождения урла блога, к которому пренадлежыт топик все равно далается именно из мапера топика, а не блога… таким же способом узнается, getUserIsBlogAdministrator()… Хм… а ето идея… существующий мапер подправить, вместо создания своего, ща буду ковырять
конечно я буду рад, если с шаблона можна будет узнать есть ли топик в подключенном блоге.
avatar
ёпрст. Тогда просто получи блог по id-ку в экшене или в той же сущности измени код на что-то вроде этого:
public function getBlog() {
    	if (!isset($this->_aData['blog'])) 
    	{
    		$oEngine=Engine::getInstance();
    		$this->_aData['blog'] = $oEngine->Blog_GetBlogById($this->getBlogId());
    	}
    	return $this->_aData['blog'];
    }
avatar
$oBlog->getCurrentUserIsJoin() возвращает false(( как видим блог подключен(
avatar
смотрите внимательнее — нужна функция getUserIsJoin()
avatar
конечно я пытался getUserIsJoin() но его нет:
Uncaught exception 'Exception' with message 'Не найден класс модуля — getUserIsJoin
в а шаблоне списка блога делается проверка через $oBlog->getCurrentUserIsJoin()
На всякий случай код з шаблона topic_list.tpl может здесь напартачил
{foreach from=$aTopics item=oTopic}
{assign var="oBlog" value=$oTopic->getBlog()}
    {if $oUserCurrent 
	 and $oUserCurrent->getSettingsHideNotJoinedBlogs()} //включалка пряталки(работает)
       {if $oBlog->getCurrentUserIsJoin()}
       да
       {else}
       Нет
       {/if}
   {else}... 
avatar
не обратил внимание, что LS 0.3.1 — я то про 0.4 говорил.
впрочем для 0.3 можно сделать так же.
А так посмотрите экшен блога там это сделано так:
/**
		 * Проверяем является ли текущий пользователь пользователем блога
		 */
		$bNeedJoin=true;
		$oBlogUser=null;
		if ($this->oUserCurrent) {
			if ($oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
				$bNeedJoin=false;
			}
		}
...
$this->Viewer_Assign('bNeedJoin',$bNeedJoin);

и далее в шаблоне {if $bNeedJoin}
avatar
извини, но ето через чур кривой метод… лезть через клас блога…
обясните пожалуста, в которому порядку исполняется связка клас-мапер-ентити…
ибо я смотрю на свой код (тот что сейчас в топике), и на код, по которому сейчас работают функции с топиком и не замечаю конструктивной разницы… думал кто-то заметит… и чуть поправит
обясните принцып, по которому получаются значения параметров блога, что за чем откуда вызивается и передаэтся, может тогда дело прояснится…
avatar
Бюсь весь день над тем же. Решение из топика не дает результата.

Пытался также привычным путем, прописал в Topic.entity.class.php:


	public function getCurrentUserIsJoin() {
	$oBlog = Engine::getInstance()->Blog_GetBlogById($this->getBlogId());
	return $oBlog->getCurrentUserIsJoin();
	}


Но в результате при вызове из шаблона $oTopic->getCurrentUserIsJoin() всегда получаем false даже для подключенных пользователей.

Увидел в одной теме ответ ort'a:
Для использования {$oBlog->getUserIsModerator()} в комментариях, необходимо включить подгрузку данных о пользоветеле блога в Comment.class.php ...
Но далее по тексту приведен код для 0.4 Подозреваю, что в 0.3 тоже надо подгрузить данные о пользователе в Topic.class.php, чтобы заработало обращение $oTopic->getCurrentUserIsJoin(). Но как сделать, не знаю.

Также могло бы помочь, если бы удалось получить сущность блога в шаблоне топика… Как и писали выше, в 0.3 нет GetBlog, есть только GetBlogById в Blog.class.php. В общем, буду благодарен любой помощи.
avatar
Есть контакт! 11 часов поисков вылилось в следующее решение ))

В Topic.entity.class.php добавляем функцию
public function getCurrentUserIsJoin($UserId) {
		$oBlogUser = Engine::getInstance()->Blog_GetRelationBlogUserByBlogIdAndUserId($this->getBlogId(),$UserId);
		return $oBlogUser;
	}


И… все.

Из шаблона топика узнаем о подключении пользователя обращением:
$oTopic->getCurrentUserIsJoin($oUserCurrent->getId())

Т.е. в функцию передается параметр — id текущего юзера.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.