Как получить теги у топика?

В темплейте топика вставляю блок
{insert name=«block» block='simularTopic'}

В classes/blocks/ добавляю файл BlockSimularTopic.class.php

class BlockSimularTopic extends Block {
	public function Exec() {
		//$sTag = $oTopic->getTags();
		$sTag = "Android";
		if ($aResult=$this->Topic_GetTopicsByTag($sTag,1,5)) {
			$aTopics=$aResult['collection'];
			$this->Viewer_Assign('oTopics',$aTopics);
		}

		
	}
}


Собственно нужно получить значение параметра теги у топика ($sTag = «Android»;)
В чем они туда приходят, в какой переменной?

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

avatar
вы не поверите
//$sTag = $oTopic->getTags();
avatar
вы тоже не поверите, но:
Fatal error: Call to a member function getTags() on a non-object
avatar
Поверю, так как из Вашего кода в теме не видно каким образом Вы получаете объект oTopic что бы уже потом из него брать теги
avatar
Я ж говорю, мы находимся в «блоке», вот какие сюда приходят переменные?
Нет чтоли в LS никакого инспекта, которые «вываливал» бы все пришедшие переменные.

Или может есть другой способ как вытянуть эти теги?
Например в самом шаблоне есть массив с тегами, может его как-то передать в блок?
avatar
При подключении блока нужно в него передать топик, как параметр, и далее его получить:
$this->GetParam('oTopic');
  • ort
  • +1
avatar
Да, спасибо!
Сделал так:
{insert name="block" block='simularTopic' params=$oTopic->getTagsArray()}

И в коде блока читаю первый тег, т.к. Topic_GetTopicsByTag все равно с массивом тегов работать не умеет.
$sTag = $this->GetParam(0);
avatar
Собственно я понял, что вы имеете ввиду.
Блок по всей видимости находится на странице топика.
А Simular — это Similar, то бишь вы хотите вывести похожие топики.
Для этого пытаетесь получить теги искомого топика, а по ним выдернуть другие топики с идентичными тегами.
В блок параметры напрямую не передашь. Лучше воспользоваться hook — ом. В нем можно передать параметр $oTopic.
Если хотите таки блок, то есть изощренный способ получить переменную $oTopic

if(array_key_exists('oTopic',$this->Viewer_GetSmartyObject()->tpl_vars)) {
    $oTopic = $this->Viewer_GetSmartyObject()->tpl_vars['oTopic'];
} else {
    return;
}
$sTag = $oTopic->getTags();
......
avatar
кстати соврал, все-таки есть способ передать параметр
avatar
да, это что-то вроде Similar для древнего LS 0.4.0 :)))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.